fix: 修复任务栏应用需要点击两次才能active的问题

修复任务栏应用需要点击两次才能active的问题

Log:
Task: https://pms.uniontech.com/task-view-142531.html
Influence: 任务栏应用一次点击就可以打开
Change-Id: I792202025a155a21ad7133887c17289b9a653c6f
This commit is contained in:
weizhixiang
2022-06-02 14:20:42 +08:00
parent 3a4135a1b7
commit 06ada3be52
4 changed files with 33 additions and 6 deletions

View File

@ -86,6 +86,7 @@ Dock::Dock(QObject *parent)
connect(x11Manager, &X11Manager::requestUpdateHideState, this, &Dock::updateHideState);
connect(x11Manager, &X11Manager::requestAttachOrDetachWindow, this, &Dock::attachOrDetachWindow);
}
Q_EMIT serviceRestarted();
}
@ -395,6 +396,18 @@ WindowInfoBase *Dock::getActiveWindow()
void Dock::doActiveWindow(XWindow xid)
{
// 修改当前工作区为指定窗口的工作区
XWindow winWorkspace = XCB->getWMDesktop(xid);
XWindow currentWorkspace = XCB->getCurrentWMDesktop();
if (winWorkspace != currentWorkspace) {
qInfo() << "doActiveWindow: change currentWorkspace " << currentWorkspace << " to winWorkspace " << winWorkspace;
// 获取窗口时间
uint32_t timestamp = XCB->getWMUserTime(xid);
// 修改当前桌面工作区
XCB->changeCurrentDesktop(winWorkspace, timestamp);
}
XCB->changeActiveWindow(xid);
QTimer::singleShot(50, [&] {
XCB->restackWindow(xid);

View File

@ -272,12 +272,16 @@ void X11Manager::listenWindowXEvent(WindowInfoX *winInfo)
void X11Manager::handleRootWindowPropertyNotifyEvent(XCBAtom atom)
{
if (atom == XCB->getAtom("_NET_CLIENT_LIST"))
if (atom == XCB->getAtom("_NET_CLIENT_LIST")) {
// 窗口列表改变
handleClientListChanged();
else if (atom == XCB->getAtom("_NET_ACTIVE_WINDOW"))
} else if (atom == XCB->getAtom("_NET_ACTIVE_WINDOW")) {
// 活动窗口改变
handleActiveWindowChangedX();
else if (atom == XCB->getAtom("_NET_SHOWING_DESKTOP"))
} else if (atom == XCB->getAtom("_NET_SHOWING_DESKTOP")) {
// 更新任务栏隐藏状态
Q_EMIT requestUpdateHideState(false);
}
}
// destory event