From e9e79e3ac97b0d4e31cd3b507a2b5078f8dd88b1 Mon Sep 17 00:00:00 2001 From: weizhixiang Date: Fri, 17 Jun 2022 11:51:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E5=BA=94=E7=94=A8=E6=89=93=E5=BC=80=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E5=86=8D=E6=AC=A1=E7=82=B9=E5=87=BB=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E5=B0=86=E5=BA=94=E7=94=A8=E7=AA=97=E5=8F=A3=E6=9C=80=E5=B0=8F?= =?UTF-8?q?=E5=8C=96=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调用xcb_ewmh_send_client_message接口,设置窗口WM_CHANGE_STATE属性,设置最小化 Log: 修复任务点击应用打开后,再次点击没有将应用窗口最小化的问题 Task: https://pms.uniontech.com/task-view-150819.html Influence: 任务栏应用能正常最小化 Change-Id: Ic856a60f6fac754431687345b4c838e32780b184 --- src/lib/xcbutils.cpp | 12 +++++------- src/modules/dock/entry.cpp | 1 + 2 files changed, 6 insertions(+), 7 deletions(-) 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();