Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions panels/dock/api/old/org.deepin.dde.daemon.Dock1.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
<arg name="desktopFile" type="s" direction="in"/>
<arg name="docked" type="b" direction="out"/>
</method>
<method name="ActivateWindow">
<arg name="win" type="u" direction="in"/>
</method>
<property access="readwrite" type="u" name="WindowSizeEfficient"/>
<property access="readwrite" type="u" name="WindowSizeFashion"/>
<!-- <property access="readwrite" type="u" name="ShowTimeout"/>
Expand Down
14 changes: 14 additions & 0 deletions panels/dock/dockdbusproxy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,20 @@ bool DockDBusProxy::RequestUndock(const QString &desktopFile)
return res;
}

void DockDBusProxy::ActivateWindow(uint32_t win)
{
qDebug() << "ActivateWindow" << win;

// 通过 taskmanager 来激活窗口,避免直接依赖 X11Utils
DAppletBridge bridge("org.deepin.ds.dock.taskmanager");
auto appletItem = bridge.applet();
if (appletItem) {
QMetaObject::invokeMethod(appletItem, "activateWindow", Qt::QueuedConnection, Q_ARG(uint32_t, win));
} else {
qWarning() << "Cannot activate window: taskmanager applet not available";
}
}

QStringList DockDBusProxy::GetLoadedPlugins()
{
// TODO: implement this function
Expand Down
1 change: 1 addition & 0 deletions panels/dock/dockdbusproxy.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ class DockDBusProxy final: public QObject, public QDBusContext
bool RequestDock(const QString &desktopFile, int index);
bool IsDocked(const QString &desktopFile);
bool RequestUndock(const QString &desktopFile);
void ActivateWindow(uint32_t win);

bool showInPrimary() const;
void setShowInPrimary(bool newShowInPrimary);
Expand Down
11 changes: 11 additions & 0 deletions panels/dock/taskmanager/taskmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@

#ifdef BUILD_WITH_X11
#include "x11windowmonitor.h"
#include "x11utils.h"
#endif

Q_LOGGING_CATEGORY(taskManagerLog, "dde.shell.dock.taskmanager", QtDebugMsg)
Expand Down Expand Up @@ -407,6 +408,16 @@ bool TaskManager::windowFullscreen()
return m_windowFullscreen;
}

void TaskManager::activateWindow(uint32_t windowID)
{
#ifdef BUILD_WITH_X11
X11Utils::instance()->setActiveWindow(static_cast<xcb_window_t>(windowID));
#else
qWarning() << "activateWindow not supported on this platform";
Q_UNUSED(windowID)
#endif
}

D_APPLET_CLASS(TaskManager)
}

Expand Down
1 change: 1 addition & 0 deletions panels/dock/taskmanager/taskmanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ class TaskManager : public DS_NAMESPACE::DContainment, public AbstractTaskManage
Q_INVOKABLE void hideItemPreview();

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

Q_SIGNALS:
void dataModelChanged();
Expand Down