From 6354629a82c2950e54fe48db07cacc4c130b85b3 Mon Sep 17 00:00:00 2001 From: donghualin Date: Tue, 29 Nov 2022 15:33:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BB=BB=E5=8A=A1=E6=A0=8F=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E5=90=AF=E5=8A=A8=E6=96=B9=E5=BC=8F=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=B8=BAstartManager=E6=9D=A5=E5=90=AF=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在dock类的active方法中,调用ApplicationManager类对象的LaunchApp方法来启动应用 Log: Influence: 从任务栏启动应用 Task: https://pms.uniontech.com/task-view-211667.html Change-Id: I354b583b15932046a807b33c3d7cb253a59938d7 --- src/modules/dock/dock.cpp | 8 +++++--- src/modules/dock/dock.h | 4 +++- src/modules/dock/dockmanager.cpp | 5 +++-- src/modules/dock/dockmanager.h | 3 ++- src/modules/dock/entry.cpp | 3 ++- src/service/impl/application_manager.cpp | 12 ++++++------ src/service/impl/application_manager.h | 6 +++--- 7 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/modules/dock/dock.cpp b/src/modules/dock/dock.cpp index fa7de80..60c1c77 100644 --- a/src/modules/dock/dock.cpp +++ b/src/modules/dock/dock.cpp @@ -29,6 +29,7 @@ #include "x11manager.h" #include "windowinfobase.h" #include "dbusplasmawindow.h" +#include "impl/application_manager.h" #include "macro.h" @@ -39,7 +40,7 @@ #define SETTING DockSettings::instance() #define XCB XCBUtils::instance() -Dock::Dock(QObject *parent) +Dock::Dock(ApplicationManager *applicationManager, QObject *parent) : SynModule(parent) , m_entriesSum(0) , m_windowIdentify(new WindowIdentify(this)) @@ -52,6 +53,7 @@ Dock::Dock(QObject *parent) , m_windowOperateMutex(QMutex(QMutex::NonRecursive)) , m_showRecent(false) , m_showMultiWindow(false) + , m_applicationManager(applicationManager) { registeModule("dock"); @@ -1146,7 +1148,7 @@ void Dock::detachWindow(WindowInfoBase *info) */ void Dock::launchApp(const QString desktopFile, uint32_t timestamp, QStringList files) { - m_dbusHandler->launchApp(desktopFile, timestamp, files); + m_applicationManager->LaunchApp(desktopFile, timestamp, files, false); } /** @@ -1157,7 +1159,7 @@ void Dock::launchApp(const QString desktopFile, uint32_t timestamp, QStringList */ void Dock::launchAppAction(const QString desktopFile, QString action, uint32_t timestamp) { - m_dbusHandler->launchAppAction(desktopFile, action, timestamp); + m_applicationManager->LaunchAppAction(desktopFile, action ,timestamp, false); } /** diff --git a/src/modules/dock/dock.h b/src/modules/dock/dock.h index 3279d01..6e7d35a 100644 --- a/src/modules/dock/dock.h +++ b/src/modules/dock/dock.h @@ -38,6 +38,7 @@ class WaylandManager; class X11Manager; class WindowInfoK; class WindowInfoX; +class ApplicationManager; enum class HideState { @@ -51,7 +52,7 @@ class Dock : public SynModule { Q_OBJECT public: - explicit Dock(QObject *parent = nullptr); + explicit Dock(ApplicationManager *applicationManager, QObject *parent = nullptr); ~Dock(); bool dockEntry(Entry *entry, bool moveToEnd = false); @@ -202,6 +203,7 @@ private: QMutex m_windowOperateMutex; // 窗口合并或拆分锁 bool m_showRecent; bool m_showMultiWindow; + ApplicationManager *m_applicationManager; }; #endif // DOCK_H diff --git a/src/modules/dock/dockmanager.cpp b/src/modules/dock/dockmanager.cpp index b053b84..ccd1c7c 100644 --- a/src/modules/dock/dockmanager.cpp +++ b/src/modules/dock/dockmanager.cpp @@ -21,14 +21,15 @@ #include "dockmanager.h" #include "dock.h" +#include "impl/application_manager.h" #include #include #include -DockManager::DockManager(QObject *parent) +DockManager::DockManager(ApplicationManager *parent) : QObject(parent) - , m_dock(new Dock(this)) + , m_dock(new Dock(parent, this)) { qInfo() << "DockManager"; m_adaptor = new DBusAdaptorDock(m_dock); diff --git a/src/modules/dock/dockmanager.h b/src/modules/dock/dockmanager.h index 4b234ce..9972af2 100644 --- a/src/modules/dock/dockmanager.h +++ b/src/modules/dock/dockmanager.h @@ -27,13 +27,14 @@ #include class Dock; +class ApplicationManager; // 任务栏管理类 class DockManager : public QObject { Q_OBJECT public: - explicit DockManager(QObject *parent = nullptr); + explicit DockManager(ApplicationManager *parent = nullptr); ~DockManager(); private: diff --git a/src/modules/dock/entry.cpp b/src/modules/dock/entry.cpp index 46d1883..833f36f 100644 --- a/src/modules/dock/entry.cpp +++ b/src/modules/dock/entry.cpp @@ -570,7 +570,8 @@ bool Entry::attachWindow(WindowInfoBase *info) void Entry::launchApp(uint32_t timestamp) { - m_dock->launchApp(m_app->getFileName(), timestamp, QStringList()); + if (m_app) + m_dock->launchApp(m_app->getFileName(), timestamp, QStringList()); } bool Entry::containsWindow(XWindow xid) diff --git a/src/service/impl/application_manager.cpp b/src/service/impl/application_manager.cpp index 7c56ec8..f82b979 100644 --- a/src/service/impl/application_manager.cpp +++ b/src/service/impl/application_manager.cpp @@ -282,29 +282,29 @@ bool ApplicationManager::IsAutostart(const QString &fileName) return d->startManager->isAutostart(fileName); } -void ApplicationManager::Launch(const QString &desktopFile) +void ApplicationManager::Launch(const QString &desktopFile, bool withMsgCheck) { Q_D(ApplicationManager); - if (!d->checkDMsgUid()) + if (withMsgCheck && !d->checkDMsgUid()) return; d->startManager->launchApp(desktopFile); } -void ApplicationManager::LaunchApp(const QString &desktopFile, uint32_t timestamp, const QStringList &files) +void ApplicationManager::LaunchApp(const QString &desktopFile, uint32_t timestamp, const QStringList &files, bool withMsgCheck) { Q_D(ApplicationManager); - if (!d->checkDMsgUid()) + if (withMsgCheck && !d->checkDMsgUid()) return; d->startManager->launchApp(desktopFile, timestamp, files); } -void ApplicationManager::LaunchAppAction(const QString &desktopFile, const QString &action, uint32_t timestamp) +void ApplicationManager::LaunchAppAction(const QString &desktopFile, const QString &action, uint32_t timestamp, bool withMsgCheck) { Q_D(ApplicationManager); - if (!d->checkDMsgUid()) + if (withMsgCheck && !d->checkDMsgUid()) return; d->startManager->launchAppAction(desktopFile, action, timestamp); diff --git a/src/service/impl/application_manager.h b/src/service/impl/application_manager.h index 2afe3a0..2abae21 100644 --- a/src/service/impl/application_manager.h +++ b/src/service/impl/application_manager.h @@ -71,9 +71,9 @@ public Q_SLOTS: QStringList AutostartList(); bool IsAutostart(const QString &fileName); bool RemoveAutostart(const QString &fileName); - void Launch(const QString &desktopFile); - void LaunchApp(const QString &desktopFile, uint32_t timestamp, const QStringList &files); - void LaunchAppAction(const QString &desktopFile, const QString &action, uint32_t timestamp); + void Launch(const QString &desktopFile, bool withMsgCheck = true); + void LaunchApp(const QString &desktopFile, uint32_t timestamp, const QStringList &files, bool withMsgCheck = true); + void LaunchAppAction(const QString &desktopFile, const QString &action, uint32_t timestamp, bool withMsgCheck = true); protected: ApplicationManager(QObject *parent = nullptr);