X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fmainwin.cpp;h=b6a21ead112ee11a50c10c951e2702c5ab093bfa;hp=01fb3b75da507ef5c57aa58c6b2cfb3721875ff4;hb=c91b08f855152297a89ec3586792f6616acd0eb9;hpb=75d7f7d582826603236394a37f43feb4cd725bb0 diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 01fb3b75..b6a21ead 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * + * Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -29,6 +29,8 @@ #endif #include "aboutdlg.h" +#include "awaylogfilter.h" +#include "awaylogview.h" #include "action.h" #include "actioncollection.h" #include "buffermodel.h" @@ -100,7 +102,8 @@ MainWin::MainWin(QWidget *parent) sslLabel(new QLabel()), msgProcessorStatusWidget(new MsgProcessorStatusWidget()), _titleSetter(this), - _trayIcon(new QSystemTrayIcon(this)) + _trayIcon(new QSystemTrayIcon(this)), + _awayLog(0) { QtUiSettings uiSettings; QString style = uiSettings.value("Style", QString()).toString(); @@ -116,20 +119,6 @@ MainWin::MainWin(QWidget *parent) installEventFilter(new JumpKeyHandler(this)); -#ifndef HAVE_KDE - QtUi::registerNotificationBackend(new TaskbarNotificationBackend(this)); - QtUi::registerNotificationBackend(new SystrayNotificationBackend(this)); -# ifdef HAVE_PHONON - QtUi::registerNotificationBackend(new PhononNotificationBackend(this)); -# endif -# ifdef HAVE_DBUS - QtUi::registerNotificationBackend(new DesktopNotificationBackend(this)); -# endif - -#else /* HAVE_KDE */ - QtUi::registerNotificationBackend(new KNotificationBackend(this)); -#endif /* HAVE_KDE */ - QtUiApplication* app = qobject_cast qApp; connect(app, SIGNAL(saveStateToSession(const QString&)), SLOT(saveStateToSession(const QString&))); connect(app, SIGNAL(saveStateToSessionSettings(SessionSettings&)), SLOT(saveStateToSessionSettings(SessionSettings&))); @@ -166,6 +155,20 @@ void MainWin::init() { setupSystray(); setupTitleSetter(); +#ifndef HAVE_KDE + QtUi::registerNotificationBackend(new TaskbarNotificationBackend(this)); + QtUi::registerNotificationBackend(new SystrayNotificationBackend(this)); +# ifdef HAVE_PHONON + QtUi::registerNotificationBackend(new PhononNotificationBackend(this)); +# endif +# ifdef HAVE_DBUS + QtUi::registerNotificationBackend(new DesktopNotificationBackend(this)); +# endif + +#else /* HAVE_KDE */ + QtUi::registerNotificationBackend(new KNotificationBackend(this)); +#endif /* HAVE_KDE */ + // restore mainwin state restoreState(s.value("MainWinState").toByteArray()); @@ -222,7 +225,9 @@ void MainWin::setupActions() { connect(lockAct, SIGNAL(toggled(bool)), SLOT(on_actionLockDockPositions_toggled(bool))); coll->addAction("ToggleSearchBar", new Action(SmallIcon("edit-find"), tr("Show &Search Bar"), coll, - 0, 0, tr("Ctrl+F")))->setCheckable(true); + 0, 0, tr("Ctrl+F")))->setCheckable(true); + coll->addAction("ShowAwayLog", new Action(tr("Show Away Log"), coll, + this, SLOT(showAwayLog()))); coll->addAction("ToggleStatusBar", new Action(tr("Show Status &Bar"), coll, 0, 0))->setCheckable(true); @@ -270,6 +275,11 @@ void MainWin::setupMenus() { _bufferViewsMenu->addAction(coll->action("ConfigureBufferViews")); _viewMenu->addSeparator(); _viewMenu->addAction(coll->action("ToggleSearchBar")); + + coreAction = coll->action("ShowAwayLog"); + flagRemoteCoreOnly(coreAction); + _viewMenu->addAction(coreAction); + _viewMenu->addAction(coll->action("ToggleStatusBar")); _viewMenu->addSeparator(); _viewMenu->addAction(coll->action("LockDockPositions")); @@ -315,6 +325,7 @@ void MainWin::addBufferView(BufferViewConfig *config) { //create the view and initialize it's filter BufferView *view = new BufferView(dock); view->setFilteredModel(Client::bufferModel(), config); + view->installEventFilter(_inputWidget->inputLine()); // for key presses view->show(); Client::bufferModel()->synchronizeView(view); @@ -414,20 +425,20 @@ void MainWin::setupInputWidget() { VerticalDock *dock = new VerticalDock(tr("Inputline"), this); dock->setObjectName("InputDock"); - InputWidget *inputWidget = new InputWidget(dock); - dock->setWidget(inputWidget); + _inputWidget = new InputWidget(dock); + dock->setWidget(_inputWidget); addDockWidget(Qt::BottomDockWidgetArea, dock); _viewMenu->addAction(dock->toggleViewAction()); dock->toggleViewAction()->setText(tr("Show Input Line")); - inputWidget->setModel(Client::bufferModel()); - inputWidget->setSelectionModel(Client::bufferModel()->standardSelectionModel()); + _inputWidget->setModel(Client::bufferModel()); + _inputWidget->setSelectionModel(Client::bufferModel()->standardSelectionModel()); - _bufferWidget->setFocusProxy(inputWidget); + _bufferWidget->setFocusProxy(_inputWidget); - inputWidget->inputLine()->installEventFilter(_bufferWidget); + _inputWidget->inputLine()->installEventFilter(_bufferWidget); } void MainWin::setupTopicWidget() { @@ -454,16 +465,14 @@ void MainWin::setupTitleSetter() { void MainWin::setupStatusBar() { // MessageProcessor progress statusBar()->addPermanentWidget(msgProcessorStatusWidget); - connect(Client::messageProcessor(), SIGNAL(progressUpdated(int, int)), msgProcessorStatusWidget, SLOT(setProgress(int, int))); // Core Lag: - updateLagIndicator(0); + updateLagIndicator(); statusBar()->addPermanentWidget(coreLagLabel); coreLagLabel->hide(); connect(Client::signalProxy(), SIGNAL(lagUpdated(int)), this, SLOT(updateLagIndicator(int))); // SSL indicator - connect(Client::instance(), SIGNAL(securedConnection()), this, SLOT(securedConnection())); sslLabel->setPixmap(QPixmap()); statusBar()->addPermanentWidget(sslLabel); sslLabel->hide(); @@ -479,9 +488,6 @@ void MainWin::setupStatusBar() { connect(showStatusbar, SIGNAL(toggled(bool)), statusBar(), SLOT(setVisible(bool))); connect(showStatusbar, SIGNAL(toggled(bool)), this, SLOT(saveStatusBarStatus(bool))); - - connect(Client::backlogManager(), SIGNAL(messagesRequested(const QString &)), this, SLOT(showStatusBarMessage(const QString &))); - connect(Client::backlogManager(), SIGNAL(messagesProcessed(const QString &)), this, SLOT(showStatusBarMessage(const QString &))); } void MainWin::saveStatusBarStatus(bool enabled) { @@ -509,10 +515,8 @@ void MainWin::setupSystray() { } #ifndef Q_WS_MAC - connect(systemTrayIcon(), SIGNAL(activated( QSystemTrayIcon::ActivationReason )), - this, SLOT(systrayActivated( QSystemTrayIcon::ActivationReason ))); + connect(systemTrayIcon(), SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(systrayActivated(QSystemTrayIcon::ActivationReason))); #endif - } void MainWin::changeEvent(QEvent *event) { @@ -520,8 +524,8 @@ void MainWin::changeEvent(QEvent *event) { if(windowState() & Qt::WindowMinimized) { QtUiSettings s; if(s.value("UseSystemTrayIcon").toBool() && s.value("MinimizeOnMinimize").toBool()) { - toggleVisibility(); - event->ignore(); + hideToTray(); + event->accept(); } } } @@ -548,12 +552,24 @@ void MainWin::setConnectedState() { action->setVisible(!Client::internalCore()); } + disconnect(Client::backlogManager(), SIGNAL(updateProgress(int, int)), msgProcessorStatusWidget, SLOT(setProgress(int, int))); + disconnect(Client::backlogManager(), SIGNAL(messagesRequested(const QString &)), this, SLOT(showStatusBarMessage(const QString &))); + disconnect(Client::backlogManager(), SIGNAL(messagesProcessed(const QString &)), this, SLOT(showStatusBarMessage(const QString &))); + if(!Client::internalCore()) { + connect(Client::backlogManager(), SIGNAL(updateProgress(int, int)), msgProcessorStatusWidget, SLOT(setProgress(int, int))); + connect(Client::backlogManager(), SIGNAL(messagesRequested(const QString &)), this, SLOT(showStatusBarMessage(const QString &))); + connect(Client::backlogManager(), SIGNAL(messagesProcessed(const QString &)), this, SLOT(showStatusBarMessage(const QString &))); + } + // _viewMenu->setEnabled(true); if(!Client::internalCore()) statusBar()->showMessage(tr("Connected to core.")); - if(sslLabel->width() == 0) + if(Client::signalProxy()->isSecure()) { + sslLabel->setPixmap(SmallIcon("security-high")); + } else { sslLabel->setPixmap(SmallIcon("security-low")); + } sslLabel->setVisible(!Client::internalCore()); coreLagLabel->setVisible(!Client::internalCore()); @@ -573,13 +589,12 @@ void MainWin::saveLayout() { } void MainWin::updateLagIndicator(int lag) { - coreLagLabel->setText(QString(tr("Core Lag: %1 msec")).arg(lag)); -} - - -void MainWin::securedConnection() { - // todo: make status bar entry - sslLabel->setPixmap(SmallIcon("security-high")); + QString text = tr("Core Lag: %1"); + if(lag == -1) + text = text.arg('-'); + else + text = text.arg("%1 msec").arg(lag); + coreLagLabel->setText(text); } void MainWin::disconnectedFromCore() { @@ -613,6 +628,7 @@ void MainWin::setDisconnectedState() { statusBar()->showMessage(tr("Not connected to core.")); sslLabel->setPixmap(QPixmap()); sslLabel->hide(); + updateLagIndicator(); coreLagLabel->hide(); updateIcon(); } @@ -646,6 +662,21 @@ void MainWin::showCoreInfoDlg() { CoreInfoDlg(this).exec(); } +void MainWin::showAwayLog() { + if(_awayLog) + return; + AwayLogFilter *filter = new AwayLogFilter(Client::messageModel()); + _awayLog = new AwayLogView(filter, 0); + filter->setParent(_awayLog); + connect(_awayLog, SIGNAL(destroyed()), this, SLOT(awayLogDestroyed())); + _awayLog->setAttribute(Qt::WA_DeleteOnClose); + _awayLog->show(); +} + +void MainWin::awayLogDestroyed() { + _awayLog = 0; +} + void MainWin::showSettingsDlg() { SettingsDlg *dlg = new SettingsDlg(); @@ -680,8 +711,10 @@ void MainWin::showShortcutsDlg() { void MainWin::closeEvent(QCloseEvent *event) { QtUiSettings s; - if(s.value("UseSystemTrayIcon").toBool() && s.value("MinimizeOnClose").toBool()) { - toggleVisibility(); + QtUiApplication* app = qobject_cast qApp; + Q_ASSERT(app); + if(!app->aboutToQuit() && s.value("UseSystemTrayIcon").toBool() && s.value("MinimizeOnClose").toBool()) { + toggleMinimizedToTray(); event->ignore(); } else { event->accept(); @@ -689,36 +722,32 @@ void MainWin::closeEvent(QCloseEvent *event) { } } -void MainWin::systrayActivated( QSystemTrayIcon::ActivationReason activationReason) { +void MainWin::systrayActivated(QSystemTrayIcon::ActivationReason activationReason) { if(activationReason == QSystemTrayIcon::Trigger) { - toggleVisibility(); + toggleMinimizedToTray(); } } -void MainWin::toggleVisibility() { - if(isHidden() /*|| !isActiveWindow()*/) { - show(); - if(isMinimized()) { - if(isMaximized()) - showMaximized(); - else - showNormal(); - } +void MainWin::hideToTray() { + if(!systemTrayIcon()->isSystemTrayAvailable()) { + qWarning() << Q_FUNC_INFO << "was called with no SystemTray available!"; + return; + } - raise(); - activateWindow(); - // setFocus(); //Qt::ActiveWindowFocusReason + clearFocus(); + hide(); + systemTrayIcon()->show(); +} +void MainWin::toggleMinimizedToTray() { + if(windowState() & Qt::WindowMinimized) { + // restore + setWindowState((windowState() & ~Qt::WindowMinimized) | Qt::WindowActive); + show(); + raise(); } else { - if(systemTrayIcon()->isSystemTrayAvailable ()) { - clearFocus(); - hide(); - if(!systemTrayIcon()->isVisible()) { - systemTrayIcon()->show(); - } - } else { - lower(); - } + setWindowState((windowState() & ~Qt::WindowActive) | Qt::WindowMinimized); + hideToTray(); } }