diff options
author | Liang Qi <liang.qi@qt.io> | 2017-06-19 13:25:11 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2017-06-19 16:12:34 +0200 |
commit | ce09ef431373f45d14ce0a6e7de24aee3666093d (patch) | |
tree | 7c998b21f02db55e233e7eeb1599663f1c6b51ca /src/plugins/platforms/xcb | |
parent | 7ad55ca65f42351e231f31f7a9253ae6eaf1ebb3 (diff) | |
parent | 97eec16e4ff6367c233f8ea6c4a343c286c3a514 (diff) |
Merge remote-tracking branch 'origin/5.9' into dev
Conflicts:
src/corelib/io/qprocess_unix.cpp
src/corelib/io/qprocess_win.cpp
src/plugins/platforms/android/qandroidplatformintegration.h
src/plugins/platforms/windows/qwindowscontext.cpp
src/plugins/platforms/windows/windows.pri
src/tools/uic/cpp/cppwriteinitialization.cpp
src/widgets/doc/src/widgets-and-layouts/gallery.qdoc
Change-Id: I8d0834c77f350ea7540140c2c7f372814afc2d0f
Diffstat (limited to 'src/plugins/platforms/xcb')
-rw-r--r-- | src/plugins/platforms/xcb/qxcbintegration.cpp | 18 | ||||
-rw-r--r-- | src/plugins/platforms/xcb/qxcbwindow.cpp | 16 | ||||
-rw-r--r-- | src/plugins/platforms/xcb/qxcbwindow.h | 12 |
3 files changed, 23 insertions, 23 deletions
diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp index da7ce9bb17..94111559b4 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.cpp +++ b/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -249,25 +249,9 @@ QPlatformWindow *QXcbIntegration::createPlatformWindow(QWindow *window) const return xcbWindow; } -class QXcbForeignWindow : public QXcbWindow -{ -public: - QXcbForeignWindow(QWindow *window, WId nativeHandle) - : QXcbWindow(window) { m_window = nativeHandle; } - ~QXcbForeignWindow() {} - bool isForeignWindow() const override { return true; } - -protected: - // No-ops - void create() override {} - void destroy() override {} -}; - QPlatformWindow *QXcbIntegration::createForeignWindow(QWindow *window, WId nativeHandle) const { - QXcbWindow *xcbWindow = new QXcbForeignWindow(window, nativeHandle); - xcbWindow->create(); - return xcbWindow; + return new QXcbForeignWindow(window, nativeHandle); } #ifndef QT_NO_OPENGL diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index 0a4e3a5107..9921ed5da5 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -616,13 +616,17 @@ QXcbWindow::~QXcbWindow() } destroy(); +} - if (isForeignWindow()) { - if (connection()->mouseGrabber() == this) - connection()->setMouseGrabber(Q_NULLPTR); - if (connection()->mousePressWindow() == this) - connection()->setMousePressWindow(Q_NULLPTR); - } +QXcbForeignWindow::~QXcbForeignWindow() +{ + // Clear window so that destroy() does not affect it + m_window = 0; + + if (connection()->mouseGrabber() == this) + connection()->setMouseGrabber(nullptr); + if (connection()->mousePressWindow() == this) + connection()->setMousePressWindow(nullptr); } void QXcbWindow::destroy() diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h index 5e09865d33..b5bf33520f 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.h +++ b/src/plugins/platforms/xcb/qxcbwindow.h @@ -280,6 +280,18 @@ protected: xcb_cursor_t m_currentBitmapCursor = XCB_CURSOR_NONE; }; +class QXcbForeignWindow : public QXcbWindow +{ +public: + QXcbForeignWindow(QWindow *window, WId nativeHandle) + : QXcbWindow(window) { m_window = nativeHandle; } + ~QXcbForeignWindow(); + bool isForeignWindow() const override { return true; } + +protected: + void create() override {} // No-op +}; + QT_END_NAMESPACE Q_DECLARE_METATYPE(QXcbWindow*) |