fix: 修复任务点击应用打开后,再次点击没有将应用窗口最小化的问题

调用xcb_ewmh_send_client_message接口,设置窗口WM_CHANGE_STATE属性,设置最小化

Log: 修复任务点击应用打开后,再次点击没有将应用窗口最小化的问题
Task: https://pms.uniontech.com/task-view-150819.html
Influence: 任务栏应用能正常最小化
Change-Id: Ic856a60f6fac754431687345b4c838e32780b184
This commit is contained in:
weizhixiang 2022-06-17 11:51:46 +08:00
parent 2d36508f1e
commit e9e79e3ac9
2 changed files with 6 additions and 7 deletions

View File

@ -501,15 +501,13 @@ WMClass XCBUtils::getWMClass(XWindow xid)
return ret; return ret;
} }
// TODO
void XCBUtils::minimizeWindow(XWindow xid) void XCBUtils::minimizeWindow(XWindow xid)
{ {
xcb_get_property_cookie_t cookie = xcb_icccm_get_wm_hints(m_connect, xid); uint32_t data[2];
xcb_icccm_wm_hints_t *hints = new xcb_icccm_wm_hints_t; // 分配堆空间 data[0] = XCB_ICCCM_WM_STATE_ICONIC;
xcb_icccm_get_wm_hints_reply(m_connect, cookie, hints, nullptr); data[1] = XCB_NONE;
xcb_icccm_wm_hints_set_iconic(hints); xcb_ewmh_send_client_message(m_connect, xid, getRootWindow(),getAtom("WM_CHANGE_STATE"), 2, data);
xcb_icccm_set_wm_hints(m_connect, xid, hints); flush();
free(hints);
} }
void XCBUtils::maxmizeWindow(XWindow xid) void XCBUtils::maxmizeWindow(XWindow xid)

View File

@ -652,6 +652,7 @@ void Entry::active(uint32_t timestamp)
// 激活隐藏窗口 // 激活隐藏窗口
dock->doActiveWindow(xid); dock->doActiveWindow(xid);
} else if (windowInfoMap.size() == 1) { } else if (windowInfoMap.size() == 1) {
// 窗口图标化
XCB->minimizeWindow(xid); XCB->minimizeWindow(xid);
} else if (dock->getActiveWindow() && dock->getActiveWindow()->getXid() == xid) { } else if (dock->getActiveWindow() && dock->getActiveWindow()->getXid() == xid) {
WindowInfoBase *nextWin = findNextLeader(); WindowInfoBase *nextWin = findNextLeader();