diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp index 9b71b7a3f..18e47b4fb 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp @@ -633,10 +633,10 @@ OverlayWidget::OverlayWidget() _widget->setMouseTracking(true); _window->createWinId(); - QObject::connect( - window(), - &QWindow::screenChanged, - [=](QScreen *screen) { handleScreenChanged(screen); }); + _window->screenValue( + ) | rpl::skip(1) | rpl::start_with_next([=](not_null screen) { + handleScreenChanged(screen); + }, lifetime()); subscribeToScreenGeometry(); updateGeometry(); updateControlsGeometry(); @@ -2315,7 +2315,7 @@ void OverlayWidget::dropdownHidden() { } } -void OverlayWidget::handleScreenChanged(QScreen *screen) { +void OverlayWidget::handleScreenChanged(not_null screen) { subscribeToScreenGeometry(); if (isHidden()) { return; diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.h b/Telegram/SourceFiles/media/view/media_view_overlay_widget.h index 02bdca5fb..1bac50ff3 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.h +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.h @@ -303,7 +303,7 @@ private: bool moveToNext(int delta); void preloadData(int delta); - void handleScreenChanged(QScreen *screen); + void handleScreenChanged(not_null screen); [[nodiscard]] bool computeSaveButtonVisible() const; void checkForSaveLoaded(); diff --git a/Telegram/SourceFiles/media/view/media_view_pip.cpp b/Telegram/SourceFiles/media/view/media_view_pip.cpp index 92c98b82b..8fd911964 100644 --- a/Telegram/SourceFiles/media/view/media_view_pip.cpp +++ b/Telegram/SourceFiles/media/view/media_view_pip.cpp @@ -361,12 +361,10 @@ void PipPanel::init() { Ui::Platform::ClearTransientParent(widget()); }, rp()->lifetime()); - QObject::connect( - widget()->windowHandle(), - &QWindow::screenChanged, - [=](QScreen *screen) { - handleScreenChanged(screen); - }); + rp()->screenValue( + ) | rpl::skip(1) | rpl::start_with_next([=](not_null screen) { + handleScreenChanged(screen); + }, rp()->lifetime()); if (Platform::IsWayland()) { rp()->sizeValue( @@ -637,7 +635,7 @@ void PipPanel::handleWaylandResize(QSize size) { _inHandleWaylandResize = false; } -void PipPanel::handleScreenChanged(QScreen *screen) { +void PipPanel::handleScreenChanged(not_null screen) { const auto screenGeometry = screen->availableGeometry(); const auto minimalSize = _ratio.scaled( st::pipMinimalSize, diff --git a/Telegram/SourceFiles/media/view/media_view_pip.h b/Telegram/SourceFiles/media/view/media_view_pip.h index dcc251ec3..efcb326f4 100644 --- a/Telegram/SourceFiles/media/view/media_view_pip.h +++ b/Telegram/SourceFiles/media/view/media_view_pip.h @@ -77,7 +77,7 @@ public: [[nodiscard]] bool dragging() const; void handleWaylandResize(QSize size); - void handleScreenChanged(QScreen *screen); + void handleScreenChanged(not_null screen); void handleMousePress(QPoint position, Qt::MouseButton button); void handleMouseRelease(QPoint position, Qt::MouseButton button); void handleMouseMove(QPoint position); diff --git a/Telegram/SourceFiles/window/window_main_menu.cpp b/Telegram/SourceFiles/window/window_main_menu.cpp index bf1b21962..bcddeda4d 100644 --- a/Telegram/SourceFiles/window/window_main_menu.cpp +++ b/Telegram/SourceFiles/window/window_main_menu.cpp @@ -957,21 +957,15 @@ void MainMenu::drawName(Painter &p) { } void MainMenu::initResetScaleButton() { - if (!window() || !window()->windowHandle()) { - return; - } - const auto handle = window()->windowHandle(); - rpl::single( - handle->screen() - ) | rpl::then( - base::qt_signal_producer(handle, &QWindow::screenChanged) - ) | rpl::filter([](QScreen *screen) { - return screen != nullptr; - }) | rpl::map([](QScreen * screen) { + _controller->widget()->screenValue( + ) | rpl::map([](not_null screen) { return rpl::single( screen->availableGeometry() ) | rpl::then( - base::qt_signal_producer(screen, &QScreen::availableGeometryChanged) + base::qt_signal_producer( + screen.get(), + &QScreen::availableGeometryChanged + ) ); }) | rpl::flatten_latest( ) | rpl::map([](QRect available) {