From dcd1e62c366fb45d7277bf46d982e0587db6d448 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Sun, 13 Dec 2020 10:23:43 +0400 Subject: [PATCH] Move media viewer back to the right screen if it was moved by window manager --- .../media/view/media_view_overlay_widget.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp index 7bf0af4f51..c1ebb4d691 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp @@ -445,19 +445,26 @@ void OverlayWidget::moveToScreen() { ? Core::App().activeWindow()->widget().get() : nullptr; const auto activeWindowScreen = widgetScreen(window); + const auto myScreen = widgetScreen(this); // Wayland doesn't support positioning, but Qt emits screenChanged anyway // and geometry of the widget become broken if (activeWindowScreen + && myScreen != activeWindowScreen && !Platform::IsWayland()) { windowHandle()->setScreen(activeWindowScreen); } + updateGeometry(); } void OverlayWidget::updateGeometry() { const auto screen = windowHandle() && windowHandle()->screen() ? windowHandle()->screen() : QApplication::primaryScreen(); - setGeometry(screen->geometry()); + const auto available = screen->geometry(); + if (geometry() == available) { + return; + } + setGeometry(available); auto navSkip = 2 * st::mediaviewControlMargin + st::mediaviewControlSize; _closeNav = myrtlrect(width() - st::mediaviewControlMargin - st::mediaviewControlSize, st::mediaviewControlMargin, st::mediaviewControlSize, st::mediaviewControlSize); @@ -1327,7 +1334,7 @@ void OverlayWidget::handleVisibleChanged(bool visible) { } void OverlayWidget::handleScreenChanged(QScreen *screen) { - updateGeometry(); + moveToScreen(); } void OverlayWidget::onToMessage() {