vcl/inc/qt5/QtFrame.hxx |    1 
 vcl/qt5/QtFrame.cxx     |   51 +++++++++++++++++++++---------------------------
 vcl/qt5/QtObject.cxx    |   25 ++---------------------
 3 files changed, 27 insertions(+), 50 deletions(-)

New commits:
commit 76611452da46aec18ba14954671beee4f6dacf49
Author:     Jan-Marek Glogowski <glo...@fbihome.de>
AuthorDate: Wed Nov 17 13:03:23 2021 +0100
Commit:     Jan-Marek Glogowski <glo...@fbihome.de>
CommitDate: Wed Nov 17 16:51:14 2021 +0100

    Qt refactor SystemEnvData setup
    
    Change-Id: I900d1079c9a832a9b5170e58ce4e7a8b81d7d01b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125393
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>
    Tested-by: Jenkins

diff --git a/vcl/inc/qt5/QtFrame.hxx b/vcl/inc/qt5/QtFrame.hxx
index a338b106eaeb..965ecbaba0e1 100644
--- a/vcl/inc/qt5/QtFrame.hxx
+++ b/vcl/inc/qt5/QtFrame.hxx
@@ -215,6 +215,7 @@ public:
 
     void setInputLanguage(LanguageType);
     inline bool isPopup() const;
+    static void FillSystemEnvData(SystemEnvData&, sal_IntPtr pWindow, QWidget* 
pWidget);
 };
 
 inline bool QtFrame::CallCallback(SalEvent nEvent, const void* pEvent) const
diff --git a/vcl/qt5/QtFrame.cxx b/vcl/qt5/QtFrame.cxx
index db91e48a256c..ce504c10b8db 100644
--- a/vcl/qt5/QtFrame.cxx
+++ b/vcl/qt5/QtFrame.cxx
@@ -183,39 +183,34 @@ QtFrame::QtFrame(QtFrame* pParent, SalFrameStyleFlags 
nStyle, bool bUseCairo)
             pChildWindow->setTransientParent(pParentWindow);
     }
 
-    // Calling 'QWidget::winId()' implicitly enables native windows to be used
-    // rather than "alien widgets" that are unknown to the windowing system,
-    // s. https://doc.qt.io/qt-5/qwidget.html#native-widgets-vs-alien-widgets
-    // Avoid this on Wayland due to problems with missing 'mouseMoveEvent's,
-    // s. tdf#122293/QTBUG-75766
-    const bool bWayland = QGuiApplication::platformName() == "wayland";
-    if (!bWayland)
+    FillSystemEnvData(m_aSystemData, reinterpret_cast<sal_IntPtr>(this), 
m_pQWidget);
+    if (m_aSystemData.platform != SystemEnvData::Platform::Wayland)
         m_aSystemData.SetWindowHandle(m_pQWidget->winId());
-    else
-    {
-        // TODO implement as needed for Wayland,
-        // s.a. commit c0d4f3ad3307c which did this for gtk3
-        // QPlatformNativeInterface* native = 
QGuiApplication::platformNativeInterface();
-        // m_aSystemData.pDisplay = native->nativeResourceForWindow("display", 
nullptr);
-        // m_aSystemData.aWindow = reinterpret_cast<unsigned long>(
-        //     native->nativeResourceForWindow("surface", 
m_pQWidget->windowHandle()));
-    }
-
-    m_aSystemData.aShellWindow = reinterpret_cast<sal_IntPtr>(this);
-    //m_aSystemData.pSalFrame = this;
-    m_aSystemData.pWidget = m_pQWidget;
-    //m_aSystemData.nScreen = m_nXScreen.getXScreen();
-    m_aSystemData.toolkit = SystemEnvData::Toolkit::Qt;
-    if (!bWayland)
-        m_aSystemData.platform = SystemEnvData::Platform::Xcb;
-    else
-        m_aSystemData.platform = SystemEnvData::Platform::Wayland;
 
     SetIcon(SV_ICON_ID_OFFICE);
 
     fixICCCMwindowGroup();
 }
 
+void QtFrame::FillSystemEnvData(SystemEnvData& rData, sal_IntPtr pWindow, 
QWidget* pWidget)
+{
+    if (QGuiApplication::platformName() == "wayland")
+        rData.platform = SystemEnvData::Platform::Wayland;
+    else if (QGuiApplication::platformName() == "xcb")
+        rData.platform = SystemEnvData::Platform::Xcb;
+    else
+    {
+        // maybe add a SystemEnvData::Platform::Unsupported to avoid special 
cases and not abort?
+        SAL_WARN("vcl.qt",
+                 "Unsupported qt VCL platform: " << 
toOUString(QGuiApplication::platformName()));
+        std::abort();
+    }
+
+    rData.toolkit = SystemEnvData::Toolkit::Qt;
+    rData.aShellWindow = pWindow;
+    rData.pWidget = pWidget;
+}
+
 void QtFrame::fixICCCMwindowGroup()
 {
 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) && QT5_USING_X11 && 
QT5_HAVE_XCB_ICCCM
@@ -226,7 +221,7 @@ void QtFrame::fixICCCMwindowGroup()
         return;
     g_bNeedsWmHintsWindowGroup = false;
 
-    if (QGuiApplication::platformName() != "xcb")
+    if (m_aSystemData.platform != SystemEnvData::Platform::Xcb)
         return;
     if (QVersionNumber::fromString(qVersion()) >= QVersionNumber(5, 12))
         return;
@@ -1327,7 +1322,7 @@ void QtFrame::SetScreenNumber(unsigned int nScreen)
 void QtFrame::SetApplicationID(const OUString& rWMClass)
 {
 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) && QT5_USING_X11
-    if (QGuiApplication::platformName() != "xcb" || !m_pTopLevel)
+    if (m_aSystemData.platform != SystemEnvData::Platform::Xcb || !m_pTopLevel)
         return;
 
     OString aResClass = OUStringToOString(rWMClass, RTL_TEXTENCODING_ASCII_US);
diff --git a/vcl/qt5/QtObject.cxx b/vcl/qt5/QtObject.cxx
index 155a78da8ce1..b8c30af2d340 100644
--- a/vcl/qt5/QtObject.cxx
+++ b/vcl/qt5/QtObject.cxx
@@ -41,28 +41,9 @@ QtObject::QtObject(QtFrame* pParent, bool bShow)
     if (bShow)
         m_pQWidget->show();
 
-    m_aSystemData.aShellWindow = reinterpret_cast<sal_IntPtr>(this);
-    //m_aSystemData.pSalFrame = this;
-    m_aSystemData.pWidget = m_pQWidget;
-    //m_aSystemData.nScreen = m_nXScreen.getXScreen();
-    m_aSystemData.toolkit = SystemEnvData::Toolkit::Qt;
-    m_aSystemData.platform = SystemEnvData::Platform::Xcb;
-    const bool bWayland = QGuiApplication::platformName() == "wayland";
-    if (!bWayland)
-    {
-        m_aSystemData.platform = SystemEnvData::Platform::Xcb;
-        m_aSystemData.SetWindowHandle(m_pQWindow->winId()); // ID of the 
embedded window
-    }
-    else
-    {
-        m_aSystemData.platform = SystemEnvData::Platform::Wayland;
-        // TODO implement as needed for Wayland,
-        // s.a. commit c0d4f3ad3307c which did this for gtk3
-        // QPlatformNativeInterface* native = 
QGuiApplication::platformNativeInterface();
-        // m_aSystemData.pDisplay = native->nativeResourceForWindow("display", 
nullptr);
-        // m_aSystemData.aWindow = reinterpret_cast<unsigned long>(
-        //     native->nativeResourceForWindow("surface", 
m_pQWidget->windowHandle()));
-    }
+    QtFrame::FillSystemEnvData(m_aSystemData, 
reinterpret_cast<sal_IntPtr>(this), m_pQWidget);
+    if (m_aSystemData.platform != SystemEnvData::Platform::Wayland)
+        m_aSystemData.SetWindowHandle(m_pQWidget->winId());
 }
 
 QtObject::~QtObject()

Reply via email to