Move media viewer back to the right screen if it was moved by window manager

This commit is contained in:
Ilya Fedin 2020-12-13 10:23:43 +04:00 committed by John Preston
parent c9d2ef278f
commit dcd1e62c36

View file

@ -445,19 +445,26 @@ void OverlayWidget::moveToScreen() {
? Core::App().activeWindow()->widget().get() ? Core::App().activeWindow()->widget().get()
: nullptr; : nullptr;
const auto activeWindowScreen = widgetScreen(window); const auto activeWindowScreen = widgetScreen(window);
const auto myScreen = widgetScreen(this);
// Wayland doesn't support positioning, but Qt emits screenChanged anyway // Wayland doesn't support positioning, but Qt emits screenChanged anyway
// and geometry of the widget become broken // and geometry of the widget become broken
if (activeWindowScreen if (activeWindowScreen
&& myScreen != activeWindowScreen
&& !Platform::IsWayland()) { && !Platform::IsWayland()) {
windowHandle()->setScreen(activeWindowScreen); windowHandle()->setScreen(activeWindowScreen);
} }
updateGeometry();
} }
void OverlayWidget::updateGeometry() { void OverlayWidget::updateGeometry() {
const auto screen = windowHandle() && windowHandle()->screen() const auto screen = windowHandle() && windowHandle()->screen()
? windowHandle()->screen() ? windowHandle()->screen()
: QApplication::primaryScreen(); : QApplication::primaryScreen();
setGeometry(screen->geometry()); const auto available = screen->geometry();
if (geometry() == available) {
return;
}
setGeometry(available);
auto navSkip = 2 * st::mediaviewControlMargin + st::mediaviewControlSize; auto navSkip = 2 * st::mediaviewControlMargin + st::mediaviewControlSize;
_closeNav = myrtlrect(width() - st::mediaviewControlMargin - st::mediaviewControlSize, st::mediaviewControlMargin, st::mediaviewControlSize, 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) { void OverlayWidget::handleScreenChanged(QScreen *screen) {
updateGeometry(); moveToScreen();
} }
void OverlayWidget::onToMessage() { void OverlayWidget::onToMessage() {