[vlc-devel] [PATCH 3/3] qt: fix setScreen might crash on wayland when entering fullscreen
Rémi Denis-Courmont
remi at remlab.net
Thu Dec 14 13:45:48 CET 2017
Le 14 décembre 2017 14:39:56 GMT+02:00, Pierre Lamot <pierre at videolabs.io> a écrit :
>---
> modules/gui/qt/components/controller.cpp | 10 ++++++++++
> modules/gui/qt/main_interface.cpp | 15 +++++++++++++++
> 2 files changed, 25 insertions(+)
>
>diff --git a/modules/gui/qt/components/controller.cpp
>b/modules/gui/qt/components/controller.cpp
>index 428aa216a1..08c8523ab5 100644
>--- a/modules/gui/qt/components/controller.cpp
>+++ b/modules/gui/qt/components/controller.cpp
>@@ -863,6 +863,11 @@
>FullscreenControllerWidget::~FullscreenControllerWidget()
>
> void FullscreenControllerWidget::restoreFSC()
> {
>+#ifdef QT5_HAS_WAYLAND
>+ static bool b_hasWayland = QGuiApplication::platformName()
>+ .startsWith(QLatin1String("wayland"), Qt::CaseInsensitive);
>+#endif
>+
> if( !isWideFSC )
> {
> /* Restore half-bar and re-centre if needed */
>@@ -873,7 +878,12 @@ void FullscreenControllerWidget::restoreFSC()
> return;
>
>QRect currentRes = QApplication::desktop()->screenGeometry(
>targetScreen() );
>+#ifdef QT5_HAS_WAYLAND
>+ if ( !b_hasWayland )
>+
>windowHandle()->setScreen(QGuiApplication::screens()[targetScreen()]);
>+#else
> windowHandle()->setScreen(QGuiApplication::screens()[targetScreen()]);
>+#endif
>
> if( currentRes == screenRes &&
>QApplication::desktop()->screen()->geometry().contains(
>previousPosition, true ) )
>diff --git a/modules/gui/qt/main_interface.cpp
>b/modules/gui/qt/main_interface.cpp
>index 8763d21fc2..73d9973439 100644
>--- a/modules/gui/qt/main_interface.cpp
>+++ b/modules/gui/qt/main_interface.cpp
>@@ -854,6 +854,11 @@ void MainInterface::videoSizeChanged( int w, int h
>)
>
> void MainInterface::setVideoFullScreen( bool fs )
> {
>+#ifdef QT5_HAS_WAYLAND
>+ static bool b_hasWayland = QGuiApplication::platformName()
>+ .startsWith(QLatin1String("wayland"), Qt::CaseInsensitive);
>+#endif
>+
> b_videoFullScreen = fs;
> if( fs )
> {
>@@ -872,7 +877,12 @@ void MainInterface::setVideoFullScreen( bool fs )
>
>QRect screenres = QApplication::desktop()->screenGeometry( numscreen );
> lastWinScreen = windowHandle()->screen();
>+#ifdef QT5_HAS_WAYLAND
>+ if ( !b_hasWayland )
>+
>windowHandle()->setScreen(QGuiApplication::screens()[numscreen]);
>+#else
> windowHandle()->setScreen(QGuiApplication::screens()[numscreen]);
>+#endif
>
> /* To be sure window is on proper-screen in xinerama */
> if( !screenres.contains( pos() ) )
>@@ -898,8 +908,13 @@ void MainInterface::setVideoFullScreen( bool fs )
> {
> setMinimalView( b_minimalView );
> setInterfaceFullScreen( b_interfaceFullScreen );
>+#ifdef QT5_HAS_WAYLAND
>+ if ( lastWinScreen != NULL && !b_hasWayland )
>+ windowHandle()->setScreen(lastWinScreen);
>+#else
> if (lastWinScreen != NULL)
> windowHandle()->setScreen(lastWinScreen);
>+#endif
> if( lastWinPosition.isNull() == false )
> {
> move( lastWinPosition );
>--
>2.14.1
>
>_______________________________________________
>vlc-devel mailing list
>To unsubscribe or modify your subscription options:
>https://mailman.videolan.org/listinfo/vlc-devel
Is it safe to initialize a static with non-constant expression, which is not even defined at load time?
--
Remi Denis-Courmont
More information about the vlc-devel
mailing list