Skip to content

Commit 1bfe03d

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

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

panels/dock/x11dockhelper.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,17 @@ 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+
auto states = m_xcbHelper->getWindowState(window);
439+
// 计算窗口是否被隐藏
440+
bool isWindowHidden = states.contains(m_xcbHelper->getAtomByName("_NET_WM_STATE_HIDDEN")) ||
441+
states.contains(m_xcbHelper->getAtomByName("_NET_WM_STATE_BELOW")) ||
442+
states.contains(m_xcbHelper->getAtomByName("_NET_WM_STATE_SKIP_TASKBAR")) ||
443+
states.isEmpty(); // 状态为空也表示被隐藏(Win+D的情况)
444+
if (m_windows[window]->isMinimized != isWindowHidden) {
445+
m_windows[window]->isMinimized = isWindowHidden;
446+
updateWindowHideState(window);
447+
}
437448
}
438449
}
439450
}
@@ -462,6 +473,9 @@ void X11DockHelper::updateWindowHideState(xcb_window_t window)
462473
bool oldOverlap = data->overlap;
463474
if (!data->isMinimized) {
464475
data->overlap = data->rect.intersects(m_dockArea);
476+
} else {
477+
// 最小化的窗口不会与任务栏重叠
478+
data->overlap = false;
465479
}
466480

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

0 commit comments

Comments
 (0)