Show all existing BufferViews if we don't have a layout to restore
[quassel.git] / src / qtui / mainwin.cpp
index ea361d9..75f2c83 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-09 by the Quassel Project                          *
+ *   Copyright (C) 2005-2010 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
 #include "qtuistyle.h"
 #include "settingsdlg.h"
 #include "settingspagedlg.h"
+#include "statusnotifieritem.h"
 #include "toolbaractionprovider.h"
 #include "topicwidget.h"
 #include "verticaldock.h"
 
 #ifndef HAVE_KDE
-#  ifdef HAVE_DBUS
-#    include "desktopnotificationbackend.h"
-#  endif
 #  ifdef HAVE_PHONON
 #    include "phononnotificationbackend.h"
 #  endif
@@ -135,6 +133,8 @@ MainWin::MainWin(QWidget *parent)
     _awayLog(0),
     _layoutLoaded(false)
 {
+  setAttribute(Qt::WA_DeleteOnClose, false);  // we delete the mainwin manually
+
   QtUiSettings uiSettings;
   QString style = uiSettings.value("Style", QString()).toString();
   if(!style.isEmpty()) {
@@ -189,17 +189,15 @@ void MainWin::init() {
   setupHotList();
 
 #ifndef HAVE_KDE
-  QtUi::registerNotificationBackend(new TaskbarNotificationBackend(this));
-#  ifndef QT_NO_SYSTEMTRAYICON
-  QtUi::registerNotificationBackend(new SystrayNotificationBackend(this));
-#  endif
 #  ifdef HAVE_PHONON
   QtUi::registerNotificationBackend(new PhononNotificationBackend(this));
 #  endif
-#  ifdef HAVE_DBUS
-  QtUi::registerNotificationBackend(new DesktopNotificationBackend(this));
+#  ifndef QT_NO_SYSTEMTRAYICON
+  QtUi::registerNotificationBackend(new SystrayNotificationBackend(this));
 #  endif
 
+  QtUi::registerNotificationBackend(new TaskbarNotificationBackend(this));
+
 #else /* HAVE_KDE */
   QtUi::registerNotificationBackend(new KNotificationBackend(this));
 #endif /* HAVE_KDE */
@@ -249,6 +247,9 @@ void MainWin::saveStateToSettings(UiSettings &s) {
   s.setValue("MainWinMinimized", isMinimized());
   s.setValue("MainWinMaximized", isMaximized());
   s.setValue("MainWinHidden", !isVisible());
+  BufferId lastBufId = Client::bufferModel()->currentBuffer();
+  if(lastBufId.isValid())
+    s.setValue("LastUsedBufferId", lastBufId.toInt());
 
 #ifdef HAVE_KDE
   saveAutoSaveSettings();
@@ -676,7 +677,9 @@ void MainWin::saveStatusBarStatus(bool enabled) {
 }
 
 void MainWin::setupSystray() {
-#ifndef QT_NO_SYSTEMTRAYICON
+#ifdef HAVE_DBUS
+  _systemTray = new StatusNotifierItem(this);
+#elif !defined QT_NO_SYSTEMTRAYICON
   _systemTray = new LegacySystemTray(this);
 #else
   _systemTray = new SystemTray(this); // dummy
@@ -751,6 +754,12 @@ void MainWin::setConnectedState() {
     IrcConnectionWizard *wizard = new IrcConnectionWizard(this, Qt::Sheet);
     wizard->show();
   }
+  else {
+    QtUiSettings s;
+    BufferId lastUsedBufferId(s.value("LastUsedBufferId").toInt());
+    if(lastUsedBufferId.isValid())
+      Client::bufferModel()->switchToBuffer(lastUsedBufferId);
+  }
 }
 
 void MainWin::loadLayout() {
@@ -758,9 +767,9 @@ void MainWin::loadLayout() {
   int accountId = Client::currentCoreAccount().accountId().toInt();
   QByteArray state = s.value(QString("MainWinState-%1").arg(accountId)).toByteArray();
   if(state.isEmpty()) {
-    // Make sure that the default bufferview is shown
-    if(_bufferViews.count())
-      _bufferViews.at(0)->show();
+    foreach(BufferViewDock *view, _bufferViews)
+      view->show();
+    _layoutLoaded = true;
     return;
   }
 
@@ -770,8 +779,9 @@ void MainWin::loadLayout() {
 
 void MainWin::saveLayout() {
   QtUiSettings s;
-  int accountId = Client::currentCoreAccount().accountId().toInt();
-  if(accountId > 0) s.setValue(QString("MainWinState-%1").arg(accountId) , saveState(accountId));
+  int accountId = _bufferViews.count()? Client::currentCoreAccount().accountId().toInt() : 0; // only save if we still have a layout!
+  if(accountId > 0)
+    s.setValue(QString("MainWinState-%1").arg(accountId) , saveState(accountId));
 }
 
 void MainWin::disconnectedFromCore() {
@@ -1179,4 +1189,3 @@ void MainWin::on_actionDebugLog_triggered() {
 void MainWin::showStatusBarMessage(const QString &message) {
   statusBar()->showMessage(message, 10000);
 }
-