From f5b603adfddaf8a3b410e4eb27f749bc3f0061e1 Mon Sep 17 00:00:00 2001 From: cg2121 Date: Sat, 9 Dec 2023 20:53:34 -0600 Subject: [PATCH] UI: Add HotkeyBlocker class This adds a HotkeyBlocker class that is similar to SignalBlocker. It is used when selection dialogs are opened and because they are modal, hotkeys shouldn't be able to be used. --- UI/context-bar-controls.cpp | 3 +++ UI/obs-app.hpp | 6 ++++++ shared/properties-view/properties-view.cpp | 3 +++ shared/qt/wrappers/qt-wrappers.cpp | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/UI/context-bar-controls.cpp b/UI/context-bar-controls.cpp index cb4b2f8fc58812..24b9b799b94823 100644 --- a/UI/context-bar-controls.cpp +++ b/UI/context-bar-controls.cpp @@ -585,6 +585,7 @@ void ColorSourceToolbar::on_choose_clicked() options |= QColorDialog::DontUseNativeDialog; #endif + HotkeyBlocker hb; QColor newColor = QColorDialog::getColor(color, this, desc, options); if (!newColor.isValid()) { return; @@ -658,6 +659,7 @@ void TextSourceToolbar::on_selectFont_clicked() options = QFontDialog::DontUseNativeDialog; #endif + HotkeyBlocker hb; font = QFontDialog::getFont( &success, font, this, QTStr("Basic.PropertiesWindow.SelectFont.WindowTitle"), @@ -711,6 +713,7 @@ void TextSourceToolbar::on_selectColor_clicked() options |= QColorDialog::DontUseNativeDialog; #endif + HotkeyBlocker hb; QColor newColor = QColorDialog::getColor(color, this, desc, options); if (!newColor.isValid()) { return; diff --git a/UI/obs-app.hpp b/UI/obs-app.hpp index ee5c24848fb4bf..874e56e5e82c77 100644 --- a/UI/obs-app.hpp +++ b/UI/obs-app.hpp @@ -295,3 +295,9 @@ extern bool restart_safe; extern "C" void install_dll_blocklist_hook(void); extern "C" void log_blocked_dlls(void); #endif + +class HotkeyBlocker { +public: + inline HotkeyBlocker() { App()->DisableHotkeys(); } + inline ~HotkeyBlocker() { App()->UpdateHotkeyFocusSetting(); } +}; diff --git a/shared/properties-view/properties-view.cpp b/shared/properties-view/properties-view.cpp index c71cbaab801db2..7dc72d66460d86 100644 --- a/shared/properties-view/properties-view.cpp +++ b/shared/properties-view/properties-view.cpp @@ -1922,6 +1922,7 @@ bool WidgetInfo::ColorChangedInternal(const char *setting, bool supportAlpha) options |= QColorDialog::DontUseNativeDialog; #endif + HotkeyBlocker hb; color = QColorDialog::getColor(color, view, QT_UTF8(desc), options); #ifdef __APPLE__ @@ -1976,6 +1977,8 @@ bool WidgetInfo::FontChanged(const char *setting) options = QFontDialog::DontUseNativeDialog; #endif + HotkeyBlocker hb; + if (!font_obj) { QFont initial; font = QFontDialog::getFont( diff --git a/shared/qt/wrappers/qt-wrappers.cpp b/shared/qt/wrappers/qt-wrappers.cpp index 7e016b0d784d7c..469ffa363c4e27 100644 --- a/shared/qt/wrappers/qt-wrappers.cpp +++ b/shared/qt/wrappers/qt-wrappers.cpp @@ -332,6 +332,7 @@ void setThemeID(QWidget *widget, const QString &themeID) QString SelectDirectory(QWidget *parent, QString title, QString path) { + HotkeyBlocker hb; QString dir = QFileDialog::getExistingDirectory( parent, title, path, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); @@ -342,6 +343,7 @@ QString SelectDirectory(QWidget *parent, QString title, QString path) QString SaveFile(QWidget *parent, QString title, QString path, QString extensions) { + HotkeyBlocker hb; QString file = QFileDialog::getSaveFileName(parent, title, path, extensions); @@ -351,6 +353,7 @@ QString SaveFile(QWidget *parent, QString title, QString path, QString OpenFile(QWidget *parent, QString title, QString path, QString extensions) { + HotkeyBlocker hb; QString file = QFileDialog::getOpenFileName(parent, title, path, extensions); @@ -360,6 +363,7 @@ QString OpenFile(QWidget *parent, QString title, QString path, QStringList OpenFiles(QWidget *parent, QString title, QString path, QString extensions) { + HotkeyBlocker hb; QStringList files = QFileDialog::getOpenFileNames(parent, title, path, extensions);