From 26e6a3050c8c768da2fec03db905e413a1ebcc9e Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 7 Jan 2020 15:16:00 +0300 Subject: [PATCH] Allow non-activatable window on Windows. --- ui/platform/linux/ui_utility_linux.cpp | 3 +++ ui/platform/mac/ui_utility_mac.mm | 3 +++ ui/platform/ui_platform_utility.h | 1 + ui/platform/win/ui_utility_win.cpp | 15 +++++++++++++++ 4 files changed, 22 insertions(+) diff --git a/ui/platform/linux/ui_utility_linux.cpp b/ui/platform/linux/ui_utility_linux.cpp index 0bd8f94..e43e672 100644 --- a/ui/platform/linux/ui_utility_linux.cpp +++ b/ui/platform/linux/ui_utility_linux.cpp @@ -43,5 +43,8 @@ bool TranslucentWindowsSupported(QPoint globalPosition) { return false; } +void IgnoreAllActivation(not_null widget) { +} + } // namespace Platform } // namespace Ui diff --git a/ui/platform/mac/ui_utility_mac.mm b/ui/platform/mac/ui_utility_mac.mm index 4055c4a..a7e05db 100644 --- a/ui/platform/mac/ui_utility_mac.mm +++ b/ui/platform/mac/ui_utility_mac.mm @@ -91,5 +91,8 @@ void DrainMainQueue() { _dispatch_main_queue_callback_4CF(nullptr); } +void IgnoreAllActivation(not_null widget) { +} + } // namespace Platform } // namespace Ui diff --git a/ui/platform/ui_platform_utility.h b/ui/platform/ui_platform_utility.h index d253c91..dec7e12 100644 --- a/ui/platform/ui_platform_utility.h +++ b/ui/platform/ui_platform_utility.h @@ -25,6 +25,7 @@ void ReInitOnTopPanel(not_null panel); void UpdateOverlayed(not_null widget); void ShowOverAll(not_null widget, bool canFocus = true); void BringToBack(not_null widget); +void IgnoreAllActivation(not_null widget); [[nodiscard]] constexpr bool UseMainQueueGeneric(); void DrainMainQueue(); // Needed only if UseMainQueueGeneric() is false. diff --git a/ui/platform/win/ui_utility_win.cpp b/ui/platform/win/ui_utility_win.cpp index f6fd431..b9ddcbd 100644 --- a/ui/platform/win/ui_utility_win.cpp +++ b/ui/platform/win/ui_utility_win.cpp @@ -8,6 +8,8 @@ #include +#include "base/platform/win/base_windows_h.h" + namespace Ui { namespace Platform { @@ -27,5 +29,18 @@ void UpdateOverlayed(not_null widget) { if (!wv) widget->setAttribute(Qt::WA_WState_Visible, false); } +void IgnoreAllActivation(not_null widget) { + const auto handle = reinterpret_cast(widget->winId()); + Assert(handle != nullptr); + + ShowWindow(handle, SW_HIDE); + const auto style = GetWindowLong(handle, GWL_EXSTYLE); + SetWindowLong( + handle, + GWL_EXSTYLE, + style | WS_EX_NOACTIVATE | WS_EX_APPWINDOW); + ShowWindow(handle, SW_SHOW); +} + } // namespace Platform } // namespace Ui