More systray refactoring
[quassel.git] / src / qtui / qtui.cpp
index 0a2de59..2a08836 100644 (file)
@@ -28,6 +28,7 @@
 #include "qtuimessageprocessor.h"
 #include "qtuisettings.h"
 #include "qtuistyle.h"
+#include "systemtray.h"
 #include "toolbaractionprovider.h"
 #include "types.h"
 #include "util.h"
@@ -70,6 +71,8 @@ QtUi::~QtUi() {
 
 void QtUi::init() {
   _mainWin->init();
+  QtUiSettings uiSettings;
+  uiSettings.initAndNotify("UseSystemTrayIcon", this, SLOT(useSystemTrayChanged(QVariant)), true);
 }
 
 MessageModel *QtUi::createMessageModel(QObject *parent) {
@@ -88,6 +91,38 @@ void QtUi::disconnectedFromCore() {
   _mainWin->disconnectedFromCore();
 }
 
+void QtUi::useSystemTrayChanged(const QVariant &v) {
+  _useSystemTray = v.toBool();
+  SystemTray *tray = mainWindow()->systemTray();
+  if(_useSystemTray) {
+    if(tray->isSystemTrayAvailable())
+      tray->setVisible(true);
+  } else {
+    if(tray->isSystemTrayAvailable() && mainWindow()->isVisible())
+      tray->setVisible(false);
+  }
+}
+
+bool QtUi::haveSystemTray() {
+  return mainWindow()->systemTray()->isSystemTrayAvailable() && instance()->_useSystemTray;
+}
+
+bool QtUi::isHidingMainWidgetAllowed() const {
+  return haveSystemTray();
+}
+
+void QtUi::minimizeRestore(bool show) {
+  SystemTray *tray = mainWindow()->systemTray();
+  if(show) {
+    if(tray && !_useSystemTray)
+      tray->setVisible(false);
+  } else {
+    if(tray && _useSystemTray)
+      tray->setVisible(true);
+  }
+  GraphicalUi::minimizeRestore(show);
+}
+
 void QtUi::registerNotificationBackend(AbstractNotificationBackend *backend) {
   if(!_notificationBackends.contains(backend)) {
     _notificationBackends.append(backend);
@@ -158,5 +193,5 @@ void QtUi::notificationActivated(uint notificationId) {
   }
   closeNotification(notificationId);
 
-  mainWindow()->forceActivated();
+  activateMainWidget();
 }