diff --git a/ui/platform/linux/ui_utility_linux.h b/ui/platform/linux/ui_utility_linux.h index bdde615..605fecb 100644 --- a/ui/platform/linux/ui_utility_linux.h +++ b/ui/platform/linux/ui_utility_linux.h @@ -23,9 +23,6 @@ inline void DeInitOnTopPanel(not_null panel) { inline void ReInitOnTopPanel(not_null panel) { } -inline void UpdateOverlayed(not_null widget) { -} - inline void ShowOverAll(not_null widget, bool canFocus) { } diff --git a/ui/platform/mac/ui_utility_mac.h b/ui/platform/mac/ui_utility_mac.h index 339cb0a..4d37327 100644 --- a/ui/platform/mac/ui_utility_mac.h +++ b/ui/platform/mac/ui_utility_mac.h @@ -17,9 +17,6 @@ inline bool TranslucentWindowsSupported() { return true; } -inline void UpdateOverlayed(not_null widget) { -} - inline void ClearTransientParent(not_null widget) { } diff --git a/ui/platform/ui_platform_utility.h b/ui/platform/ui_platform_utility.h index 227c064..a54076d 100644 --- a/ui/platform/ui_platform_utility.h +++ b/ui/platform/ui_platform_utility.h @@ -24,7 +24,6 @@ void InitOnTopPanel(not_null panel); void DeInitOnTopPanel(not_null panel); void ReInitOnTopPanel(not_null panel); -void UpdateOverlayed(not_null widget); void ShowOverAll(not_null widget, bool canFocus = true); void IgnoreAllActivation(not_null widget); void ClearTransientParent(not_null widget); diff --git a/ui/platform/win/ui_utility_win.cpp b/ui/platform/win/ui_utility_win.cpp index 6c320a6..c1abcaf 100644 --- a/ui/platform/win/ui_utility_win.cpp +++ b/ui/platform/win/ui_utility_win.cpp @@ -24,18 +24,6 @@ bool IsApplicationActive() { return QApplication::activeWindow() != nullptr; } -void UpdateOverlayed(not_null widget) { - const auto wm = widget->testAttribute(Qt::WA_Mapped); - const auto wv = widget->testAttribute(Qt::WA_WState_Visible); - if (!wm) widget->setAttribute(Qt::WA_Mapped, true); - if (!wv) widget->setAttribute(Qt::WA_WState_Visible, true); - widget->update(); - QEvent e(QEvent::UpdateRequest); - QGuiApplication::sendEvent(widget, &e); - if (!wm) widget->setAttribute(Qt::WA_Mapped, false); - if (!wv) widget->setAttribute(Qt::WA_WState_Visible, false); -} - void IgnoreAllActivation(not_null widget) { widget->createWinId(); diff --git a/ui/ui_utility.cpp b/ui/ui_utility.cpp index 2a5de32..ded550d 100644 --- a/ui/ui_utility.cpp +++ b/ui/ui_utility.cpp @@ -154,6 +154,18 @@ void ForceFullRepaint(not_null widget) { refresher->show(); } +void ForceFullRepaintSync(not_null widget) { + const auto wm = widget->testAttribute(Qt::WA_Mapped); + const auto wv = widget->testAttribute(Qt::WA_WState_Visible); + if (!wm) widget->setAttribute(Qt::WA_Mapped, true); + if (!wv) widget->setAttribute(Qt::WA_WState_Visible, true); + ForceFullRepaint(widget); + QEvent e(QEvent::UpdateRequest); + QGuiApplication::sendEvent(widget, &e); + if (!wm) widget->setAttribute(Qt::WA_Mapped, false); + if (!wv) widget->setAttribute(Qt::WA_WState_Visible, false); +} + void PostponeCall(FnMut &&callable) { Integration::Instance().postponeCall(std::move(callable)); } diff --git a/ui/ui_utility.h b/ui/ui_utility.h index 3242ed5..4913831 100644 --- a/ui/ui_utility.h +++ b/ui/ui_utility.h @@ -140,6 +140,7 @@ void RenderWidget( = QWidget::DrawChildren | QWidget::IgnoreMask); void ForceFullRepaint(not_null widget); +void ForceFullRepaintSync(not_null widget); void PostponeCall(FnMut &&callable); diff --git a/ui/widgets/popup_menu.cpp b/ui/widgets/popup_menu.cpp index 7e8ba2b..0bd4e4d 100644 --- a/ui/widgets/popup_menu.cpp +++ b/ui/widgets/popup_menu.cpp @@ -1065,7 +1065,9 @@ void PopupMenu::showPrepared(TriggeredSource source) { startShowAnimation(); - Platform::UpdateOverlayed(this); + if (::Platform::IsWindows()) { + ForceFullRepaintSync(this); + } show(); Platform::ShowOverAll(this); raise();