Skip to content

Commit 83c3364

Browse files
committed
feat: add smart hide when hide desktop.
as title. PMS-BUG-309173
1 parent cac106e commit 83c3364

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

panels/dock/x11dockhelper.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,20 @@ void X11DockHelper::onWindowPropertyChanged(xcb_window_t window, xcb_atom_t atom
434434
updateWindowHideState(window);
435435
} else if (atom == m_xcbHelper->getAtomByName("_NET_WM_DESKTOP")) {
436436
onWindowWorkspaceChanged(window);
437+
} else if (atom == m_xcbHelper->getAtomByName("_NET_WM_STATE")) {
438+
bool wasMinimized = m_windows[window]->isMinimized;
439+
m_windows[window]->isMinimized = m_xcbHelper->getWindowState(window).contains(m_xcbHelper->getAtomByName("_NET_WM_STATE_HIDDEN"));
440+
// 检查窗口是否被隐藏
441+
// Win+D时窗口状态会被清空,这也表示窗口被隐藏
442+
bool isWindowHidden = states.contains(m_xcbHelper->getAtomByName("_NET_WM_STATE_HIDDEN")) ||
443+
states.contains(m_xcbHelper->getAtomByName("_NET_WM_STATE_BELOW")) ||
444+
states.contains(m_xcbHelper->getAtomByName("_NET_WM_STATE_SKIP_TASKBAR")) ||
445+
states.isEmpty(); // 状态为空也表示被隐藏(Win+D的情况)
446+
447+
if (isWindowHidden != wasMinimized) {
448+
m_windows[window]->isMinimized = isWindowHidden;
449+
updateWindowHideState(window);
450+
}
437451
}
438452
}
439453
}
@@ -462,6 +476,9 @@ void X11DockHelper::updateWindowHideState(xcb_window_t window)
462476
bool oldOverlap = data->overlap;
463477
if (!data->isMinimized) {
464478
data->overlap = data->rect.intersects(m_dockArea);
479+
} else {
480+
// 最小化的窗口不会与任务栏重叠
481+
data->overlap = false;
465482
}
466483

467484
if (oldOverlap != data->overlap) {

0 commit comments

Comments
 (0)