summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan-Marek Glogowski <glogow@fbihome.de>2021-11-17 13:03:23 +0100
committerJan-Marek Glogowski <glogow@fbihome.de>2021-11-17 16:51:14 +0100
commit76611452da46aec18ba14954671beee4f6dacf49 (patch)
tree5444e8816a3bb4fe3037ee00b8401259c131822c
parent6d0d4d943f3b63ef45160b2c0f77c2bb0ea3428c (diff)
Qt refactor SystemEnvData setup
Change-Id: I900d1079c9a832a9b5170e58ce4e7a8b81d7d01b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125393 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
-rw-r--r--vcl/inc/qt5/QtFrame.hxx1
-rw-r--r--vcl/qt5/QtFrame.cxx51
-rw-r--r--vcl/qt5/QtObject.cxx25
3 files changed, 27 insertions, 50 deletions
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()