diff --git a/frontend/OBSApp.cpp b/frontend/OBSApp.cpp index 5d8162bf8..f1f25fdea 100644 --- a/frontend/OBSApp.cpp +++ b/frontend/OBSApp.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #if defined(_WIN32) || defined(ENABLE_SPARKLE_UPDATER) #include #endif @@ -1344,6 +1345,14 @@ bool OBSApp::TranslateString(const char *lookupVal, const char **out) const return text_lookup_getstr(App()->GetTextLookup(), lookupVal, out); } +QStyle *OBSApp::GetInvisibleCursorStyle() +{ + if (!invisibleCursorStyle) { + invisibleCursorStyle = std::make_unique(); + } + return invisibleCursorStyle.get(); +} + // Global handler to receive all QEvent::Show events so we can apply // display affinity on any newly created windows and dialogs without // caring where they are coming from (e.g. plugins). diff --git a/frontend/OBSApp.hpp b/frontend/OBSApp.hpp index 4686f0e32..7eb6b571b 100644 --- a/frontend/OBSApp.hpp +++ b/frontend/OBSApp.hpp @@ -105,6 +105,7 @@ private: OBSTheme *currentTheme = nullptr; QHash themes; QPointer themeWatcher; + std::unique_ptr invisibleCursorStyle; void FindThemes(); @@ -151,6 +152,7 @@ public: OBSTheme *GetTheme(const QString &name); bool SetTheme(const QString &name); bool IsThemeDark() const { return currentTheme ? currentTheme->isDark : false; } + QStyle *GetInvisibleCursorStyle(); void SetBranchData(const std::string &data); std::vector GetBranches(); diff --git a/frontend/settings/OBSHotkeyEdit.hpp b/frontend/settings/OBSHotkeyEdit.hpp index a322c37a3..d8a3053dc 100644 --- a/frontend/settings/OBSHotkeyEdit.hpp +++ b/frontend/settings/OBSHotkeyEdit.hpp @@ -19,6 +19,8 @@ #include +#include + #include class OBSBasicSettings; @@ -45,6 +47,7 @@ public: { setAttribute(Qt::WA_InputMethodEnabled, false); setAttribute(Qt::WA_MacShowFocusRect, true); + setStyle(App()->GetInvisibleCursorStyle()); InitSignalHandler(); ResetKey(); } @@ -52,6 +55,7 @@ public: { setAttribute(Qt::WA_InputMethodEnabled, false); setAttribute(Qt::WA_MacShowFocusRect, true); + setStyle(App()->GetInvisibleCursorStyle()); InitSignalHandler(); ResetKey(); } diff --git a/frontend/utility/OBSProxyStyle.cpp b/frontend/utility/OBSProxyStyle.cpp index 342ac9a4b..d7c68a6b3 100644 --- a/frontend/utility/OBSProxyStyle.cpp +++ b/frontend/utility/OBSProxyStyle.cpp @@ -13,3 +13,13 @@ int OBSProxyStyle::styleHint(StyleHint hint, const QStyleOption *option, const Q return QProxyStyle::styleHint(hint, option, widget, returnData); } + +int OBSInvisibleCursorProxyStyle::pixelMetric(PixelMetric metric, const QStyleOption *option, + const QWidget *widget) const +{ + + if (metric == PM_TextCursorWidth) + return 0; + + return QProxyStyle::pixelMetric(metric, option, widget); +} diff --git a/frontend/utility/OBSProxyStyle.hpp b/frontend/utility/OBSProxyStyle.hpp index 58212141c..fb09b842c 100644 --- a/frontend/utility/OBSProxyStyle.hpp +++ b/frontend/utility/OBSProxyStyle.hpp @@ -13,3 +13,12 @@ public: int styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const override; }; + +class OBSInvisibleCursorProxyStyle : public OBSProxyStyle { + Q_OBJECT + +public: + OBSInvisibleCursorProxyStyle() : OBSProxyStyle() {} + + int pixelMetric(PixelMetric pm, const QStyleOption *option, const QWidget *widget) const override; +};