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

List:       kde-commits
Subject:    branches/KDE/4.5/kdebase/workspace/plasma/desktop/shell
From:       Anthony Bryant <antjbryant () gmail ! com>
Date:       2010-09-23 0:08:01
Message-ID: 20100923000801.CD269AC888 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1178409 by abryant:

Hide panel applet handles when their associated applet is destroyed.
Also, always check before using the QWeakPointer's value.


 M  +37 -9     panelapplethandle.cpp  
 M  +1 -0      panelapplethandle.h  


--- branches/KDE/4.5/kdebase/workspace/plasma/desktop/shell/panelapplethandle.cpp #1178408:1178409
@@ -92,6 +92,10 @@
         moveToApplet();
         return;
     }
+    Plasma::Applet *oldApplet = m_applet.data();
+    if (oldApplet) {
+        disconnect(oldApplet, SIGNAL(destroyed()), this, SLOT(appletDestroyed()));
+    }
 
     m_applet = applet;
     m_hideTimer->stop();
@@ -112,6 +116,8 @@
         QAction *configAction = applet->action("configure");
         m_configureButton->setVisible(configAction && configAction->isEnabled());
 
+        connect(applet, SIGNAL(destroyed()), this, SLOT(appletDestroyed()));
+
         moveToApplet();
     }
 }
@@ -138,25 +144,38 @@
 void PanelAppletHandle::startHideTimeout()
 {
     m_hideTimer->start(800);
-    if (m_applet) {
-        Plasma::WindowEffects::slideWindow(this, m_applet.data()->location());
+    Plasma::Applet *applet = m_applet.data();
+    if (applet) {
+        Plasma::WindowEffects::slideWindow(this, applet->location());
     }
 }
 
 void PanelAppletHandle::configureApplet()
 {
-    if (m_applet) {
-        m_applet.data()->showConfigurationInterface();
+    Plasma::Applet *applet = m_applet.data();
+    if (applet) {
+        applet->showConfigurationInterface();
     }
 }
 
 void PanelAppletHandle::closeApplet()
 {
-    if (m_applet) {
-        m_applet.data()->destroy();
+    Plasma::Applet *applet = m_applet.data();
+    if (applet) {
+        applet->destroy();
     }
 }
 
+void PanelAppletHandle::appletDestroyed()
+{
+    Plasma::Applet *applet = m_applet.data();
+    if (applet) {
+        disconnect(applet, SIGNAL(destroyed()), this, SLOT(appletDestroyed()));
+        m_applet.clear();
+    }
+    hide();
+}
+
 void PanelAppletHandle::enterEvent(QEvent *event)
 {
     Q_UNUSED(event)
@@ -173,18 +192,27 @@
 
 void PanelAppletHandle::mousePressEvent(QMouseEvent *event)
 {
-    emit mousePressed(m_applet.data(), event);
+    Plasma::Applet *applet = m_applet.data();
+    if (applet) {
+        emit mousePressed(applet, event);
 }
+}
 
 void PanelAppletHandle::mouseMoveEvent(QMouseEvent *event)
 {
-    emit mouseMoved(m_applet.data(), event);
+    Plasma::Applet *applet = m_applet.data();
+    if (applet) {
+        emit mouseMoved(applet, event);
 }
+}
 
 void PanelAppletHandle::mouseReleaseEvent(QMouseEvent *event)
 {
-    emit mouseReleased(m_applet.data(), event);
+    Plasma::Applet *applet = m_applet.data();
+    if (applet) {
+        emit mouseReleased(applet, event);
 }
+}
 
 
 #include "panelapplethandle.moc"
--- branches/KDE/4.5/kdebase/workspace/plasma/desktop/shell/panelapplethandle.h #1178408:1178409
@@ -56,6 +56,7 @@
 protected Q_SLOTS:
     void configureApplet();
     void closeApplet();
+    void appletDestroyed();
     void updatePalette();
 
 Q_SIGNALS:
[prev in list] [next in list] [prev in thread] [next in thread] 

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