From 5fcf946cd68b686ca310c77ac9b11290e40cbf19 Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Mon, 4 Jan 2021 00:21:23 +0100 Subject: [PATCH] GUI: add preference for staying on top of other windows Implements #2967. --- NEWS.md | 2 ++ .../forms/main_window/preferences_dialog.ui | 8 ++++++++ src/mkvtoolnix-gui/main_window/main_window.cpp | 15 +++++++++++++++ src/mkvtoolnix-gui/main_window/main_window.h | 1 + .../main_window/preferences_dialog.cpp | 3 +++ src/mkvtoolnix-gui/util/settings.cpp | 2 ++ src/mkvtoolnix-gui/util/settings.h | 1 + src/mkvtoolnix-gui/util/settings_names.h | 1 + 8 files changed, 33 insertions(+) diff --git a/NEWS.md b/NEWS.md index 3d1e0854d..d8e111d67 100644 --- a/NEWS.md +++ b/NEWS.md @@ -9,6 +9,8 @@ file names selected for saving on platforms that don't add one itself (e.g. GNOME). For example, when saving multiplexer settings the extension `.mtxcfg` will be added. Implements #2983. +* MKVToolNix GUI: added an option to the preferences for the window to stay on + top of other windows. Implements #2967. ## Bug fixes diff --git a/src/mkvtoolnix-gui/forms/main_window/preferences_dialog.ui b/src/mkvtoolnix-gui/forms/main_window/preferences_dialog.ui index 2c4869991..35c59e2d0 100644 --- a/src/mkvtoolnix-gui/forms/main_window/preferences_dialog.ui +++ b/src/mkvtoolnix-gui/forms/main_window/preferences_dialog.ui @@ -133,6 +133,13 @@ + + + + Stay on top of other &windows + + + @@ -2158,6 +2165,7 @@ cbGuiInterfaceLanguage fcbGuiFontFamily sbGuiFontPointSize + cbGuiStayOnTop cbGuiDisableHighDPIScaling cbGuiDisableDarkStyleSheet cbGuiDisableToolTips diff --git a/src/mkvtoolnix-gui/main_window/main_window.cpp b/src/mkvtoolnix-gui/main_window/main_window.cpp index 268dfb82b..8e59d5af2 100644 --- a/src/mkvtoolnix-gui/main_window/main_window.cpp +++ b/src/mkvtoolnix-gui/main_window/main_window.cpp @@ -86,6 +86,7 @@ MainWindow::MainWindow(QWidget *parent) p->ui->setupUi(this); setToolSelectorVisibility(); + setStayOnTopStatus(); setupAuxiliaryWidgets(); setupToolSelector(); setupHelpURLs(); @@ -225,6 +226,7 @@ MainWindow::setupConnections() { // Auxiliary actions: connect(this, &MainWindow::preferencesChanged, this, &MainWindow::setToolSelectorVisibility); + connect(this, &MainWindow::preferencesChanged, this, &MainWindow::setStayOnTopStatus); connect(this, &MainWindow::preferencesChanged, app, &App::reinitializeLanguageLists); connect(this, &MainWindow::preferencesChanged, app, &App::setupAppearance); @@ -630,6 +632,19 @@ MainWindow::setToolSelectorVisibility() { p->ui->tool->tabBar()->setVisible(Util::Settings::get().m_showToolSelector); } +void +MainWindow::setStayOnTopStatus() { + auto oldFlags = windowFlags(); + auto newFlags = Util::Settings::get().m_uiStayOnTop ? oldFlags | Qt::WindowStaysOnTopHint + : oldFlags & ~Qt::WindowStaysOnTopHint; + + if (oldFlags == newFlags) + return; + + setWindowFlags(newFlags); + show(); +} + std::optional MainWindow::filterWheelEventForStrongFocus(QObject *watched, QEvent *event) { diff --git a/src/mkvtoolnix-gui/main_window/main_window.h b/src/mkvtoolnix-gui/main_window/main_window.h index 58191aac2..060c67908 100644 --- a/src/mkvtoolnix-gui/main_window/main_window.h +++ b/src/mkvtoolnix-gui/main_window/main_window.h @@ -83,6 +83,7 @@ public Q_SLOTS: virtual void showCodeOfConduct(); virtual void showSystemInformation(); virtual void setToolSelectorVisibility(); + virtual void setStayOnTopStatus(); virtual void raiseAndActivate(); #if defined(HAVE_UPDATE_CHECK) diff --git a/src/mkvtoolnix-gui/main_window/preferences_dialog.cpp b/src/mkvtoolnix-gui/main_window/preferences_dialog.cpp index de9bf5003..21d602c15 100644 --- a/src/mkvtoolnix-gui/main_window/preferences_dialog.cpp +++ b/src/mkvtoolnix-gui/main_window/preferences_dialog.cpp @@ -853,6 +853,8 @@ PreferencesDialog::setupFontAndScaling() { #if !defined(SYS_WINDOWS) ui->cbGuiDisableDarkStyleSheet->setVisible(false); #endif + + ui->cbGuiStayOnTop->setChecked(m_cfg.m_uiStayOnTop); } void @@ -863,6 +865,7 @@ PreferencesDialog::save() { m_cfg.m_bcp47LanguageEditingMode = static_cast(ui->cbGuiBCP47LanguageEditingMode->currentData().toInt()); m_cfg.m_uiFontFamily = ui->fcbGuiFontFamily->currentFont().family(); m_cfg.m_uiFontPointSize = ui->sbGuiFontPointSize->value(); + m_cfg.m_uiStayOnTop = ui->cbGuiStayOnTop->isChecked(); m_cfg.m_uiDisableHighDPIScaling = ui->cbGuiDisableHighDPIScaling->isChecked(); m_cfg.m_uiDisableDarkStyleSheet = ui->cbGuiDisableDarkStyleSheet->isChecked(); m_cfg.m_uiDisableToolTips = ui->cbGuiDisableToolTips->isChecked(); diff --git a/src/mkvtoolnix-gui/util/settings.cpp b/src/mkvtoolnix-gui/util/settings.cpp index e1f327745..81f36c9af 100644 --- a/src/mkvtoolnix-gui/util/settings.cpp +++ b/src/mkvtoolnix-gui/util/settings.cpp @@ -409,6 +409,7 @@ Settings::load() { m_uiDisableToolTips = reg.value(s_valUiDisableToolTips).toBool(); m_uiFontFamily = reg.value(s_valUiFontFamily, defaultFont.family()).toString(); m_uiFontPointSize = reg.value(s_valUiFontPointSize, defaultFont.pointSize()).toInt(); + m_uiStayOnTop = reg.value(s_valUiStayOnTop, false).toBool(); reg.beginGroup(s_grpUpdates); m_checkForUpdates = reg.value(s_valCheckForUpdates, true).toBool(); @@ -761,6 +762,7 @@ Settings::save() reg.setValue(s_valUiDisableToolTips, m_uiDisableToolTips); reg.setValue(s_valUiFontFamily, m_uiFontFamily); reg.setValue(s_valUiFontPointSize, m_uiFontPointSize); + reg.setValue(s_valUiStayOnTop, m_uiStayOnTop); reg.setValue(s_valMediaInfoExe, m_mediaInfoExe); diff --git a/src/mkvtoolnix-gui/util/settings.h b/src/mkvtoolnix-gui/util/settings.h index 0061a0e16..cfdf92624 100644 --- a/src/mkvtoolnix-gui/util/settings.h +++ b/src/mkvtoolnix-gui/util/settings.h @@ -194,6 +194,7 @@ public: bool m_showToolSelector, m_warnBeforeClosingModifiedTabs, m_warnBeforeAbortingJobs, m_warnBeforeOverwriting, m_showMoveUpDownButtons; QString m_uiLocale, m_uiFontFamily; int m_uiFontPointSize; + bool m_uiStayOnTop; bool m_enableMuxingTracksByLanguage, m_enableMuxingAllVideoTracks, m_enableMuxingAllAudioTracks, m_enableMuxingAllSubtitleTracks; QStringList m_enableMuxingTracksByTheseLanguages; diff --git a/src/mkvtoolnix-gui/util/settings_names.h b/src/mkvtoolnix-gui/util/settings_names.h index 5bf80ef08..cd9376805 100644 --- a/src/mkvtoolnix-gui/util/settings_names.h +++ b/src/mkvtoolnix-gui/util/settings_names.h @@ -118,6 +118,7 @@ char const * const s_valUiDisableHighDPIScaling = "uiDisableHighDPIS char const * const s_valUiDisableToolTips = "uiDisableToolTips"; char const * const s_valUiFontFamily = "uiFontFamily"; char const * const s_valUiFontPointSize = "uiFontPointSize"; +char const * const s_valUiStayOnTop = "uiStayOnTop"; char const * const s_valUiLocale = "uiLocale"; char const * const s_valUniqueOutputFileNames = "uniqueOutputFileNames"; char const * const s_valUseDefaultJobDescription = "useDefaultJobDescription";