Bring Quassel to front on tray icon click
[quassel.git] / src / uisupport / graphicalui.cpp
index 2d1943f..a35a297 100644 (file)
@@ -24,7 +24,9 @@
 #include "graphicalui.h"
 
 #include "actioncollection.h"
+#include "uisettings.h"
 #include "contextmenuactionprovider.h"
+#include "toolbaractionprovider.h"
 
 #ifdef Q_WS_X11
 #  include <QX11Info>
@@ -57,16 +59,38 @@ void GraphicalUi::init() {
 #endif
 }
 
-ActionCollection *GraphicalUi::actionCollection(const QString &category) {
+ActionCollection *GraphicalUi::actionCollection(const QString &category, const QString &translatedCategory) {
   if(_actionCollections.contains(category))
     return _actionCollections.value(category);
   ActionCollection *coll = new ActionCollection(_mainWidget);
+
+  if(!translatedCategory.isEmpty())
+    coll->setProperty("Category", translatedCategory);
+  else
+    coll->setProperty("Category", category);
+
   if(_mainWidget)
     coll->addAssociatedWidget(_mainWidget);
   _actionCollections.insert(category, coll);
   return coll;
 }
 
+QHash<QString, ActionCollection *> GraphicalUi::actionCollections() {
+  return _actionCollections;
+}
+
+void GraphicalUi::loadShortcuts() {
+  foreach(ActionCollection *coll, actionCollections())
+    coll->readSettings();
+}
+
+void GraphicalUi::saveShortcuts() {
+  ShortcutSettings s;
+  s.clear();
+  foreach(ActionCollection *coll, actionCollections())
+    coll->writeSettings();
+}
+
 void GraphicalUi::setMainWidget(QWidget *widget) {
   _mainWidget = widget;
 }
@@ -83,6 +107,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) {
@@ -101,9 +131,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)
@@ -167,7 +201,7 @@ bool GraphicalUi::checkMainWidgetVisibility(bool perform) {
   }
 #else
 
-  if(!mainWidget()->isVisible() || mainWidget()->isMinimized()) {
+  if(!mainWidget()->isVisible() || mainWidget()->isMinimized() || !mainWidget()->isActiveWindow()) {
     if(perform)
       minimizeRestore(true);
     return true;
@@ -182,6 +216,10 @@ bool GraphicalUi::checkMainWidgetVisibility(bool perform) {
   return true;
 }
 
+bool GraphicalUi::isMainWidgetVisible() {
+  return !instance()->checkMainWidgetVisibility(false);
+}
+
 void GraphicalUi::minimizeRestore(bool show) {
   if(show)
     activateMainWidget();