From ea4c67408e1997cfce5d4bb0d9a0d55bb2d8b0f2 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Thu, 21 Sep 2023 23:37:07 +0400 Subject: [PATCH] Revert "Workaround Wayland popup menu bug." This reverts commit 8db6dcf125da5c767d36a696794d4a51d82c7955. --- ui/platform/linux/ui_utility_linux.cpp | 33 -------------------------- ui/platform/mac/ui_utility_mac.mm | 10 -------- ui/platform/ui_platform_utility.h | 6 ----- ui/platform/win/ui_utility_win.cpp | 10 -------- ui/widgets/popup_menu.cpp | 3 --- 5 files changed, 62 deletions(-) diff --git a/ui/platform/linux/ui_utility_linux.cpp b/ui/platform/linux/ui_utility_linux.cpp index 8a3cf9c..933902f 100644 --- a/ui/platform/linux/ui_utility_linux.cpp +++ b/ui/platform/linux/ui_utility_linux.cpp @@ -8,7 +8,6 @@ #include "base/platform/base_platform_info.h" #include "base/platform/linux/base_linux_library.h" -#include "base/call_delayed.h" #ifndef DESKTOP_APP_DISABLE_X11_INTEGRATION #include "base/platform/linux/base_linux_xcb_utilities.h" @@ -45,10 +44,6 @@ namespace Platform { namespace { static const auto kXCBFrameExtentsAtomName = u"_GTK_FRAME_EXTENTS"_q; -constexpr auto kDelayDeactivateEventTimeout = crl::time(400); - -bool PendingDeactivateEvent/* = false*/; -int ChildPopupsHiddenOnWayland/* = 0*/; #ifndef DESKTOP_APP_DISABLE_X11_INTEGRATION std::optional XCBWindowMapped(xcb_window_t window) { @@ -611,33 +606,5 @@ void ShowWindowMenu(not_null widget, const QPoint &point) { #endif // !DESKTOP_APP_DISABLE_X11_INTEGRATION } -void RegisterChildPopupHiding() { - if (!::Platform::IsWayland()) { - return; - } - ++ChildPopupsHiddenOnWayland; - base::call_delayed(kDelayDeactivateEventTimeout, [] { - if (!--ChildPopupsHiddenOnWayland) { - if (base::take(PendingDeactivateEvent)) { - // We didn't receive ApplicationActivate event in time. - QEvent appDeactivate(QEvent::ApplicationDeactivate); - QCoreApplication::sendEvent(qApp, &appDeactivate); - } - } - }); -} - -bool SkipApplicationDeactivateEvent() { - if (!ChildPopupsHiddenOnWayland) { - return false; - } - PendingDeactivateEvent = true; - return true; -} - -void GotApplicationActivateEvent() { - PendingDeactivateEvent = false; -} - } // namespace Platform } // namespace Ui diff --git a/ui/platform/mac/ui_utility_mac.mm b/ui/platform/mac/ui_utility_mac.mm index 8aa7475..366b42f 100644 --- a/ui/platform/mac/ui_utility_mac.mm +++ b/ui/platform/mac/ui_utility_mac.mm @@ -147,15 +147,5 @@ std::optional IsOverlapped( return false; } -void RegisterChildPopupHiding() { -} - -bool SkipApplicationDeactivateEvent() { - return false; -} - -void GotApplicationActivateEvent() { -} - } // namespace Platform } // namespace Ui diff --git a/ui/platform/ui_platform_utility.h b/ui/platform/ui_platform_utility.h index eb1aa48..73d6c27 100644 --- a/ui/platform/ui_platform_utility.h +++ b/ui/platform/ui_platform_utility.h @@ -45,12 +45,6 @@ void ShowWindowMenu(not_null widget, const QPoint &point); void FixPopupMenuNativeEmojiPopup(not_null menu); -// Workaround for a Qt/Wayland bug that hides the parent popup when -// the child popup gets hidden, by sending Deactivate / Activate events. -void RegisterChildPopupHiding(); -[[nodiscard]] bool SkipApplicationDeactivateEvent(); -void GotApplicationActivateEvent(); - } // namespace Ui::Platform // Platform dependent implementations. diff --git a/ui/platform/win/ui_utility_win.cpp b/ui/platform/win/ui_utility_win.cpp index c9678c0..23592ce 100644 --- a/ui/platform/win/ui_utility_win.cpp +++ b/ui/platform/win/ui_utility_win.cpp @@ -189,14 +189,4 @@ void FixPopupMenuNativeEmojiPopup(not_null menu) { menu->lifetime().make_state(menu)); } -void RegisterChildPopupHiding() { -} - -bool SkipApplicationDeactivateEvent() { - return false; -} - -void GotApplicationActivateEvent() { -} - } // namespace Ui::Platform diff --git a/ui/widgets/popup_menu.cpp b/ui/widgets/popup_menu.cpp index 5ce70cf..fba91a9 100644 --- a/ui/widgets/popup_menu.cpp +++ b/ui/widgets/popup_menu.cpp @@ -673,9 +673,6 @@ bool PopupMenu::eventFilter(QObject *o, QEvent *e) { } void PopupMenu::hideMenu(bool fast) { - if (fast && _parent) { - Platform::RegisterChildPopupHiding(); - } if (isHidden() || (_hiding && !fast)) { return; }