From f838dcc050217507fd060d4c5dd093eb22ac95af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Wed, 4 May 2011 12:38:39 +0200 Subject: Improved handling of child windows. Don't force-create QWindows until they're explicitly created or shown. --- src/plugins/platforms/xcb/qxcbwindow.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index b0df622b33..84886554b1 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -113,6 +113,10 @@ QXcbWindow::QXcbWindow(QWindow *window) QRect rect = window->geometry(); + xcb_window_t xcb_parent_id = m_screen->root(); + if (window->parent() && window->parent()->windowHandle()) + xcb_parent_id = static_cast(window->parent()->windowHandle())->xcb_window(); + #if defined(XCB_USE_GLX) || defined(XCB_USE_EGL) if (window->surfaceType() == QWindow::OpenGLSurface && QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::OpenGL)) @@ -133,11 +137,11 @@ QXcbWindow::QXcbWindow(QWindow *window) visualInfo = XGetVisualInfo(DISPLAY_FROM_XCB(this), VisualIDMask, &visualInfoTemplate, &matchingCount); #endif //XCB_USE_GLX if (visualInfo) { - Colormap cmap = XCreateColormap(DISPLAY_FROM_XCB(this), m_screen->root(), visualInfo->visual, AllocNone); + Colormap cmap = XCreateColormap(DISPLAY_FROM_XCB(this), xcb_parent_id, visualInfo->visual, AllocNone); XSetWindowAttributes a; a.colormap = cmap; - m_window = XCreateWindow(DISPLAY_FROM_XCB(this), m_screen->root(), rect.x(), rect.y(), rect.width(), rect.height(), + m_window = XCreateWindow(DISPLAY_FROM_XCB(this), xcb_parent_id, rect.x(), rect.y(), rect.width(), rect.height(), 0, visualInfo->depth, InputOutput, visualInfo->visual, CWColormap, &a); @@ -153,7 +157,7 @@ QXcbWindow::QXcbWindow(QWindow *window) Q_XCB_CALL(xcb_create_window(xcb_connection(), XCB_COPY_FROM_PARENT, // depth -- same as root m_window, // window id - m_screen->root(), // parent window id + xcb_parent_id, // parent window id rect.x(), rect.y(), rect.width(), -- cgit v1.2.3