X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fmainwin.cpp;h=3ea5d90c50b8dbe33078a1201f2b6535ed8c9a65;hp=df1a7dcf8935dd05e61aead8b53ff00e6c14c3b0;hb=580662426b8b734566b37de61deccf5b89970c6e;hpb=6bcfaf51a90b3ec38cf8602cefd8aa8971d01586 diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index df1a7dcf..3ea5d90c 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -51,11 +51,14 @@ #include "chatmonitorview.h" #include "chatview.h" #include "client.h" -#include "clientsyncer.h" #include "clientbacklogmanager.h" #include "clientbufferviewconfig.h" #include "clientbufferviewmanager.h" #include "clientignorelistmanager.h" +#include "coreconfigwizard.h" +#include "coreconnectdlg.h" +#include "coreconnection.h" +#include "coreconnectionstatuswidget.h" #include "coreinfodlg.h" #include "contextmenuactionprovider.h" #include "debugbufferviewoverlay.h" @@ -67,6 +70,7 @@ #include "irclistmodel.h" #include "ircconnectionwizard.h" #include "jumpkeyhandler.h" +#include "legacysystemtray.h" #include "msgprocessorstatuswidget.h" #include "nicklistwidget.h" #include "qtuiapplication.h" @@ -75,7 +79,6 @@ #include "qtuistyle.h" #include "settingsdlg.h" #include "settingspagedlg.h" -#include "systemtray.h" #include "toolbaractionprovider.h" #include "topicwidget.h" #include "verticaldock.h" @@ -93,6 +96,10 @@ # include "knotificationbackend.h" #endif /* HAVE_KDE */ +#ifdef HAVE_SSL +# include "sslinfodlg.h" +#endif + #ifdef HAVE_INDICATEQT #include "indicatornotificationbackend.h" #endif @@ -105,7 +112,7 @@ #include "settingspages/chatviewsettingspage.h" #include "settingspages/connectionsettingspage.h" #include "settingspages/coreaccountsettingspage.h" -#include "settingspages/generalsettingspage.h" +#include "settingspages/coreconnectionsettingspage.h" #include "settingspages/highlightsettingspage.h" #include "settingspages/identitiessettingspage.h" #include "settingspages/ignorelistsettingspage.h" @@ -122,17 +129,12 @@ MainWin::MainWin(QWidget *parent) #else : QMainWindow(parent), #endif - coreLagLabel(new QLabel()), - sslLabel(new QLabel()), - msgProcessorStatusWidget(new MsgProcessorStatusWidget()), + _msgProcessorStatusWidget(new MsgProcessorStatusWidget(this)), + _coreConnectionStatusWidget(new CoreConnectionStatusWidget(Client::coreConnection(), this)), _titleSetter(this), _awayLog(0), _layoutLoaded(false) { -#ifdef Q_WS_WIN - dwTickCount = 0; -#endif - QtUiSettings uiSettings; QString style = uiSettings.value("Style", QString()).toString(); if(!style.isEmpty()) { @@ -156,6 +158,15 @@ void MainWin::init() { connect(GraphicalUi::contextMenuActionProvider(), SIGNAL(showChannelList(NetworkId)), SLOT(showChannelList(NetworkId))); connect(GraphicalUi::contextMenuActionProvider(), SIGNAL(showIgnoreList(QString)), SLOT(showIgnoreList(QString))); + connect(Client::coreConnection(), SIGNAL(startCoreSetup(QVariantList)), SLOT(showCoreConfigWizard(QVariantList))); + connect(Client::coreConnection(), SIGNAL(connectionErrorPopup(QString)), SLOT(handleCoreConnectionError(QString))); + connect(Client::coreConnection(), SIGNAL(userAuthenticationRequired(CoreAccount *, bool *, QString)), SLOT(userAuthenticationRequired(CoreAccount *, bool *, QString))); + connect(Client::coreConnection(), SIGNAL(handleNoSslInClient(bool*)), SLOT(handleNoSslInClient(bool *))); + connect(Client::coreConnection(), SIGNAL(handleNoSslInCore(bool*)), SLOT(handleNoSslInCore(bool *))); +#ifdef HAVE_SSL + connect(Client::coreConnection(), SIGNAL(handleSslErrors(const QSslSocket *, bool *, bool *)), SLOT(handleSslErrors(const QSslSocket *, bool *, bool *))); +#endif + // Setup Dock Areas setDockNestingEnabled(true); setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); @@ -168,9 +179,9 @@ void MainWin::init() { setupBufferWidget(); setupMenus(); setupTopicWidget(); - setupChatMonitor(); setupNickWidget(); setupInputWidget(); + setupChatMonitor(); setupStatusBar(); setupToolBars(); setupSystray(); @@ -179,7 +190,9 @@ void MainWin::init() { #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 @@ -210,10 +223,10 @@ void MainWin::init() { // restore locked state of docks QtUi::actionCollection("General")->action("LockLayout")->setChecked(s.value("LockLayout", false).toBool()); - if(Quassel::runMode() != Quassel::Monolithic) { - //showCoreConnectionDlg(true); // autoconnect if appropriate - } else { - startInternalCore(); + CoreConnection *conn = Client::coreConnection(); + if(!conn->connectToCore()) { + // No autoconnect selected (or no accounts) + showCoreConnectionDlg(); } } @@ -262,8 +275,8 @@ void MainWin::restoreStateFromSettings(UiSettings &s) { move(_normalPos); #endif - if(s.value("MainWinHidden").toBool()) - hideToTray(); + if(s.value("MainWinHidden").toBool() && systemTray()->isSystemTrayAvailable()) + systemTray()->hideMainWidget(); else if(s.value("MainWinMinimized").toBool()) showMinimized(); else if(maximized) @@ -570,9 +583,10 @@ void MainWin::setupChatMonitor() { dock->setObjectName("ChatMonitorDock"); ChatMonitorFilter *filter = new ChatMonitorFilter(Client::messageModel(), this); - ChatMonitorView *chatView = new ChatMonitorView(filter, this); - chatView->show(); - dock->setWidget(chatView); + _chatMonitorView = new ChatMonitorView(filter, this); + _chatMonitorView->setFocusProxy(_inputWidget); + _chatMonitorView->show(); + dock->setWidget(_chatMonitorView); dock->hide(); addDockWidget(Qt::TopDockWidgetArea, dock, Qt::Vertical); @@ -598,17 +612,19 @@ void MainWin::setupInputWidget() { _bufferWidget->setFocusProxy(_inputWidget); _inputWidget->inputLine()->installEventFilter(_bufferWidget); + + connect(_topicWidget, SIGNAL(switchedPlain()), _bufferWidget, SLOT(setFocus())); } void MainWin::setupTopicWidget() { VerticalDock *dock = new VerticalDock(tr("Topic"), this); dock->setObjectName("TopicDock"); - TopicWidget *topicwidget = new TopicWidget(dock); + _topicWidget = new TopicWidget(dock); - dock->setWidget(topicwidget); + dock->setWidget(_topicWidget); - topicwidget->setModel(Client::bufferModel()); - topicwidget->setSelectionModel(Client::bufferModel()->standardSelectionModel()); + _topicWidget->setModel(Client::bufferModel()); + _topicWidget->setSelectionModel(Client::bufferModel()->standardSelectionModel()); addDockWidget(Qt::TopDockWidgetArea, dock, Qt::Vertical); @@ -623,18 +639,11 @@ void MainWin::setupTitleSetter() { void MainWin::setupStatusBar() { // MessageProcessor progress - statusBar()->addPermanentWidget(msgProcessorStatusWidget); - - // Core Lag: - updateLagIndicator(); - statusBar()->addPermanentWidget(coreLagLabel); - coreLagLabel->hide(); - connect(Client::signalProxy(), SIGNAL(lagUpdated(int)), this, SLOT(updateLagIndicator(int))); + statusBar()->addPermanentWidget(_msgProcessorStatusWidget); - // SSL indicator - sslLabel->setPixmap(QPixmap()); - statusBar()->addPermanentWidget(sslLabel); - sslLabel->hide(); + // Connection state + _coreConnectionStatusWidget->update(); + statusBar()->addPermanentWidget(_coreConnectionStatusWidget); QAction *showStatusbar = QtUi::actionCollection("General")->action("ToggleStatusBar"); @@ -646,6 +655,8 @@ void MainWin::setupStatusBar() { connect(showStatusbar, SIGNAL(toggled(bool)), statusBar(), SLOT(setVisible(bool))); connect(showStatusbar, SIGNAL(toggled(bool)), this, SLOT(saveStatusBarStatus(bool))); + + connect(Client::coreConnection(), SIGNAL(connectionMsg(QString)), statusBar(), SLOT(showMessage(QString))); } void MainWin::setupHotList() { @@ -665,7 +676,12 @@ void MainWin::saveStatusBarStatus(bool enabled) { } void MainWin::setupSystray() { - _systemTray = new SystemTray(this); +#ifndef QT_NO_SYSTEMTRAYICON + _systemTray = new LegacySystemTray(this); +#else + _systemTray = new SystemTray(this); // dummy +#endif + _systemTray->init(); } void MainWin::setupToolBars() { @@ -712,11 +728,11 @@ void MainWin::setConnectedState() { action->setVisible(!Client::internalCore()); } - disconnect(Client::backlogManager(), SIGNAL(updateProgress(int, int)), msgProcessorStatusWidget, SLOT(setProgress(int, int))); + 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(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 &))); } @@ -727,14 +743,7 @@ void MainWin::setConnectedState() { else statusBar()->clearMessage(); - if(Client::signalProxy()->isSecure()) { - sslLabel->setPixmap(SmallIcon("security-high")); - } else { - sslLabel->setPixmap(SmallIcon("security-low")); - } - - sslLabel->setVisible(!Client::internalCore()); - coreLagLabel->setVisible(!Client::internalCore()); + _coreConnectionStatusWidget->setVisible(!Client::internalCore()); updateIcon(); systemTray()->setState(SystemTray::Active); @@ -746,7 +755,7 @@ void MainWin::setConnectedState() { void MainWin::loadLayout() { QtUiSettings s; - int accountId = Client::currentCoreAccount().toInt(); + 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 @@ -761,19 +770,10 @@ void MainWin::loadLayout() { void MainWin::saveLayout() { QtUiSettings s; - int accountId = Client::currentCoreAccount().toInt(); + int accountId = Client::currentCoreAccount().accountId().toInt(); if(accountId > 0) s.setValue(QString("MainWinState-%1").arg(accountId) , saveState(accountId)); } -void MainWin::updateLagIndicator(int lag) { - 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() { // save core specific layout and remove bufferviews; saveLayout(); @@ -808,21 +808,93 @@ void MainWin::setDisconnectedState() { coll->action("CoreInfo")->setEnabled(false); //_viewMenu->setEnabled(false); statusBar()->showMessage(tr("Not connected to core.")); - sslLabel->setPixmap(QPixmap()); - sslLabel->hide(); - updateLagIndicator(); - coreLagLabel->hide(); - if(msgProcessorStatusWidget) - msgProcessorStatusWidget->setProgress(0, 0); + if(_msgProcessorStatusWidget) + _msgProcessorStatusWidget->setProgress(0, 0); updateIcon(); - systemTray()->setState(SystemTray::Inactive); + systemTray()->setState(SystemTray::Passive); +} + +void MainWin::userAuthenticationRequired(CoreAccount *account, bool *valid, const QString &errorMessage) { + Q_UNUSED(errorMessage) + CoreConnectAuthDlg dlg(account, this); + *valid = (dlg.exec() == QDialog::Accepted); +} + +void MainWin::handleNoSslInClient(bool *accepted) { + QMessageBox box(QMessageBox::Warning, tr("Unencrypted Connection"), tr("Your client does not support SSL encryption"), + QMessageBox::Ignore|QMessageBox::Cancel, this); + box.setInformativeText(tr("Sensitive data, like passwords, will be transmitted unencrypted to your Quassel core.")); + box.setDefaultButton(QMessageBox::Ignore); + *accepted = box.exec() == QMessageBox::Ignore; +} + +void MainWin::handleNoSslInCore(bool *accepted) { + QMessageBox box(QMessageBox::Warning, tr("Unencrypted Connection"), tr("Your core does not support SSL encryption"), + QMessageBox::Ignore|QMessageBox::Cancel, this); + box.setInformativeText(tr("Sensitive data, like passwords, will be transmitted unencrypted to your Quassel core.")); + box.setDefaultButton(QMessageBox::Ignore); + *accepted = box.exec() == QMessageBox::Ignore; + } -void MainWin::startInternalCore() { - ClientSyncer *syncer = new ClientSyncer(); - Client::registerClientSyncer(syncer); - connect(syncer, SIGNAL(syncFinished()), syncer, SLOT(deleteLater()), Qt::QueuedConnection); - syncer->useInternalCore(); +#ifdef HAVE_SSL + +void MainWin::handleSslErrors(const QSslSocket *socket, bool *accepted, bool *permanently) { + QString errorString = "