From 2d36508f1e1e45d39066c0f22bc5ba3f70968687 Mon Sep 17 00:00:00 2001 From: weizhixiang Date: Fri, 17 Jun 2022 17:15:04 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=20=E4=BF=AE=E5=A4=8D=E6=89=93=E5=BC=80?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E5=90=8E=EF=BC=8C=E7=82=B9=E5=87=BB=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E5=8F=B3=E9=94=AE=E8=8F=9C=E5=8D=95=E2=80=9C=E5=85=B3?= =?UTF-8?q?=E9=97=AD=E6=89=80=E6=9C=89=E2=80=9D=EF=BC=8C=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E5=9B=BE=E6=A0=87=E8=83=8C=E6=99=AF=E9=A2=9C=E8=89=B2=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E8=B0=83=E6=95=B4=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复点击应用右键菜单“关闭所有”后,没有接受到DestroyNotify事件,主动调用xcb_flush刷新缓存数据 Log: 修复点击应用右键菜单“关闭所有”后应用图标背景颜色没有调整的问题 Task: https://pms.uniontech.com/task-view-150883.html Influence: 应用“关闭所有”后图标显示正常 Change-Id: I8ed731adbd491e531251820826bf75cf891155b6 --- src/lib/xcbutils.cpp | 10 +++++++--- src/lib/xcbutils.h | 3 +++ src/modules/dock/entry.cpp | 3 +++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/lib/xcbutils.cpp b/src/lib/xcbutils.cpp index d4a9c42..c94154d 100644 --- a/src/lib/xcbutils.cpp +++ b/src/lib/xcbutils.cpp @@ -51,6 +51,11 @@ XWindow XCBUtils::allocId() return xcb_generate_id(m_connect); } +void XCBUtils::flush() +{ + xcb_flush(m_connect); +} + void XCBUtils::killClientChecked(XWindow xid) { xcb_kill_client_checked(m_connect, xid); @@ -172,8 +177,7 @@ void XCBUtils::setActiveWindow(XWindow xid) void XCBUtils::changeActiveWindow(XWindow newActiveXid) { xcb_ewmh_request_change_active_window(&m_ewmh, m_screenNum, newActiveXid, XCB_EWMH_CLIENT_SOURCE_TYPE_OTHER, XCB_CURRENT_TIME, XCB_WINDOW_NONE); - // 此处getActiveWindow作用是触发缓冲机制,执行设置活动窗口动作 - getActiveWindow(); + flush(); } void XCBUtils::restackWindow(XWindow xid) @@ -596,7 +600,7 @@ void XCBUtils::registerEvents(XWindow xid, uint32_t eventMask) xid, XCB_CW_EVENT_MASK, &value); - xcb_flush(m_connect); + flush(); xcb_generic_error_t *error = xcb_request_check(m_connect, cookie); if (error != nullptr) { diff --git a/src/lib/xcbutils.h b/src/lib/xcbutils.h index be0adbc..8e3e810 100644 --- a/src/lib/xcbutils.h +++ b/src/lib/xcbutils.h @@ -100,6 +100,9 @@ public: // 分配XID XWindow allocId(); + // 刷新 + void flush(); + /************************* xpropto method ***************************/ // 杀掉进程 void killClientChecked(XWindow xid); diff --git a/src/modules/dock/entry.cpp b/src/modules/dock/entry.cpp index b569a2a..b4d7c1e 100644 --- a/src/modules/dock/entry.cpp +++ b/src/modules/dock/entry.cpp @@ -778,6 +778,9 @@ AppMenuItem Entry::getMenuItemCloseAll() qInfo() << "close WindowId " << info->getXid(); info->close(timestamp); } + + // 关闭窗口后,主动刷新事件 + XCB->flush(); }; AppMenuItem item;