X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fmainwin.cpp;h=2ff57017dd057e9e3ba8ceebb5ed3a222423bfdf;hb=cb7da7f32d352d7fc7b680be442a9dc7451b4ffa;hp=d14ebec7b6c239b406cde671a1e424bf1fb3e957;hpb=b856748999df4fdf3092afca52bc584fa07a2cc1;p=quassel.git diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index d14ebec7..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" @@ -108,6 +113,7 @@ #include "settingspages/itemviewsettingspage.h" #include "settingspages/networkssettingspage.h" #include "settingspages/notificationssettingspage.h" +#include "settingspages/topicwidgetsettingspage.h" MainWin::MainWin(QWidget *parent) #ifdef HAVE_KDE @@ -120,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; @@ -147,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); @@ -183,6 +191,12 @@ 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 #ifdef HAVE_KDE @@ -430,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()); @@ -455,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(); } } @@ -465,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(); @@ -727,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() { @@ -748,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()) { @@ -758,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(); @@ -809,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(); } @@ -836,6 +878,7 @@ void MainWin::showSettingsDlg() { dlg->registerSettingsPage(new ChatViewSettingsPage(dlg)); dlg->registerSettingsPage(new ItemViewSettingsPage(dlg)); dlg->registerSettingsPage(new InputWidgetSettingsPage(dlg)); + dlg->registerSettingsPage(new TopicWidgetSettingsPage(dlg)); dlg->registerSettingsPage(new HighlightSettingsPage(dlg)); dlg->registerSettingsPage(new NotificationsSettingsPage(dlg)); dlg->registerSettingsPage(new BacklogSettingsPage(dlg)); @@ -866,8 +909,11 @@ void MainWin::showShortcutsDlg() { /********************************************************************************************************/ bool MainWin::event(QEvent *event) { - if(event->type() == QEvent::WindowActivate) - QtUi::closeNotifications(); + if(event->type() == QEvent::WindowActivate) { + BufferId buffer = Client::bufferModel()->currentBuffer(); + if(buffer.isValid()) + QtUi::closeNotifications(buffer); + } return QMainWindow::event(event); } @@ -940,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()); @@ -955,6 +1006,7 @@ void MainWin::forceActivated() { show(); raise(); activateWindow(); +#endif /* HAVE_KDE */ } void MainWin::messagesInserted(const QModelIndex &parent, int start, int end) { @@ -975,7 +1027,7 @@ void MainWin::messagesInserted(const QModelIndex &parent, int start, int end) { BufferId bufId = idx.data(ChatLineModel::BufferIdRole).value(); BufferInfo::Type bufType = Client::networkModel()->bufferType(bufId); - if(hasFocus && bufId == _bufferWidget->currentBuffer()) + if(hasFocus && bufId == Client::bufferModel()->currentBuffer()) continue; if((flags & Message::Highlight || bufType == BufferInfo::QueryBuffer) @@ -1001,6 +1053,11 @@ void MainWin::messagesInserted(const QModelIndex &parent, int start, int end) { } } +void MainWin::currentBufferChanged(BufferId buffer) { + if(buffer.isValid()) + QtUi::closeNotifications(buffer); +} + void MainWin::clientNetworkCreated(NetworkId id) { const Network *net = Client::network(id); QAction *act = new QAction(net->networkName(), this);