From 87673129fac32d7f4faf1de0606d7e9656f114c2 Mon Sep 17 00:00:00 2001 From: Palo Kisa Date: Thu, 18 Oct 2018 09:58:33 +0200 Subject: [PATCH] session: Add "Abort" button to select WM dialog --- lxqt-session/src/lxqtmodman.cpp | 16 ++++++++++++---- lxqt-session/src/lxqtmodman.h | 2 +- lxqt-session/src/wmselectdialog.cpp | 3 ++- lxqt-session/src/wmselectdialog.ui | 2 +- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/lxqt-session/src/lxqtmodman.cpp b/lxqt-session/src/lxqtmodman.cpp index b1d52eb3..00fdd837 100644 --- a/lxqt-session/src/lxqtmodman.cpp +++ b/lxqt-session/src/lxqtmodman.cpp @@ -83,7 +83,8 @@ void LXQtModuleManager::startup(LXQt::Settings& s) startConfUpdate(); // Start window manager - startWm(&s); + if (!startWm(&s)) + return; startAutostartApps(); @@ -175,14 +176,14 @@ void LXQtModuleManager::themeChanged() } } -void LXQtModuleManager::startWm(LXQt::Settings *settings) +bool LXQtModuleManager::startWm(LXQt::Settings *settings) { // if the WM is active do not run WM. // all window managers must set their name according to the spec if (!QString::fromUtf8(NETRootInfo(QX11Info::connection(), NET::SupportingWMCheck).wmName()).isEmpty()) { mWmStarted = true; - return; + return true; } if (mWindowManager.isEmpty()) @@ -194,6 +195,8 @@ void LXQtModuleManager::startWm(LXQt::Settings *settings) if (mWindowManager.isEmpty() || ! findProgram(mWindowManager.split(QL1C(' '))[0])) { mWindowManager = showWmSelectDialog(); + if (mWindowManager.isEmpty()) + return false; settings->setValue(QL1S("window_manager"), mWindowManager); settings->sync(); } @@ -222,6 +225,7 @@ void LXQtModuleManager::startWm(LXQt::Settings *settings) // FIXME: blocking is a bad idea. We need to start as many apps as possible and // only wait for the start of WM when it's absolutely needed. // Maybe we can add a X-Wait-WM=true key in the desktop entry file? + return true; } void LXQtModuleManager::startProcess(const XdgDesktopFile& file) @@ -395,7 +399,11 @@ QString LXQtModuleManager::showWmSelectDialog() WmSelectDialog dlg(availableWM); dlg.exec(); - return dlg.windowManager(); + if (dlg.result() == QDialog::Accepted) + return dlg.windowManager(); + + QCoreApplication::exit(1); + return QString{}; } void LXQtModuleManager::resetCrashReport() diff --git a/lxqt-session/src/lxqtmodman.h b/lxqt-session/src/lxqtmodman.h index 0e27ff75..fcd2dca5 100644 --- a/lxqt-session/src/lxqtmodman.h +++ b/lxqt-session/src/lxqtmodman.h @@ -106,7 +106,7 @@ public slots: private: //! \brief Start Window Manager - void startWm(LXQt::Settings *settings); + bool startWm(LXQt::Settings *settings); void wmStarted(); void startAutostartApps(); diff --git a/lxqt-session/src/wmselectdialog.cpp b/lxqt-session/src/wmselectdialog.cpp index 29443292..93278de2 100644 --- a/lxqt-session/src/wmselectdialog.cpp +++ b/lxqt-session/src/wmselectdialog.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include #define TYPE_ROLE Qt::UserRole + 1 @@ -136,5 +137,5 @@ void WmSelectDialog::selectFileDialog(const QModelIndex &/*index*/) void WmSelectDialog::changeBtnStatus(const QModelIndex &/*index*/) { QString wm = windowManager(); - ui->buttonBox->setEnabled(!wm.isEmpty() && findProgram(wm)); + ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(!wm.isEmpty() && findProgram(wm)); } diff --git a/lxqt-session/src/wmselectdialog.ui b/lxqt-session/src/wmselectdialog.ui index 63d9c75a..44cf829f 100644 --- a/lxqt-session/src/wmselectdialog.ui +++ b/lxqt-session/src/wmselectdialog.ui @@ -81,7 +81,7 @@ Qt::Horizontal - QDialogButtonBox::Ok + QDialogButtonBox::Abort|QDialogButtonBox::Ok