From 6b5524b63c58a0c29fc43b4be89aab17352a96a9 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 4 Dec 2023 14:18:49 +0400 Subject: [PATCH] Allow clearing system buttons state on Windows. --- ui/platform/ui_platform_window.cpp | 8 ++++++++ ui/platform/ui_platform_window.h | 2 ++ ui/platform/win/ui_window_win.cpp | 8 ++++++++ ui/platform/win/ui_window_win.h | 2 ++ ui/widgets/rp_window.cpp | 8 ++++++++ ui/widgets/rp_window.h | 2 ++ 6 files changed, 30 insertions(+) diff --git a/ui/platform/ui_platform_window.cpp b/ui/platform/ui_platform_window.cpp index 49d0c7a..926f51f 100644 --- a/ui/platform/ui_platform_window.cpp +++ b/ui/platform/ui_platform_window.cpp @@ -150,6 +150,14 @@ rpl::producer BasicWindowHelper::systemButtonDown() const { return rpl::never(); } +void BasicWindowHelper::overrideSystemButtonOver(HitTestResult button) { + Expects(button == HitTestResult::None); +} + +void BasicWindowHelper::overrideSystemButtonDown(HitTestResult button) { + Expects(button == HitTestResult::None); +} + void BasicWindowHelper::setTitle(const QString &title) { _window->setWindowTitle(title); } diff --git a/ui/platform/ui_platform_window.h b/ui/platform/ui_platform_window.h index f0dc391..6926fa0 100644 --- a/ui/platform/ui_platform_window.h +++ b/ui/platform/ui_platform_window.h @@ -49,6 +49,8 @@ public: -> rpl::producer; [[nodiscard]] virtual auto systemButtonDown() const -> rpl::producer; + virtual void overrideSystemButtonOver(HitTestResult button); + virtual void overrideSystemButtonDown(HitTestResult button); virtual void setTitle(const QString &title); virtual void setTitleStyle(const style::WindowTitle &st); virtual void setNativeFrame(bool enabled); diff --git a/ui/platform/win/ui_window_win.cpp b/ui/platform/win/ui_window_win.cpp index e26cb62..3fe7d01 100644 --- a/ui/platform/win/ui_window_win.cpp +++ b/ui/platform/win/ui_window_win.cpp @@ -389,6 +389,14 @@ rpl::producer WindowHelper::systemButtonDown() const { return _systemButtonDown.events(); } +void WindowHelper::overrideSystemButtonOver(HitTestResult button) { + _systemButtonOver.fire_copy(button); +} + +void WindowHelper::overrideSystemButtonDown(HitTestResult button) { + _systemButtonDown.fire_copy(button); +} + void WindowHelper::init() { _title->show(); GetNativeFilter()->registerWindow(_handle, this); diff --git a/ui/platform/win/ui_window_win.h b/ui/platform/win/ui_window_win.h index 74d03e6..58b723e 100644 --- a/ui/platform/win/ui_window_win.h +++ b/ui/platform/win/ui_window_win.h @@ -43,6 +43,8 @@ public: -> rpl::producer override; [[nodiscard]] auto systemButtonDown() const -> rpl::producer override; + void overrideSystemButtonOver(HitTestResult button) override; + void overrideSystemButtonDown(HitTestResult button) override; private: class NativeFilter; diff --git a/ui/widgets/rp_window.cpp b/ui/widgets/rp_window.cpp index 90a8d70..4d1eaa9 100644 --- a/ui/widgets/rp_window.cpp +++ b/ui/widgets/rp_window.cpp @@ -54,6 +54,14 @@ rpl::producer RpWindow::systemButtonDown() const { return _helper->systemButtonDown(); } +void RpWindow::overrideSystemButtonOver(Platform::HitTestResult button) { + _helper->overrideSystemButtonOver(button); +} + +void RpWindow::overrideSystemButtonDown(Platform::HitTestResult button) { + _helper->overrideSystemButtonDown(button); +} + void RpWindow::setTitle(const QString &title) { _helper->setTitle(title); } diff --git a/ui/widgets/rp_window.h b/ui/widgets/rp_window.h index 96cac73..ec29b3e 100644 --- a/ui/widgets/rp_window.h +++ b/ui/widgets/rp_window.h @@ -55,6 +55,8 @@ public: -> rpl::producer; [[nodiscard]] auto systemButtonDown() const -> rpl::producer; + void overrideSystemButtonOver(Platform::HitTestResult button); + void overrideSystemButtonDown(Platform::HitTestResult button); void setTitle(const QString &title); void setTitleStyle(const style::WindowTitle &st);