Properly clean up after disconnecting
[quassel.git] / src / uisupport / graphicalui.cpp
index 5d9a419..c2422b3 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "actioncollection.h"
 #include "contextmenuactionprovider.h"
+#include "toolbaractionprovider.h"
 
 #ifdef Q_WS_X11
 #  include <QX11Info>
@@ -48,14 +49,12 @@ GraphicalUi::GraphicalUi(QObject *parent) : AbstractUi(parent) {
 
 #ifdef Q_WS_WIN
   _dwTickCount = 0;
-  mainWidget()->installEventFilter(this);
 #endif
-
 }
 
-GraphicalUi::~GraphicalUi() {
+void GraphicalUi::init() {
 #ifdef Q_WS_WIN
-  mainWidget()->removeEventFilter(this);
+  mainWidget()->installEventFilter(this);
 #endif
 }
 
@@ -85,6 +84,12 @@ void GraphicalUi::setUiStyle(UiStyle *style) {
   _uiStyle = style;
 }
 
+void GraphicalUi::disconnectedFromCore() {
+  _contextMenuActionProvider->disconnectedFromCore();
+  _toolBarActionProvider->disconnectedFromCore();
+  AbstractUi::disconnectedFromCore();
+}
+
 bool GraphicalUi::eventFilter(QObject *obj, QEvent *event) {
 #ifdef Q_WS_WIN
   if(obj == mainWidget() && event->type() == QEvent::ActivationChange) {
@@ -103,9 +108,13 @@ bool GraphicalUi::checkMainWidgetVisibility(bool perform) {
   // therefore we watch for activation event and use our stopwatch :)
   if(GetTickCount() - _dwTickCount < 300) {
     // we were active in the last 300ms -> hide it
-    minimizeRestore(false);
+    if(perform)
+      minimizeRestore(false);
+    return false;
   } else {
-    minimizeRestore(true);
+    if(perform)
+      minimizeRestore(true);
+    return true;
   }
 
 #elif defined(HAVE_KDE) && defined(Q_WS_X11)
@@ -184,6 +193,10 @@ bool GraphicalUi::checkMainWidgetVisibility(bool perform) {
   return true;
 }
 
+bool GraphicalUi::isMainWidgetVisible() {
+  return !instance()->checkMainWidgetVisibility(false);
+}
+
 void GraphicalUi::minimizeRestore(bool show) {
   if(show)
     activateMainWidget();