vcl/qt5/QtFrame.cxx |    7 +++++++
 1 file changed, 7 insertions(+)

New commits:
commit f029fb6262b9a001e6cbfd60565b01a7b99ea627
Author:     Michael Weghorn <[email protected]>
AuthorDate: Wed Nov 10 16:19:26 2021 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Thu Nov 11 08:27:28 2021 +0100

    qt (>=5.14): Don't create native window for QWidget in QtFrame::screen
    
    For Qt >= 5.14, directly use 'QWidget::screen' (added in Qt 5.14)
    to retrieve the screen that the widget is on, rather than first
    retrieving a window handle, which forces a platform-native
    window to be created.
    
    Due to QTBUG-75766 [1], forcing the creation of
    native windows also leads to mouseMoveEvents
    not being reliably emitted by Qt, s.
    
        commit 0e3c3b842e14b9646d3697cf1266be21359e0f13
        Author: Michael Weghorn <[email protected]>
        Date:   Sat May 11 21:31:33 2019 +0200
    
            tdf#122293 qt5: Use "alien widgets" by default on Wayland
    
    for more details.
    
    The behaviour described in tdf#122293 started showing
    up again after
    
        commit b00a68a8e19370e106cd76258a3c1825f43613ee
        Date:   Sun Oct 31 02:33:46 2021 +0200
    
            tdf#145363 Qt reparent modal dialogs on show
    
    but that just seems to have been a side-effect of
    'QWidget::screen' now being called in different ways
    than previously.
    
    [1] https://bugreports.qt.io/browse/QTBUG-75766
    
    Change-Id: Ic11923cef5e704c09494f96b19157372a869ae40
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124997
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/vcl/qt5/QtFrame.cxx b/vcl/qt5/QtFrame.cxx
index 591e084edf38..db91e48a256c 100644
--- a/vcl/qt5/QtFrame.cxx
+++ b/vcl/qt5/QtFrame.cxx
@@ -363,8 +363,15 @@ QWindow* QtFrame::windowHandle() const
 
 QScreen* QtFrame::screen() const
 {
+#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
+    return asChild()->screen();
+#else
+    // QWidget::screen only available from Qt 5.14 on, call windowHandle(),
+    // with the indirect result that mouse move events on Wayland will not be
+    // emitted reliably, s. QTBUG-75766
     QWindow* const pWindow = windowHandle();
     return pWindow ? pWindow->screen() : nullptr;
+#endif
 }
 
 bool QtFrame::isMinimized() const { return asChild()->isMinimized(); }

Reply via email to