From 32218c3243fb4f0da83293c5bd6a663d8e3660ee Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 28 Sep 2017 10:21:49 +0200 Subject: Make input method events work in QQuickWidget In change 0dbc575c1a8359534761167a5f5f1e29abedd51d, we removed the focusObject() reimplementation. However QWindow does not handle input method events: it relies on the IM sending events directly to the focus object. Task-number: QTBUG-61679 Change-Id: Ib79fbd7aa58a901a774ad97e9a17071f9c042480 Reviewed-by: Eskil Abrahamsen Blomfeldt Reviewed-by: Laszlo Agocs --- src/quickwidgets/qquickwidget.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/quickwidgets') diff --git a/src/quickwidgets/qquickwidget.cpp b/src/quickwidgets/qquickwidget.cpp index c23d11ed20..5aff0ee393 100644 --- a/src/quickwidgets/qquickwidget.cpp +++ b/src/quickwidgets/qquickwidget.cpp @@ -1391,8 +1391,6 @@ bool QQuickWidget::event(QEvent *e) Q_D(QQuickWidget); switch (e->type()) { - case QEvent::InputMethod: - case QEvent::InputMethodQuery: case QEvent::TouchBegin: case QEvent::TouchEnd: @@ -1401,6 +1399,10 @@ bool QQuickWidget::event(QEvent *e) // Touch events only have local and global positions, no need to map. return QCoreApplication::sendEvent(d->offscreenWindow, e); + case QEvent::InputMethod: + case QEvent::InputMethodQuery: + return QCoreApplication::sendEvent(d->offscreenWindow->focusObject(), e); + case QEvent::WindowChangeInternal: d->handleWindowChange(); break; -- cgit v1.2.3 From a3b06ac83de95c2596317c200114d1019e665215 Mon Sep 17 00:00:00 2001 From: Andy Nichols Date: Wed, 12 Jul 2017 14:44:40 +0200 Subject: Software Adaptation: Fix QQuickWidget when moving between screens When changing between screens, the QImage representing the contents of the scene will be changed, but the software adaptation was only updating the contents of the image that had change since the last frame, leading to uninitialized image data being shown. Now QQuickWidget will force a full repaint on the new image. Task-number: QTBUG-61798 Change-Id: Iab200faee8cf6457f2eab6d33dddbe7781c9fcf1 Reviewed-by: Laszlo Agocs Reviewed-by: Qt CI Bot --- src/quickwidgets/qquickwidget.cpp | 6 ++++++ src/quickwidgets/qquickwidget_p.h | 1 + 2 files changed, 7 insertions(+) (limited to 'src/quickwidgets') diff --git a/src/quickwidgets/qquickwidget.cpp b/src/quickwidgets/qquickwidget.cpp index 5aff0ee393..4c4f5fa9f3 100644 --- a/src/quickwidgets/qquickwidget.cpp +++ b/src/quickwidgets/qquickwidget.cpp @@ -201,6 +201,7 @@ QQuickWidgetPrivate::QQuickWidgetPrivate() , fakeHidden(false) , requestedSamples(0) , useSoftwareRenderer(false) + , forceFullUpdate(false) { } @@ -306,6 +307,10 @@ void QQuickWidgetPrivate::render(bool needsSync) auto softwareRenderer = static_cast(cd->renderer); if (softwareRenderer && !softwareImage.isNull()) { softwareRenderer->setCurrentPaintDevice(&softwareImage); + if (forceFullUpdate) { + softwareRenderer->markDirty(); + forceFullUpdate = false; + } renderControl->render(); updateRegion += softwareRenderer->flushRegion(); @@ -916,6 +921,7 @@ void QQuickWidget::createFramebufferObject() const QSize imageSize = size() * devicePixelRatioF(); d->softwareImage = QImage(imageSize, QImage::Format_ARGB32_Premultiplied); d->softwareImage.setDevicePixelRatio(devicePixelRatioF()); + d->forceFullUpdate = true; return; } diff --git a/src/quickwidgets/qquickwidget_p.h b/src/quickwidgets/qquickwidget_p.h index 6892e6e0b4..9747315577 100644 --- a/src/quickwidgets/qquickwidget_p.h +++ b/src/quickwidgets/qquickwidget_p.h @@ -144,6 +144,7 @@ public: bool useSoftwareRenderer; QImage softwareImage; QRegion updateRegion; + bool forceFullUpdate; }; QT_END_NAMESPACE -- cgit v1.2.3