Allow configuration of shortcuts for platforms other than KDE
[quassel.git] / src / qtui / mainwin.cpp
index e1d961c..878168e 100644 (file)
 #include "settingspages/notificationssettingspage.h"
 #include "settingspages/topicwidgetsettingspage.h"
 
+#ifndef HAVE_KDE
+#  include "settingspages/shortcutssettingspage.h"
+#endif
+
 MainWin::MainWin(QWidget *parent)
 #ifdef HAVE_KDE
   : KMainWindow(parent),
@@ -206,6 +210,9 @@ void MainWin::init() {
   QtUi::registerNotificationBackend(new IndicatorNotificationBackend(this));
 #endif
 
+  // we assume that at this point, all configurable actions are defined!
+  QtUi::loadShortcuts();
+
   connect(bufferWidget(), SIGNAL(currentChanged(BufferId)), SLOT(currentBufferChanged(BufferId)));
 
   setDisconnectedState();  // Disable menus and stuff
@@ -336,6 +343,8 @@ void MainWin::setupActions() {
                                                 0, 0))->setCheckable(true);
 
   // Settings
+  coll->addAction("ConfigureShortcuts", new Action(SmallIcon("configure-shortcuts"), tr("Configure &Shortcuts..."), coll,
+                                                  this, SLOT(showShortcutsDlg())));
   coll->addAction("ConfigureQuassel", new Action(SmallIcon("configure"), tr("&Configure Quassel..."), coll,
                                                   this, SLOT(showSettingsDlg()), QKeySequence(Qt::Key_F7)));
 
@@ -405,6 +414,8 @@ void MainWin::setupMenus() {
 #ifdef HAVE_KDE
   _settingsMenu->addAction(KStandardAction::configureNotifications(this, SLOT(showNotificationsDlg()), this));
   _settingsMenu->addAction(KStandardAction::keyBindings(this, SLOT(showShortcutsDlg()), this));
+#else
+  _settingsMenu->addAction(coll->action("ConfigureShortcuts"));
 #endif
   _settingsMenu->addAction(coll->action("ConfigureQuassel"));
 
@@ -491,6 +502,11 @@ void MainWin::removeBufferView(int bufferViewConfigId) {
 }
 
 void MainWin::bufferViewToggled(bool enabled) {
+  if(!enabled && !isVisible()) {
+    // hiding the mainwindow triggers a toggle of the bufferview (which pretty much sucks big time)
+    // since this isn't our fault and we can't do anything about it, we suppress the resulting calls
+    return;
+  }
   QAction *action = qobject_cast<QAction *>(sender());
   Q_ASSERT(action);
   BufferViewDock *dock = qobject_cast<BufferViewDock *>(action->parent());
@@ -502,23 +518,6 @@ void MainWin::bufferViewToggled(bool enabled) {
 
   if(enabled) {
     Client::bufferViewOverlay()->addView(dock->bufferViewId());
-    BufferViewConfig *config = dock->config();
-    if(config && config->isInitialized()) {
-      BufferIdList buffers;
-      if(config->networkId().isValid()) {
-        foreach(BufferId bufferId, config->bufferList()) {
-          if(Client::networkModel()->networkId(bufferId) == config->networkId())
-            buffers << bufferId;
-        }
-        foreach(BufferId bufferId, config->temporarilyRemovedBuffers().toList()) {
-          if(Client::networkModel()->networkId(bufferId) == config->networkId())
-            buffers << bufferId;
-        }
-      } else {
-        buffers = BufferIdList::fromSet(config->bufferList().toSet() + config->temporarilyRemovedBuffers());
-      }
-      Client::backlogManager()->checkForBacklog(buffers);
-    }
   } else {
     Client::bufferViewOverlay()->removeView(dock->bufferViewId());
   }
@@ -801,7 +800,6 @@ void MainWin::disconnectedFromCore() {
     if(dock && actionData.toInt() != -1) {
       removeAction(action);
       _bufferViews.removeAll(dock);
-      Client::bufferViewOverlay()->removeView(dock->bufferViewId());
       dock->deleteLater();
     }
   }
@@ -984,11 +982,14 @@ void MainWin::showAboutDlg() {
   AboutDlg(this).exec();
 }
 
-#ifdef HAVE_KDE
 void MainWin::showShortcutsDlg() {
+#ifdef HAVE_KDE
   KShortcutsDialog::configure(QtUi::actionCollection("General"), KShortcutsEditor::LetterShortcutsDisallowed);
-}
+#else
+  SettingsPageDlg dlg(new ShortcutsSettingsPage(QtUi::actionCollections(), this), this);
+  dlg.exec();
 #endif
+}
 
 /********************************************************************************************************/