From 08a62af7c58927c37a92a5749bc87be1ae3d6d2d Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 1 Apr 2016 14:53:35 +0200 Subject: Windows QPA: Don't send geometry change after window creation for maximized/fullscreen. For these states, geometry change will be sent from the code called by setWindowState(); the geometry obtained immediately after window creation is then no longer valid. Task-number: QTBUG-52231 Change-Id: Ia7cbe95e73c5dd4126bb63d448b83f2cab6a53a1 Reviewed-by: Oliver Wolff --- src/plugins/platforms/windows/qwindowsintegration.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp index 27ec258f37..bf238c3e77 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.cpp +++ b/src/plugins/platforms/windows/qwindowsintegration.cpp @@ -318,10 +318,14 @@ QPlatformWindow *QWindowsIntegration::createPlatformWindow(QWindow *window) cons if (requested.flags != obtained.flags) window->setFlags(obtained.flags); - // Trigger geometry/screen change signals of QWindow. + // Trigger geometry change (unless it has a special state in which case setWindowState() + // will send the message) and screen change signals of QWindow. if ((obtained.flags & Qt::Desktop) != Qt::Desktop) { - if (requested.geometry != obtained.geometry) + const Qt::WindowState state = window->windowState(); + if (state != Qt::WindowMaximized && state != Qt::WindowFullScreen + && requested.geometry != obtained.geometry) { QWindowSystemInterface::handleGeometryChange(window, obtained.geometry); + } QPlatformScreen *screen = result->screenForGeometry(obtained.geometry); if (screen && result->screen() != screen) QWindowSystemInterface::handleWindowScreenChanged(window, screen->screen()); -- cgit v1.2.3 From 8c3e671239c83238fc036f8a94dde04920c43871 Mon Sep 17 00:00:00 2001 From: Joni Poikelin Date: Fri, 1 Apr 2016 10:52:37 +0300 Subject: Fix assert with Meta modifier Meta modifier is not found in some configurations which triggers an assert. Instead of assert, ignore the modifier if it is not found. Task-number: QTBUG-52298 Change-Id: I258cee4014a30162afebb423eadaf07ef0ed6a1f Reviewed-by: Paul Olav Tvete --- src/plugins/platforms/xcb/qxcbkeyboard.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.cpp b/src/plugins/platforms/xcb/qxcbkeyboard.cpp index 631dd17908..1eeb59a665 100644 --- a/src/plugins/platforms/xcb/qxcbkeyboard.cpp +++ b/src/plugins/platforms/xcb/qxcbkeyboard.cpp @@ -996,7 +996,6 @@ QList QXcbKeyboard::possibleKeys(const QKeyEvent *event) const Q_ASSERT(shiftMod < 32); Q_ASSERT(altMod < 32); Q_ASSERT(controlMod < 32); - Q_ASSERT(metaMod < 32); xkb_mod_mask_t depressed; int qtKey = 0; @@ -1017,7 +1016,7 @@ QList QXcbKeyboard::possibleKeys(const QKeyEvent *event) const depressed |= (1 << shiftMod); if (neededMods & Qt::ControlModifier) depressed |= (1 << controlMod); - if (neededMods & Qt::MetaModifier) + if (metaMod < 32 && neededMods & Qt::MetaModifier) depressed |= (1 << metaMod); xkb_state_update_mask(kb_state, depressed, latchedMods, lockedMods, 0, 0, lockedLayout); sym = xkb_state_key_get_one_sym(kb_state, keycode); -- cgit v1.2.3 From 17d17a5d72d4f98b692c8ab8a7037aa29b503dae Mon Sep 17 00:00:00 2001 From: Maurice Kalinowski Date: Tue, 5 Apr 2016 12:59:17 +0200 Subject: winrt: Change input panel behavior to platform default Native applications do open the native input pane when the touch release happens, not during press. Widget applications seem to not ask the theme, so it was acting like native there already. For Qt Quick applications the platform theme is queried, now returning true for SetFocusOnTouchRelease. As a side-effect this also fixes QTBUG-52295, as showInputPanel() at press time causes issues with focus handling, causing the input pane to disappear again. Task-number: QTBUG-52295 Change-Id: I6da6a0126f695233b7c8a399a1549a8b7c824af2 Reviewed-by: Friedemann Kleint Reviewed-by: Oliver Wolff --- src/plugins/platforms/winrt/qwinrttheme.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/plugins') diff --git a/src/plugins/platforms/winrt/qwinrttheme.cpp b/src/plugins/platforms/winrt/qwinrttheme.cpp index 7ef13fd0aa..bc3ba210c9 100644 --- a/src/plugins/platforms/winrt/qwinrttheme.cpp +++ b/src/plugins/platforms/winrt/qwinrttheme.cpp @@ -355,7 +355,7 @@ QVariant QWinRTTheme::styleHint(QPlatformIntegration::StyleHint hint) case QPlatformIntegration::PasswordMaskCharacter: return defaultThemeHint(PasswordMaskCharacter); case QPlatformIntegration::SetFocusOnTouchRelease: - return false; + return true; case QPlatformIntegration::ShowIsMaximized: return true; case QPlatformIntegration::MousePressAndHoldInterval: -- cgit v1.2.3 From 58c23ae1619fb4afaae9c8eb2527c0906baef97b Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 6 Apr 2016 09:57:43 +0200 Subject: Windows QPA: Check QWindowsStaticOpenGLContext in nativeResourceForIntegration(). The instance of QWindowsStaticOpenGLContext has been observed to be 0. Task-number: QTBUG-52387 Change-Id: I1ca97c6df0d96e732ae62354e03f465cd461bcb4 Reviewed-by: Joerg Bornemann --- src/plugins/platforms/windows/qwindowsnativeinterface.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp index 659ef79c18..add6d6b1f0 100644 --- a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp +++ b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp @@ -138,8 +138,10 @@ void *QWindowsNativeInterface::nativeResourceForIntegration(const QByteArray &re #ifdef QT_NO_OPENGL Q_UNUSED(resource) #else - if (resourceType(resource) == GlHandleType) - return QWindowsIntegration::staticOpenGLContext()->moduleHandle(); + if (resourceType(resource) == GlHandleType) { + if (const QWindowsStaticOpenGLContext *sc = QWindowsIntegration::staticOpenGLContext()) + return sc->moduleHandle(); + } #endif return 0; -- cgit v1.2.3 From c7ec317822258e652e74af4449b1237a4755688f Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 6 Apr 2016 13:22:57 +0200 Subject: Direct2D QPA: Fix build with clang-cl. Remove overzealous constexpr triggering errors like: in file included from .\qwindowsdirect2dpaintengine.cpp:44: ./qwindowsdirect2dhelpers.h(58,37) : error: constexpr function never produces a constant expression [-Winvalid-constexpr] Q_DECL_CONSTEXPR inline D2D1_RECT_F to_d2d_rect_f(const QRectF &qrect) ^ ./qwindowsdirect2dhelpers.h(60,12) : note: non-constexpr function 'RectF' cannot be used in a constant expression return D2D1::RectF(qrect.x(), qrect.y(), qrect.x() + qrect.width(), qrect.y() + qrect.height()); ^ C:\Program Files (x86)\Windows Kits\10\include\10.0.10586.0\um\d2d1helper.h(160,5) : note: declared here RectF( ^ Task-number: QTBUG-50860 Change-Id: I0bb4d17b7a7db69c5cc7e286ef0b8ff104f72b2e Reviewed-by: Joerg Bornemann --- src/plugins/platforms/direct2d/qwindowsdirect2dhelpers.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dhelpers.h b/src/plugins/platforms/direct2d/qwindowsdirect2dhelpers.h index 08886854ee..228c60aaf6 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dhelpers.h +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dhelpers.h @@ -44,37 +44,37 @@ QT_BEGIN_NAMESPACE -Q_DECL_CONSTEXPR inline D2D1_RECT_U to_d2d_rect_u(const QRect &qrect) +inline D2D1_RECT_U to_d2d_rect_u(const QRect &qrect) { return D2D1::RectU(qrect.x(), qrect.y(), qrect.x() + qrect.width(), qrect.y() + qrect.height()); } -Q_DECL_CONSTEXPR inline D2D1_RECT_F to_d2d_rect_f(const QRectF &qrect) +inline D2D1_RECT_F to_d2d_rect_f(const QRectF &qrect) { return D2D1::RectF(qrect.x(), qrect.y(), qrect.x() + qrect.width(), qrect.y() + qrect.height()); } -Q_DECL_CONSTEXPR inline D2D1_SIZE_U to_d2d_size_u(const QSizeF &qsize) +inline D2D1_SIZE_U to_d2d_size_u(const QSizeF &qsize) { return D2D1::SizeU(qsize.width(), qsize.height()); } -Q_DECL_CONSTEXPR inline D2D1_SIZE_U to_d2d_size_u(const QSize &qsize) +inline D2D1_SIZE_U to_d2d_size_u(const QSize &qsize) { return D2D1::SizeU(qsize.width(), qsize.height()); } -Q_DECL_CONSTEXPR inline D2D1_POINT_2F to_d2d_point_2f(const QPointF &qpoint) +inline D2D1_POINT_2F to_d2d_point_2f(const QPointF &qpoint) { return D2D1::Point2F(qpoint.x(), qpoint.y()); } -Q_DECL_CONSTEXPR inline D2D1::ColorF to_d2d_color_f(const QColor &c) +inline D2D1::ColorF to_d2d_color_f(const QColor &c) { return D2D1::ColorF(c.redF(), c.greenF(), c.blueF(), c.alphaF()); } -Q_DECL_CONSTEXPR inline D2D1_MATRIX_3X2_F to_d2d_matrix_3x2_f(const QTransform &transform) +inline D2D1_MATRIX_3X2_F to_d2d_matrix_3x2_f(const QTransform &transform) { return D2D1::Matrix3x2F(transform.m11(), transform.m12(), transform.m21(), transform.m22(), -- cgit v1.2.3 From e4e62496ac62deab0e8f6ae9f064cf153b31d2fa Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 1 Apr 2016 15:31:16 +0200 Subject: Windows QPA: Scale hotspot of custom cursors correctly. Separate factors in QWindowsCursor::createPixmapCursor() and apply factor to the hotspot. Task-number: QTBUG-52276 Change-Id: Ia5a5db39ddc2bc4215a23ff8625431af9b4a76d8 Reviewed-by: Adam Light Reviewed-by: Oliver Wolff --- src/plugins/platforms/windows/qwindowscursor.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/platforms/windows/qwindowscursor.cpp b/src/plugins/platforms/windows/qwindowscursor.cpp index cda741c226..844fe23517 100644 --- a/src/plugins/platforms/windows/qwindowscursor.cpp +++ b/src/plugins/platforms/windows/qwindowscursor.cpp @@ -97,9 +97,9 @@ QWindowsPixmapCursorCacheKey::QWindowsPixmapCursorCacheKey(const QCursor &c) HCURSOR QWindowsCursor::createPixmapCursor(QPixmap pixmap, const QPoint &hotSpot, qreal scaleFactor) { HCURSOR cur = 0; - scaleFactor /= pixmap.devicePixelRatioF(); - if (!qFuzzyCompare(scaleFactor, 1)) { - pixmap = pixmap.scaled((scaleFactor * QSizeF(pixmap.size())).toSize(), + const qreal pixmapScaleFactor = scaleFactor / pixmap.devicePixelRatioF(); + if (!qFuzzyCompare(pixmapScaleFactor, 1)) { + pixmap = pixmap.scaled((pixmapScaleFactor * QSizeF(pixmap.size())).toSize(), Qt::KeepAspectRatio, Qt::SmoothTransformation); } QBitmap mask = pixmap.mask(); @@ -113,8 +113,8 @@ HCURSOR QWindowsCursor::createPixmapCursor(QPixmap pixmap, const QPoint &hotSpot ICONINFO ii; ii.fIcon = 0; - ii.xHotspot = DWORD(hotSpot.x()); - ii.yHotspot = DWORD(hotSpot.y()); + ii.xHotspot = DWORD(qRound(hotSpot.x() * scaleFactor)); + ii.yHotspot = DWORD(qRound(hotSpot.y() * scaleFactor)); ii.hbmMask = im; ii.hbmColor = ic; -- cgit v1.2.3