Skip to content

Commit 8fec272

Browse files
wjyrichBLumia
authored andcommitted
feat: add activeWindow Dbus interface.
add interface for deepin-apps. Log:
1 parent 6f1c6ef commit 8fec272

5 files changed

Lines changed: 30 additions & 0 deletions

File tree

panels/dock/api/old/org.deepin.dde.daemon.Dock1.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
<arg name="desktopFile" type="s" direction="in"/>
1616
<arg name="docked" type="b" direction="out"/>
1717
</method>
18+
<method name="ActivateWindow">
19+
<arg name="win" type="u" direction="in"/>
20+
</method>
1821
<property access="readwrite" type="u" name="WindowSizeEfficient"/>
1922
<property access="readwrite" type="u" name="WindowSizeFashion"/>
2023
<!-- <property access="readwrite" type="u" name="ShowTimeout"/>

panels/dock/dockdbusproxy.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,20 @@ bool DockDBusProxy::RequestUndock(const QString &desktopFile)
195195
return res;
196196
}
197197

198+
void DockDBusProxy::ActivateWindow(uint32_t win)
199+
{
200+
qDebug() << "ActivateWindow" << win;
201+
202+
// 通过 taskmanager 来激活窗口,避免直接依赖 X11Utils
203+
DAppletBridge bridge("org.deepin.ds.dock.taskmanager");
204+
auto appletItem = bridge.applet();
205+
if (appletItem) {
206+
QMetaObject::invokeMethod(appletItem, "activateWindow", Qt::QueuedConnection, Q_ARG(uint32_t, win));
207+
} else {
208+
qWarning() << "Cannot activate window: taskmanager applet not available";
209+
}
210+
}
211+
198212
QStringList DockDBusProxy::GetLoadedPlugins()
199213
{
200214
// TODO: implement this function

panels/dock/dockdbusproxy.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ class DockDBusProxy final: public QObject, public QDBusContext
7171
bool RequestDock(const QString &desktopFile, int index);
7272
bool IsDocked(const QString &desktopFile);
7373
bool RequestUndock(const QString &desktopFile);
74+
void ActivateWindow(uint32_t win);
7475

7576
bool showInPrimary() const;
7677
void setShowInPrimary(bool newShowInPrimary);

panels/dock/taskmanager/taskmanager.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
#ifdef BUILD_WITH_X11
2929
#include "x11windowmonitor.h"
30+
#include "x11utils.h"
3031
#endif
3132

3233
Q_LOGGING_CATEGORY(taskManagerLog, "dde.shell.dock.taskmanager", QtDebugMsg)
@@ -407,6 +408,16 @@ bool TaskManager::windowFullscreen()
407408
return m_windowFullscreen;
408409
}
409410

411+
void TaskManager::activateWindow(uint32_t windowID)
412+
{
413+
#ifdef BUILD_WITH_X11
414+
X11Utils::instance()->setActiveWindow(static_cast<xcb_window_t>(windowID));
415+
#else
416+
qWarning() << "activateWindow not supported on this platform";
417+
Q_UNUSED(windowID)
418+
#endif
419+
}
420+
410421
D_APPLET_CLASS(TaskManager)
411422
}
412423

panels/dock/taskmanager/taskmanager.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ class TaskManager : public DS_NAMESPACE::DContainment, public AbstractTaskManage
9999
Q_INVOKABLE void hideItemPreview();
100100

101101
Q_INVOKABLE void setAppItemWindowIconGeometry(const QString& appid, QObject* relativePositionItem, const int& x1, const int& y1, const int& x2, const int& y2);
102+
Q_INVOKABLE void activateWindow(uint32_t windowID);
102103

103104
Q_SIGNALS:
104105
void dataModelChanged();

0 commit comments

Comments
 (0)