X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fmainwin.cpp;h=2ff57017dd057e9e3ba8ceebb5ed3a222423bfdf;hb=cb7da7f32d352d7fc7b680be442a9dc7451b4ffa;hp=1f6d17e0bcbaac89c72e86b77bf13ed126a8bfa5;hpb=14a1ee538d01e41dc55a6e733a7804930aa9fff8;p=quassel.git diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 1f6d17e0..2ff57017 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -27,6 +27,7 @@ # include # include # include +# include #endif #ifdef Q_WS_X11 @@ -93,6 +94,10 @@ # include "knotificationbackend.h" #endif /* HAVE_KDE */ +#ifdef HAVE_INDICATEQT + #include "indicatornotificationbackend.h" +#endif + #include "settingspages/aliasessettingspage.h" #include "settingspages/appearancesettingspage.h" #include "settingspages/backlogsettingspage.h" @@ -121,7 +126,8 @@ MainWin::MainWin(QWidget *parent) sslLabel(new QLabel()), msgProcessorStatusWidget(new MsgProcessorStatusWidget()), _titleSetter(this), - _awayLog(0) + _awayLog(0), + _layoutLoaded(false) { #ifdef Q_WS_WIN dwTickCount = 0; @@ -148,6 +154,7 @@ void MainWin::init() { connect(Client::messageModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)), SLOT(messagesInserted(const QModelIndex &, int, int))); connect(GraphicalUi::contextMenuActionProvider(), SIGNAL(showChannelList(NetworkId)), SLOT(showChannelList(NetworkId))); + connect(GraphicalUi::contextMenuActionProvider(), SIGNAL(showIgnoreList(QString)), SLOT(showIgnoreList(QString))); // Setup Dock Areas setDockNestingEnabled(true); @@ -184,6 +191,10 @@ void MainWin::init() { QtUi::registerNotificationBackend(new KNotificationBackend(this)); #endif /* HAVE_KDE */ +#ifdef HAVE_INDICATEQT + QtUi::registerNotificationBackend(new IndicatorNotificationBackend(this)); +#endif + connect(bufferWidget(), SIGNAL(currentChanged(BufferId)), SLOT(currentBufferChanged(BufferId))); setDisconnectedState(); // Disable menus and stuff @@ -433,12 +444,11 @@ void MainWin::addBufferView(ClientBufferViewConfig *config) { BufferView *view = new BufferView(dock); view->setFilteredModel(Client::bufferModel(), config); view->installEventFilter(_inputWidget); // for key presses - view->show(); Client::bufferModel()->synchronizeView(view); dock->setWidget(view); - dock->show(); + dock->setVisible(_layoutLoaded); // don't show before state has been restored addDockWidget(Qt::LeftDockWidgetArea, dock); _bufferViewsMenu->addAction(dock->toggleViewAction()); @@ -458,6 +468,8 @@ void MainWin::removeBufferView(int bufferViewConfigId) { dock = qobject_cast(action->parent()); if(dock && actionData.toInt() == bufferViewConfigId) { removeAction(action); + _bufferViews.removeAll(dock); + Client::bufferViewOverlay()->removeView(dock->bufferViewId()); dock->deleteLater(); } } @@ -468,6 +480,11 @@ void MainWin::bufferViewToggled(bool enabled) { Q_ASSERT(action); BufferViewDock *dock = qobject_cast(action->parent()); Q_ASSERT(dock); + + // Make sure we don't toggle backlog fetch for a view we've already removed + if(!_bufferViews.contains(dock)) + return; + if(enabled) { Client::bufferViewOverlay()->addView(dock->bufferViewId()); BufferViewConfig *config = dock->config(); @@ -730,7 +747,16 @@ void MainWin::setConnectedState() { void MainWin::loadLayout() { QtUiSettings s; int accountId = Client::currentCoreAccount().toInt(); - restoreState(s.value(QString("MainWinState-%1").arg(accountId)).toByteArray(), accountId); + 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(); + return; + } + + restoreState(state, accountId); + _layoutLoaded = true; } void MainWin::saveLayout() { @@ -751,6 +777,8 @@ void MainWin::updateLagIndicator(int lag) { void MainWin::disconnectedFromCore() { // save core specific layout and remove bufferviews; saveLayout(); + _layoutLoaded = false; + QVariant actionData; BufferViewDock *dock; foreach(QAction *action, _bufferViewsMenu->actions()) { @@ -761,9 +789,12 @@ void MainWin::disconnectedFromCore() { dock = qobject_cast(action->parent()); if(dock && actionData.toInt() != -1) { removeAction(action); + _bufferViews.removeAll(dock); + Client::bufferViewOverlay()->removeView(dock->bufferViewId()); dock->deleteLater(); } } + QtUiSettings s; restoreState(s.value("MainWinState").toByteArray()); setDisconnectedState(); @@ -812,6 +843,14 @@ void MainWin::showChannelList(NetworkId netId) { channelListDlg->show(); } +void MainWin::showIgnoreList(QString newRule) { + SettingsPageDlg dlg(new IgnoreListSettingsPage(this), this); + // prepare config dialog for new rule + if(!newRule.isEmpty()) + qobject_cast(dlg.currentPage())->editIgnoreRule(newRule); + dlg.exec(); +} + void MainWin::showCoreInfoDlg() { CoreInfoDlg(this).exec(); } @@ -947,6 +986,11 @@ void MainWin::toggleMinimizedToTray() { } void MainWin::forceActivated() { +#ifdef HAVE_KDE + show(); + KWindowSystem::forceActiveWindow(winId()); +#else + #ifdef Q_WS_X11 // Bypass focus stealing prevention QX11Info::setAppUserTime(QX11Info::appTime()); @@ -962,6 +1006,7 @@ void MainWin::forceActivated() { show(); raise(); activateWindow(); +#endif /* HAVE_KDE */ } void MainWin::messagesInserted(const QModelIndex &parent, int start, int end) {