summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/xcb/qxcbwindow.cpp
diff options
context:
space:
mode:
authorSergio Ahumada <sahumada@blackberry.com>2014-06-11 20:11:59 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-06-11 23:06:01 +0200
commit490e79e39ee90ad89bac164891177160d1926fdf (patch)
treef6e993c617f81ccd75563e1ceeef5ee5efd1b818 /src/plugins/platforms/xcb/qxcbwindow.cpp
parenta6d7e09e89a73b3706aabbf2d08586f238348c7c (diff)
parent7ffbfed7c791b1c8e514b5c9d24e8b80de3f21c2 (diff)
Merge "Merge remote-tracking branch 'origin/stable' into 5.3" into refs/staging/5.3
Diffstat (limited to 'src/plugins/platforms/xcb/qxcbwindow.cpp')
-rw-r--r--src/plugins/platforms/xcb/qxcbwindow.cpp34
1 files changed, 30 insertions, 4 deletions
diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp
index a46fe437d8..74d8b7c2c8 100644
--- a/src/plugins/platforms/xcb/qxcbwindow.cpp
+++ b/src/plugins/platforms/xcb/qxcbwindow.cpp
@@ -337,12 +337,38 @@ void QXcbWindow::create()
#endif //defined(XCB_USE_GLX) || defined(XCB_USE_EGL)
{
m_window = xcb_generate_id(xcb_connection());
+ m_visualId = m_screen->screen()->root_visual;
m_depth = m_screen->screen()->root_depth;
+
+ uint32_t mask = 0;
+ uint32_t values[3];
+
+ if (m_format.alphaBufferSize() == 8) {
+ xcb_depth_iterator_t depthIter = xcb_screen_allowed_depths_iterator(m_screen->screen());
+ while (depthIter.rem) {
+ if (depthIter.data->depth == 32) {
+ xcb_visualtype_iterator_t visualIter = xcb_depth_visuals_iterator(depthIter.data);
+ if (visualIter.rem) {
+ m_visualId = visualIter.data->visual_id;
+ m_depth = 32;
+ uint32_t colormap = xcb_generate_id(xcb_connection());
+ xcb_create_colormap(xcb_connection(), XCB_COLORMAP_ALLOC_NONE, colormap,
+ xcb_parent_id, m_visualId);
+ mask |= XCB_CW_BACK_PIXEL | XCB_CW_BORDER_PIXEL | XCB_CW_COLORMAP;
+ values[0] = m_screen->screen()->white_pixel;
+ values[1] = m_screen->screen()->black_pixel;
+ values[2] = colormap;
+ break;
+ }
+ }
+ xcb_depth_next(&depthIter);
+ }
+ }
+
m_imageFormat = imageFormatForDepth(m_depth);
- m_visualId = m_screen->screen()->root_visual;
Q_XCB_CALL(xcb_create_window(xcb_connection(),
- XCB_COPY_FROM_PARENT, // depth -- same as root
+ m_depth,
m_window, // window id
xcb_parent_id, // parent window id
rect.x(),
@@ -352,8 +378,8 @@ void QXcbWindow::create()
0, // border width
XCB_WINDOW_CLASS_INPUT_OUTPUT, // window class
m_visualId, // visual
- 0, // value mask
- 0)); // value list
+ mask,
+ values));
}
connection()->addWindowEventListener(m_window, this);