From 2272efc91f659952beaacc24ecbc1d9daf865ccc Mon Sep 17 00:00:00 2001 From: gxalpha Date: Fri, 27 Jan 2023 16:41:53 +0100 Subject: [PATCH] UI: Use native combobox popup on macOS As recommended by Qt on QTBUG-106162, this fixes QComboBox popups not working with VoiceOver. --- UI/obs-app.cpp | 2 +- UI/obs-proxy-style.cpp | 11 +++++++---- UI/obs-proxy-style.hpp | 4 ++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index 0ea5b0aba..db6373836 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -1249,7 +1249,7 @@ bool OBSApp::SetTheme(std::string name, std::string path) bool OBSApp::InitTheme() { defaultPalette = palette(); - setStyle(new OBSIgnoreWheelProxyStyle()); + setStyle(new OBSProxyStyle()); const char *themeName = config_get_string(globalConfig, "General", "CurrentTheme3"); diff --git a/UI/obs-proxy-style.cpp b/UI/obs-proxy-style.cpp index 270ab127f..49be6524e 100644 --- a/UI/obs-proxy-style.cpp +++ b/UI/obs-proxy-style.cpp @@ -77,13 +77,16 @@ OBSContextBarProxyStyle::generatedIconPixmap(QIcon::Mode iconMode, return QProxyStyle::generatedIconPixmap(iconMode, pixmap, option); } -int OBSIgnoreWheelProxyStyle::styleHint(StyleHint hint, - const QStyleOption *option, - const QWidget *widget, - QStyleHintReturn *returnData) const +int OBSProxyStyle::styleHint(StyleHint hint, const QStyleOption *option, + const QWidget *widget, + QStyleHintReturn *returnData) const { if (hint == SH_ComboBox_AllowWheelScrolling) return 0; +#ifdef __APPLE__ + if (hint == SH_ComboBox_UseNativePopup) + return 1; +#endif return QProxyStyle::styleHint(hint, option, widget, returnData); } diff --git a/UI/obs-proxy-style.hpp b/UI/obs-proxy-style.hpp index e3a74a26e..437ce1e27 100644 --- a/UI/obs-proxy-style.hpp +++ b/UI/obs-proxy-style.hpp @@ -2,14 +2,14 @@ #include -class OBSIgnoreWheelProxyStyle : public QProxyStyle { +class OBSProxyStyle : public QProxyStyle { public: int styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const override; }; -class OBSContextBarProxyStyle : public OBSIgnoreWheelProxyStyle { +class OBSContextBarProxyStyle : public OBSProxyStyle { public: QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *option) const override;