[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    playground/network/kcall
From:       George Kiagiadakis <gkiagiad () csd ! uoc ! gr>
Date:       2009-08-01 19:52:19
Message-ID: 1249156339.913216.24299.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1005703 by gkiagia:

When the MainWindow is hidden or closed, make the systray icon active to let the user have
some visual proof that kcall is still running. Equally, when the MainWindow is visible,
make the systray icon passive, as it is not needed.

 M  +3 -8      kcallapplication.cpp  
 M  +2 -3      kcallapplication.h  
 M  +36 -2     systrayicon.cpp  
 M  +3 -0      systrayicon.h  


--- trunk/playground/network/kcall/kcallapplication.cpp #1005702:1005703
@@ -51,10 +51,7 @@
 
 int KCallApplication::newInstance()
 {
-    if ( !d->mainWindow ) {
-        d->mainWindow = new MainWindow;
-        d->mainWindow->show();
-    }
+    mainWindow()->show();
     return 0;
 }
 
@@ -63,14 +60,12 @@
     return d->accountManager;
 }
 
-void KCallApplication::showHideMainWindow()
+MainWindow *KCallApplication::mainWindow() const
 {
     if ( !d->mainWindow ) {
         d->mainWindow = new MainWindow;
-        d->mainWindow->show();
-    } else {
-        d->mainWindow->setVisible( !d->mainWindow->isVisible() );
     }
+    return d->mainWindow;
 }
 
 #include "kcallapplication.moc"
--- trunk/playground/network/kcall/kcallapplication.h #1005702:1005703
@@ -20,6 +20,7 @@
 #include <KUniqueApplication>
 namespace Tp { class PendingOperation; }
 class AccountManager;
+class MainWindow;
 
 class KCallApplication : public KUniqueApplication
 {
@@ -30,13 +31,11 @@
 
     virtual int newInstance();
     AccountManager *accountManager() const;
+    MainWindow *mainWindow() const;
 
     static inline KCallApplication *instance()
     { return static_cast<KCallApplication*>(QCoreApplication::instance()); }
 
-public slots:
-    void showHideMainWindow();
-
 private:
     struct Private;
     Private *const d;
--- trunk/playground/network/kcall/systrayicon.cpp #1005702:1005703
@@ -16,6 +16,7 @@
 */
 #include "systrayicon.h"
 #include "kcallapplication.h"
+#include "mainwindow.h"
 #include <QtCore/QSet>
 #include <KLocalizedString>
 #include <KDebug>
@@ -53,10 +54,12 @@
     d->notificationItem->setIconByName("internet-telephony");
     d->notificationItem->setAttentionIconByName("voicecall");
     d->notificationItem->setCategory(Experimental::KNotificationItem::Communications);
-    d->notificationItem->setStatus(Experimental::KNotificationItem::Passive);
+    d->notificationItem->setStatus(Experimental::KNotificationItem::Active);
 
     connect(d->notificationItem, SIGNAL(activateRequested(bool, QPoint)),
             SLOT(onActivateRequested(bool, QPoint)));
+
+    KCallApplication::instance()->mainWindow()->installEventFilter(this);
 }
 
 SystrayIcon::~SystrayIcon()
@@ -87,8 +90,39 @@
     if ( d->currentRequest ) {
         d->currentRequest->accept();
     } else {
-        KCallApplication::instance()->showHideMainWindow();
+        MainWindow *mw = KCallApplication::instance()->mainWindow();
+        //reinstall the event filter because the mainwindow is deleted on close, so in some cases
+        //a new mainwindow is returned here.
+        mw->removeEventFilter(this);
+        mw->installEventFilter(this);
+        if ( !mw->isVisible() ) {
+            mw->show();
+            mw->raise();
+            mw->activateWindow();
+        } else {
+            mw->hide();
+        }
     }
 }
 
+bool SystrayIcon::eventFilter(QObject *watched, QEvent *event)
+{
+    if ( watched != KCallApplication::instance()->mainWindow() ) {
+        return AbstractClientApprover::eventFilter(watched, event);
+    }
+
+    switch (event->type()) {
+    case QEvent::Show:
+        d->notificationItem->setStatus(Experimental::KNotificationItem::Passive);
+        break;
+    case QEvent::Hide:
+    case QEvent::Close:
+        d->notificationItem->setStatus(Experimental::KNotificationItem::Active);
+        break;
+    default:
+        break;
+    }
+    return false;
+}
+
 #include "systrayicon.moc"
--- trunk/playground/network/kcall/systrayicon.h #1005702:1005703
@@ -33,6 +33,9 @@
 private slots:
     void onActivateRequested(bool active, const QPoint & pos);
 
+protected:
+    virtual bool eventFilter(QObject *watched, QEvent *event);
+
 private:
     struct Private;
     Private *const d;
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic