diff --git a/src/lib/xcbutils.cpp b/src/lib/xcbutils.cpp index c94154d..ebfcdb8 100644 --- a/src/lib/xcbutils.cpp +++ b/src/lib/xcbutils.cpp @@ -501,15 +501,13 @@ WMClass XCBUtils::getWMClass(XWindow xid) return ret; } -// TODO void XCBUtils::minimizeWindow(XWindow xid) { - xcb_get_property_cookie_t cookie = xcb_icccm_get_wm_hints(m_connect, xid); - xcb_icccm_wm_hints_t *hints = new xcb_icccm_wm_hints_t; // 分配堆空间 - xcb_icccm_get_wm_hints_reply(m_connect, cookie, hints, nullptr); - xcb_icccm_wm_hints_set_iconic(hints); - xcb_icccm_set_wm_hints(m_connect, xid, hints); - free(hints); + uint32_t data[2]; + data[0] = XCB_ICCCM_WM_STATE_ICONIC; + data[1] = XCB_NONE; + xcb_ewmh_send_client_message(m_connect, xid, getRootWindow(),getAtom("WM_CHANGE_STATE"), 2, data); + flush(); } void XCBUtils::maxmizeWindow(XWindow xid) diff --git a/src/modules/dock/entry.cpp b/src/modules/dock/entry.cpp index b4d7c1e..6b8dcd8 100644 --- a/src/modules/dock/entry.cpp +++ b/src/modules/dock/entry.cpp @@ -652,6 +652,7 @@ void Entry::active(uint32_t timestamp) // 激活隐藏窗口 dock->doActiveWindow(xid); } else if (windowInfoMap.size() == 1) { + // 窗口图标化 XCB->minimizeWindow(xid); } else if (dock->getActiveWindow() && dock->getActiveWindow()->getXid() == xid) { WindowInfoBase *nextWin = findNextLeader();