summaryrefslogtreecommitdiff
path: root/vcl/qt5
diff options
context:
space:
mode:
authorJan-Marek Glogowski <glogow@fbihome.de>2022-04-07 01:07:43 +0200
committerJan-Marek Glogowski <glogow@fbihome.de>2022-04-08 17:55:58 +0200
commit881cfbf77567194f5016a961d1c3db869734d68b (patch)
tree73677119e34433599d9558da21035d4742218a28 /vcl/qt5
parent126b1826c465002dccc7c354a584731fa70ec5fd (diff)
tdf#141578 Qt handle QtFrame screen changes
LO doesn't provide any way to notify screen changes / scaling factors of a window and in fact doesn't really handle scaling factors in VCL. The QWidget doesn't receive a resize event, because it's size doesn't change, just the scaling factor. So we trigger a faked resize on QWindow::screenChanged signal. Change-Id: I6928c4c62d1c0995c70fea0088cff17849bcd1d4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132650 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
Diffstat (limited to 'vcl/qt5')
-rw-r--r--vcl/qt5/QtFrame.cxx19
-rw-r--r--vcl/qt5/QtWidget.cxx6
2 files changed, 19 insertions, 6 deletions
diff --git a/vcl/qt5/QtFrame.cxx b/vcl/qt5/QtFrame.cxx
index b8f649e64b78..91361311d60e 100644
--- a/vcl/qt5/QtFrame.cxx
+++ b/vcl/qt5/QtFrame.cxx
@@ -30,7 +30,6 @@
#include <QtSystem.hxx>
#include <QtTools.hxx>
#include <QtTransferable.hxx>
-#include <QtWidget.hxx>
#include <QtCore/QMimeData>
#include <QtCore/QPoint>
@@ -176,10 +175,12 @@ QtFrame::QtFrame(QtFrame* pParent, SalFrameStyleFlags nStyle, bool bUseCairo)
else
m_pQWidget = new QtWidget(*this, aWinFlags);
+ QWindow* pChildWindow = windowHandle();
+ connect(pChildWindow, &QWindow::screenChanged, this, &QtFrame::screenChanged);
+
if (pParent && !(pParent->m_nStyle & SalFrameStyleFlags::PLUG))
{
QWindow* pParentWindow = pParent->windowHandle();
- QWindow* pChildWindow = windowHandle();
if (pParentWindow && pChildWindow && (pParentWindow != pChildWindow))
pChildWindow->setTransientParent(pParentWindow);
}
@@ -191,6 +192,8 @@ QtFrame::QtFrame(QtFrame* pParent, SalFrameStyleFlags nStyle, bool bUseCairo)
fixICCCMwindowGroup();
}
+void QtFrame::screenChanged(QScreen*) { m_pQWidget->fakeResize(); }
+
void QtFrame::FillSystemEnvData(SystemEnvData& rData, sal_IntPtr pWindow, QWidget* pWidget)
{
if (QGuiApplication::platformName() == "wayland")
@@ -343,7 +346,12 @@ bool QtFrame::PostEvent(std::unique_ptr<ImplSVEvent> pData)
return true;
}
-QWidget* QtFrame::asChild() const { return m_pTopLevel ? m_pTopLevel : m_pQWidget; }
+QWidget* QtFrame::asChild() const
+{
+ if (m_pTopLevel)
+ return m_pTopLevel;
+ return m_pQWidget;
+}
qreal QtFrame::devicePixelRatioF() const { return asChild()->devicePixelRatioF(); }
@@ -868,9 +876,8 @@ void QtFrame::SetInputContext(SalInputContext* pContext)
void QtFrame::EndExtTextInput(EndExtTextInputFlags /*nFlags*/)
{
- QtWidget* pQtWidget = static_cast<QtWidget*>(m_pQWidget);
- if (pQtWidget)
- pQtWidget->endExtTextInput();
+ if (m_pQWidget)
+ m_pQWidget->endExtTextInput();
}
OUString QtFrame::GetKeyName(sal_uInt16 nKeyCode)
diff --git a/vcl/qt5/QtWidget.cxx b/vcl/qt5/QtWidget.cxx
index cd47492808cc..612682ae987f 100644
--- a/vcl/qt5/QtWidget.cxx
+++ b/vcl/qt5/QtWidget.cxx
@@ -134,6 +134,12 @@ void QtWidget::resizeEvent(QResizeEvent* pEvent)
m_rFrame.CallCallback(SalEvent::Resize, nullptr);
}
+void QtWidget::fakeResize()
+{
+ QResizeEvent aEvent(size(), QSize());
+ resizeEvent(&aEvent);
+}
+
void QtWidget::fillSalAbstractMouseEvent(const QtFrame& rFrame, const QInputEvent* pQEvent,
const QPoint& rPos, Qt::MouseButtons eButtons, int nWidth,
SalAbstractMouseEvent& aSalEvent)