diff --git a/panels/dock/CMakeLists.txt b/panels/dock/CMakeLists.txt index 3909c5f73..8fd5e6213 100644 --- a/panels/dock/CMakeLists.txt +++ b/panels/dock/CMakeLists.txt @@ -30,6 +30,8 @@ file( waylanddockhelper.cpp loadtrayplugins.h loadtrayplugins.cpp + launcherhelper.h + launcherhelper.cpp ) # Old dbus interface compatible diff --git a/panels/dock/MenuHelper.qml b/panels/dock/MenuHelper.qml index f59859322..4a0df521f 100644 --- a/panels/dock/MenuHelper.qml +++ b/panels/dock/MenuHelper.qml @@ -5,6 +5,7 @@ pragma Singleton import QtQuick import Qt.labs.platform +import org.deepin.ds.dock.helper 1.0 Item { property Menu activeMenu: null @@ -12,6 +13,8 @@ Item { if (activeMenu) { activeMenu.close() } + // Hide launcher when opening dock menu + LauncherHelper.hideLauncher() menu.open() menu.aboutToHide.connect(() => { activeMenu = null }) activeMenu = menu diff --git a/panels/dock/dockpanel.cpp b/panels/dock/dockpanel.cpp index 7185f972b..76d8cb192 100644 --- a/panels/dock/dockpanel.cpp +++ b/panels/dock/dockpanel.cpp @@ -16,12 +16,15 @@ #include "dockfrontadaptor.h" #include "dockdaemonadaptor.h" #include "loadtrayplugins.h" +#include "launcherhelper.h" #include #include #include #include #include +#include +#include #include #define SETTINGS DockSettings::instance() @@ -54,6 +57,17 @@ bool DockPanel::load() bool DockPanel::init() { + // Register LauncherHelper as QML singleton (only once) + // Use a separate namespace to avoid conflicts with auto-generated registrations + static bool registered = false; + if (!registered) { + qmlRegisterSingletonType("org.deepin.ds.dock.helper", 1, 0, "LauncherHelper", + [](QQmlEngine *, QJSEngine *) -> QObject * { + return LauncherHelper::instance(); + }); + registered = true; + } + DockAdaptor* adaptor = new DockAdaptor(this); Q_UNUSED(adaptor) QDBusConnection::sessionBus().registerService("org.deepin.ds.Dock"); diff --git a/panels/dock/launcherhelper.cpp b/panels/dock/launcherhelper.cpp new file mode 100644 index 000000000..6b90573bc --- /dev/null +++ b/panels/dock/launcherhelper.cpp @@ -0,0 +1,46 @@ +// SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. +// +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "launcherhelper.h" + +#include +#include +#include + +Q_LOGGING_CATEGORY(launcherHelper, "org.deepin.dde.shell.dock.launcherhelper") + +namespace dock { + +LauncherHelper* LauncherHelper::instance() +{ + static LauncherHelper* helper = new LauncherHelper(); + return helper; +} + +LauncherHelper::LauncherHelper(QObject *parent) + : QObject(parent) +{ +} + +void LauncherHelper::hideLauncher() +{ + // Call dde-launchpad's D-Bus interface to hide the launcher + QDBusInterface launcherInterface("org.deepin.dde.Launcher1", + "/org/deepin/dde/Launcher1", + "org.deepin.dde.Launcher1"); + + if (!launcherInterface.isValid()) { + qCDebug(launcherHelper) << "Launcher D-Bus interface is not available"; + return; + } + + QDBusMessage reply = launcherInterface.call("Hide"); + if (reply.type() == QDBusMessage::ErrorMessage) { + qCWarning(launcherHelper) << "Failed to hide launcher:" << reply.errorMessage(); + } else { + qCDebug(launcherHelper) << "Successfully requested launcher to hide"; + } +} + +} diff --git a/panels/dock/launcherhelper.h b/panels/dock/launcherhelper.h new file mode 100644 index 000000000..491c614e2 --- /dev/null +++ b/panels/dock/launcherhelper.h @@ -0,0 +1,25 @@ +// SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. +// +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#include + +namespace dock { + +class LauncherHelper : public QObject +{ + Q_OBJECT + +public: + static LauncherHelper* instance(); + + Q_INVOKABLE void hideLauncher(); + +private: + explicit LauncherHelper(QObject *parent = nullptr); + ~LauncherHelper() override = default; +}; + +}