From 892c5a27b427b63b8faa4cd5f92141040fd0fcd1 Mon Sep 17 00:00:00 2001 From: Eugene Popov Date: Thu, 3 Mar 2022 21:17:29 +0000 Subject: [PATCH] SystemMonitor: Port to KMainWindow Currently, KSystemActivityDialog is derived from QDialog and therefore has several limitations: * it doesn't save and restore its size and position * it doesn't respect Window Placement settings (it always opens in the center) Porting it to KMainWindow removes these limitations and saves the user from creating window rules to get around them. BUG: 400298 FIXED-IN: 5.25 --- systemmonitor/ksystemactivitydialog.cpp | 61 ++++++++++++------------- systemmonitor/ksystemactivitydialog.h | 15 +++--- systemmonitor/main.cpp | 6 ++- 3 files changed, 38 insertions(+), 44 deletions(-) diff --git a/systemmonitor/ksystemactivitydialog.cpp b/systemmonitor/ksystemactivitydialog.cpp index 3bcde0778..3ff47db0d 100644 --- a/systemmonitor/ksystemactivitydialog.cpp +++ b/systemmonitor/ksystemactivitydialog.cpp @@ -8,6 +8,8 @@ #include "ksystemactivitydialog.h" +#include "processui/ksysguardprocesslist.h" + #include #include #include @@ -16,31 +18,36 @@ #include #include -#include #include #include #include -#include KSystemActivityDialog::KSystemActivityDialog(QWidget *parent) - : QDialog(parent) - , m_processList(nullptr) + : KMainWindow(parent) + , m_configGroup(KSharedConfig::openConfig()->group("TaskDialog")) { setWindowTitle(i18n("System Activity")); setWindowIcon(QIcon::fromTheme(QStringLiteral("utilities-system-monitor"))); - QVBoxLayout *mainLayout = new QVBoxLayout(this); - mainLayout->addWidget(&m_processList); - m_processList.setScriptingEnabled(true); - setSizeGripEnabled(true); + setAutoSaveSettings(); + + m_processList = new KSysGuardProcessList; + m_processList->setScriptingEnabled(true); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(m_processList); - // Since we kinda act like an application more than just a Window, map the usual ctrl+Q shortcut to close as well - QAction *closeWindow = new QAction(this); - closeWindow->setShortcut(QKeySequence::Quit); - connect(closeWindow, &QAction::triggered, this, &KSystemActivityDialog::accept); - addAction(closeWindow); + QWidget *mainWidget = new QWidget; + mainWidget->setLayout(mainLayout); + setCentralWidget(mainWidget); - KConfigGroup cg = KSharedConfig::openConfig()->group("TaskDialog"); - m_processList.loadSettings(cg); + QAction *closeAction = new QAction; + closeAction->setShortcuts({ QKeySequence::Quit, Qt::Key_Escape }); + connect(closeAction, &QAction::triggered, this, &KSystemActivityDialog::close); + addAction(closeAction); + + if (m_configGroup.exists()) { + m_processList->loadSettings(m_configGroup); + } QDBusConnection con = QDBusConnection::sessionBus(); con.registerObject(QStringLiteral("/"), this, QDBusConnection::ExportAllSlots); @@ -56,33 +63,21 @@ void KSystemActivityDialog::run() void KSystemActivityDialog::setFilterText(const QString &filterText) { - m_processList.filterLineEdit()->setText(filterText); - m_processList.filterLineEdit()->setFocus(); + m_processList->filterLineEdit()->setText(filterText); + m_processList->filterLineEdit()->setFocus(); } QString KSystemActivityDialog::filterText() const { - return m_processList.filterLineEdit()->text(); + return m_processList->filterLineEdit()->text(); } void KSystemActivityDialog::closeEvent(QCloseEvent *event) { - saveDialogSettings(); - event->accept(); -} - -void KSystemActivityDialog::reject() -{ - saveDialogSettings(); - QDialog::reject(); -} - -void KSystemActivityDialog::saveDialogSettings() -{ - // When the user closes the dialog, save the process list setup - KConfigGroup cg = KSharedConfig::openConfig()->group("TaskDialog"); - m_processList.saveSettings(cg); + m_processList->saveSettings(m_configGroup); KSharedConfig::openConfig()->sync(); + + KMainWindow::closeEvent(event); } QSize KSystemActivityDialog::sizeHint() const diff --git a/systemmonitor/ksystemactivitydialog.h b/systemmonitor/ksystemactivitydialog.h index 4a56a638b..2cc589805 100644 --- a/systemmonitor/ksystemactivitydialog.h +++ b/systemmonitor/ksystemactivitydialog.h @@ -8,16 +8,17 @@ #ifndef Q_WS_WIN -#include +#include +#include -#include "processui/ksysguardprocesslist.h" +class KSysGuardProcessList; /** This creates a simple dialog box with a KSysguardProcessList * * It remembers the size and position of the dialog, and sets * the dialog to always be over the other windows */ -class KSystemActivityDialog : public QDialog +class KSystemActivityDialog : public KMainWindow { Q_OBJECT public: @@ -36,16 +37,12 @@ public: QSize sizeHint() const override; - /** Save the settings if the user presses the ESC key */ - void reject() override; - protected: /** Save the settings if the user clicks (x) button on the window */ void closeEvent(QCloseEvent *event) override; private: - void saveDialogSettings(); - - KSysGuardProcessList m_processList; + KSysGuardProcessList *m_processList = nullptr; + KConfigGroup m_configGroup; }; #endif // not Q_WS_WIN diff --git a/systemmonitor/main.cpp b/systemmonitor/main.cpp index eedcea639..38d995459 100644 --- a/systemmonitor/main.cpp +++ b/systemmonitor/main.cpp @@ -28,6 +28,8 @@ int main(int argc, char **argv) return 0; } - KSystemActivityDialog dialog; - return dialog.exec(); + KSystemActivityDialog *dialog = new KSystemActivityDialog; + dialog->show(); + + return app.exec(); }