fix: 修复任务栏应用需要点击两次才能active的问题
修复任务栏应用需要点击两次才能active的问题 Log: Task: https://pms.uniontech.com/task-view-142531.html Influence: 任务栏应用一次点击就可以打开 Change-Id: I792202025a155a21ad7133887c17289b9a653c6f
This commit is contained in:
@ -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);
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user