diff options
-rw-r--r-- | src/plugins/platforms/xcb/README | 2 | ||||
-rw-r--r-- | src/plugins/platforms/xcb/qxcbwindow.cpp | 19 | ||||
-rw-r--r-- | src/plugins/platforms/xcb/xcb.pro | 2 |
3 files changed, 21 insertions, 2 deletions
diff --git a/src/plugins/platforms/xcb/README b/src/plugins/platforms/xcb/README index d250ad0..e88596b 100644 --- a/src/plugins/platforms/xcb/README +++ b/src/plugins/platforms/xcb/README @@ -1,2 +1,2 @@ Required packages: -libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev +libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm1 libxcb-icccm1-dev diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index 824a967..7fb4cc4 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -44,6 +44,8 @@ #include "qxcbconnection.h" #include "qxcbscreen.h" +#include <xcb/xcb_icccm.h> + #include <private/qapplication_p.h> #include <private/qwindowsurface_p.h> @@ -183,10 +185,27 @@ void QXcbWindow::setGeometry(const QRect &rect) void QXcbWindow::setVisible(bool visible) { + xcb_wm_hints_t hints; if (visible) { + if (widget()->isMinimized()) + xcb_wm_hints_set_iconic(&hints); + else + xcb_wm_hints_set_normal(&hints); + xcb_set_wm_hints(xcb_connection(), m_window, &hints); xcb_map_window(xcb_connection(), m_window); } else { xcb_unmap_window(xcb_connection(), m_window); + + // send synthetic UnmapNotify event according to icccm 4.1.4 + xcb_unmap_notify_event_t event; + event.response_type = XCB_UNMAP_NOTIFY; + event.sequence = 0; // does this matter? + event.event = m_screen->root(); + event.window = m_window; + event.from_configure = false; + xcb_send_event(xcb_connection(), false, m_screen->root(), + XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, (const char *)&event); + xcb_flush(xcb_connection()); } } diff --git a/src/plugins/platforms/xcb/xcb.pro b/src/plugins/platforms/xcb/xcb.pro index 58382c0..a6e92ef 100644 --- a/src/plugins/platforms/xcb/xcb.pro +++ b/src/plugins/platforms/xcb/xcb.pro @@ -31,7 +31,7 @@ contains(DEFINES, XCB_USE_XLIB_FOR_GLX) { LIBS += -lX11 -lX11-xcb } -LIBS += -lxcb -lxcb-image -lxcb-keysyms +LIBS += -lxcb -lxcb-image -lxcb-keysyms -lxcb-icccm include (../fontdatabases/genericunix/genericunix.pri) |