From 67783180ec9678247d5eef252c1826af5959e52a Mon Sep 17 00:00:00 2001 From: weizhixiang Date: Tue, 21 Jun 2022 15:20:25 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E5=8D=95=E4=B8=AA=E5=BA=94=E7=94=A8=E7=9A=84=E5=85=B6=E4=B8=AD?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E7=AA=97=E5=8F=A3=EF=BC=8C=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E9=A2=84=E8=A7=88=E6=98=BE=E7=A4=BA=E7=AA=97=E5=8F=A3=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关闭应用多个窗口中的一个,Dock1服务发送窗口信息变化信号通知前端调整界面显示 Log: 修复任务栏应用预览的问题 Task: https://pms.uniontech.com/task-view-152903.html Influence: 任务栏应用预览正常 Change-Id: I3be3b4d40c77433ac21a64df49f1e4f913a4d0fd --- src/modules/dock/dock.cpp | 9 --------- src/modules/dock/dock.h | 1 - src/modules/dock/entries.cpp | 10 ---------- src/modules/dock/entries.h | 1 - src/modules/dock/entry.cpp | 19 +++++++------------ src/modules/dock/entry.h | 1 - 6 files changed, 7 insertions(+), 34 deletions(-) diff --git a/src/modules/dock/dock.cpp b/src/modules/dock/dock.cpp index c1a7384..1cf5499 100644 --- a/src/modules/dock/dock.cpp +++ b/src/modules/dock/dock.cpp @@ -1274,15 +1274,6 @@ void Dock::markAppLaunched(AppInfo *appInfo) dbusHandler->markAppLaunched(desktopFile); } -/** - * @brief Dock::deleteWindow 删除窗口 TODO 检查必要性 - * @param xid - */ -void Dock::deleteWindow(XWindow xid) -{ - entries->deleteWindow(xid); -} - /** * @brief Dock::getForceQuitAppStatus 获取强制关闭应用状态 * @return diff --git a/src/modules/dock/dock.h b/src/modules/dock/dock.h index 2fc3069..06b260d 100644 --- a/src/modules/dock/dock.h +++ b/src/modules/dock/dock.h @@ -81,7 +81,6 @@ public: AppInfo *identifyWindow(WindowInfoBase *winInfo, QString &innerId); void markAppLaunched(AppInfo *appInfo); - void deleteWindow(XWindow xid); ForceQuitAppMode getForceQuitAppStatus(); QVector getWinIconPreferredApps(); diff --git a/src/modules/dock/entries.cpp b/src/modules/dock/entries.cpp index 44bfa39..02ff600 100644 --- a/src/modules/dock/entries.cpp +++ b/src/modules/dock/entries.cpp @@ -188,16 +188,6 @@ void Entries::handleActiveWindowChanged(XWindow activeWindId) } } -void Entries::deleteWindow(XWindow xid) -{ - for (auto entry : items) { - if (entry->containsWindow(xid)) { - entry->deleteWindow(xid); - break; - } - } -} - void Entries::updateEntriesMenu() { for (auto entry : items) { diff --git a/src/modules/dock/entries.h b/src/modules/dock/entries.h index 5dde76e..298b38f 100644 --- a/src/modules/dock/entries.h +++ b/src/modules/dock/entries.h @@ -47,7 +47,6 @@ public: Entry *getDockedEntryByDesktopFile(const QString &desktopFile); QString queryWindowIdentifyMethod(XWindow windowId); void handleActiveWindowChanged(XWindow activeWindId); - void deleteWindow(XWindow xid); void updateEntriesMenu(); void insertCb(Entry *entry, int index); void removeCb(Entry *entry); diff --git a/src/modules/dock/entry.cpp b/src/modules/dock/entry.cpp index ba7d3f9..3b5077d 100644 --- a/src/modules/dock/entry.cpp +++ b/src/modules/dock/entry.cpp @@ -439,6 +439,7 @@ void Entry::updateExportWindowInfos() Q_EMIT windowInfosChanged(infos); } + // 更新导出的窗口信息 exportWindowInfos = infos; } @@ -447,7 +448,11 @@ bool Entry::detachWindow(WindowInfoBase *info) { info->setEntry(nullptr); XWindow winId = info->getXid(); - deleteWindow(winId); + if (windowInfoMap.contains(winId)) { + WindowInfoBase *info = windowInfoMap[winId]; + windowInfoMap.remove(winId); + delete info; + } if (windowInfoMap.isEmpty()) { if (!isDocked) { @@ -509,16 +514,6 @@ bool Entry::containsWindow(XWindow xid) return windowInfoMap.find(xid) != windowInfoMap.end(); } -void Entry::deleteWindow(XWindow xid) -{ - if (windowInfoMap.contains(xid)) { - WindowInfoBase *info = windowInfoMap[xid]; - windowInfoMap.remove(xid); - exportWindowInfos.remove(xid); - delete info; - } -} - // 处理菜单项 void Entry::handleMenuItem(uint32_t timestamp, QString itemId) { @@ -639,7 +634,7 @@ void Entry::active(uint32_t timestamp) dock->doActiveWindow(xid); } else { bool found = false; - bool hiddenAtom = XCB->getAtom("_NET_WM_STATE_HIDDEN"); + XWindow hiddenAtom = XCB->getAtom("_NET_WM_STATE_HIDDEN"); for (auto state : XCB->getWMState(xid)) { if (hiddenAtom == state) { found = true; diff --git a/src/modules/dock/entry.h b/src/modules/dock/entry.h index a85b535..93d42df 100644 --- a/src/modules/dock/entry.h +++ b/src/modules/dock/entry.h @@ -76,7 +76,6 @@ public: bool attachWindow(WindowInfoBase *info); void launchApp(uint32_t timestamp); bool containsWindow(XWindow xid); - void deleteWindow(XWindow xid); void handleMenuItem(uint32_t timestamp, QString itemId); void handleDragDrop(uint32_t timestamp, QStringList files);