diff --git a/plugins/dde-dock/airplane-mode/airplanemodeitem.cpp b/plugins/dde-dock/airplane-mode/airplanemodeitem.cpp index 89b81d524..e19664b51 100644 --- a/plugins/dde-dock/airplane-mode/airplanemodeitem.cpp +++ b/plugins/dde-dock/airplane-mode/airplanemodeitem.cpp @@ -7,7 +7,6 @@ #include "constants.h" #include "tipswidget.h" -#include "xdgactivation.h" #include @@ -119,16 +118,8 @@ void AirplaneModeItem::invokeMenuItem(const QString menuId, const bool checked) if (menuId == SHIFT) { AMC_PTR->toggle(); } else if (menuId == SETTINGS) { - auto *activation = new tray::XdgActivation(this); - connect(activation, &tray::XdgActivation::tokenReady, this, [activation](const QString &token) { - QStringList args {"--by-user", "org.deepin.dde.control-center"}; - if (!token.isEmpty()) - args << "-e" << "XDG_ACTIVATION_TOKEN=" + token; - args << "--" << "-p" << "network/airplaneMode"; - QProcess::startDetached("dde-am", args); - activation->deleteLater(); - }, Qt::SingleShotConnection); - activation->requestToken(); + QStringList args {"--by-user", "org.deepin.dde.control-center", "--", "-p", "network/airplaneMode"}; + QProcess::startDetached("dde-am", args); Q_EMIT requestHideApplet(); } diff --git a/plugins/dde-dock/bluetooth/bluetoothitem.cpp b/plugins/dde-dock/bluetooth/bluetoothitem.cpp index 7a8eb597e..5ca36ef2f 100644 --- a/plugins/dde-dock/bluetooth/bluetoothitem.cpp +++ b/plugins/dde-dock/bluetooth/bluetoothitem.cpp @@ -10,7 +10,6 @@ #include "constants.h" #include "quickpanelwidget.h" -#include "xdgactivation.h" #include #include @@ -128,16 +127,8 @@ void BluetoothItem::invokeMenuItem(const QString menuId, const bool checked) } m_applet->setAdapterPowered(!m_adapterPowered); } else if (menuId == SETTINGS) { - auto *activation = new tray::XdgActivation(this); - connect(activation, &tray::XdgActivation::tokenReady, this, [activation](const QString &token) { - QStringList args {"--by-user", "org.deepin.dde.control-center"}; - if (!token.isEmpty()) - args << "-e" << "XDG_ACTIVATION_TOKEN=" + token; - args << "--" << "-p" << "device/bluetooth"; - QProcess::startDetached("dde-am", args); - activation->deleteLater(); - }, Qt::SingleShotConnection); - activation->requestToken(); + QStringList args {"--by-user", "org.deepin.dde.control-center", "--", "-p", "device/bluetooth"}; + QProcess::startDetached("dde-am", args); Q_EMIT requestHideApplet(); } } diff --git a/plugins/dde-dock/brightness/brightnessitem.cpp b/plugins/dde-dock/brightness/brightnessitem.cpp index a8e19887d..8a54b4385 100644 --- a/plugins/dde-dock/brightness/brightnessitem.cpp +++ b/plugins/dde-dock/brightness/brightnessitem.cpp @@ -6,7 +6,6 @@ #include "constants.h" #include "brightnessmodel.h" -#include "xdgactivation.h" #include #include @@ -81,16 +80,8 @@ void BrightnessItem::invokeMenuItem(const QString menuId, const bool checked) Q_UNUSED(checked); if (menuId == SETTINGS) { - auto *activation = new tray::XdgActivation(this); - connect(activation, &tray::XdgActivation::tokenReady, this, [activation](const QString &token) { - QStringList args {"--by-user", "org.deepin.dde.control-center"}; - if (!token.isEmpty()) - args << "-e" << "XDG_ACTIVATION_TOKEN=" + token; - args << "--" << "-p" << "display"; - QProcess::startDetached("dde-am", args); - activation->deleteLater(); - }, Qt::SingleShotConnection); - activation->requestToken(); + QStringList args {"--by-user", "org.deepin.dde.control-center", "--", "-p", "display"}; + QProcess::startDetached("dde-am", args); Q_EMIT requestHideApplet(); } diff --git a/plugins/dde-dock/datetime/datetimeplugin.cpp b/plugins/dde-dock/datetime/datetimeplugin.cpp index 6b3523bd7..6cc3f145e 100644 --- a/plugins/dde-dock/datetime/datetimeplugin.cpp +++ b/plugins/dde-dock/datetime/datetimeplugin.cpp @@ -7,7 +7,6 @@ #include "plugins-logging-category.h" #include "regionFormat.h" -#include "xdgactivation.h" #include #include @@ -216,16 +215,8 @@ void DatetimePlugin::invokedMenuItem(const QString &itemKey, const QString &menu Q_UNUSED(checked) if (menuId == "open") { - auto *activation = new tray::XdgActivation(this); - connect(activation, &tray::XdgActivation::tokenReady, this, [activation](const QString &token) { - QStringList args {"--by-user", "org.deepin.dde.control-center"}; - if (!token.isEmpty()) - args << "-e" << "XDG_ACTIVATION_TOKEN=" + token; - args << "--" << "-p" << "datetime"; - QProcess::startDetached("dde-am", args); - activation->deleteLater(); - }, Qt::SingleShotConnection); - activation->requestToken(); + QStringList args {"--by-user", "org.deepin.dde.control-center", "--", "-p", "datetime"}; + QProcess::startDetached("dde-am", args); } else if (menuId == "settings") { const bool is24HourFormat = m_centralWidget->is24HourFormat(); m_centralWidget->set24HourFormat(!is24HourFormat); diff --git a/plugins/dde-dock/dnd-mode/dndmodeitem.cpp b/plugins/dde-dock/dnd-mode/dndmodeitem.cpp index c41b52467..9c03987d7 100644 --- a/plugins/dde-dock/dnd-mode/dndmodeitem.cpp +++ b/plugins/dde-dock/dnd-mode/dndmodeitem.cpp @@ -8,8 +8,6 @@ #include "dndmodecontroller.h" #include "tipswidget.h" -#include "xdgactivation.h" - #include #include @@ -112,16 +110,8 @@ void DndModeItem::invokeMenuItem(const QString menuId, const bool checked) if (menuId == SHIFT) { DndModeController::ref().toggle(); } else if (menuId == SETTINGS) { - auto *activation = new tray::XdgActivation(this); - connect(activation, &tray::XdgActivation::tokenReady, this, [activation](const QString &token) { - QStringList args {"--by-user", "org.deepin.dde.control-center"}; - if (!token.isEmpty()) - args << "-e" << "XDG_ACTIVATION_TOKEN=" + token; - args << "--" << "-p" << "notification"; - QProcess::startDetached("dde-am", args); - activation->deleteLater(); - }, Qt::SingleShotConnection); - activation->requestToken(); + QStringList args {"--by-user", "org.deepin.dde.control-center", "--", "-p", "notification"}; + QProcess::startDetached("dde-am", args); Q_EMIT requestHideApplet(); } diff --git a/plugins/dde-dock/eye-comfort-mode/eyecomfortmodeitem.cpp b/plugins/dde-dock/eye-comfort-mode/eyecomfortmodeitem.cpp index 1fa85205a..957896a17 100644 --- a/plugins/dde-dock/eye-comfort-mode/eyecomfortmodeitem.cpp +++ b/plugins/dde-dock/eye-comfort-mode/eyecomfortmodeitem.cpp @@ -9,7 +9,6 @@ #include "tipswidget.h" #include "quickpanelwidget.h" -#include "xdgactivation.h" #include @@ -187,16 +186,8 @@ void EyeComfortModeItem::invokeMenuItem(const QString menuId, const bool checked if (menuId == SHIFT) { EyeComfortModeController::ref().toggle(); } else if (menuId == SETTINGS) { - auto *activation = new tray::XdgActivation(this); - connect(activation, &tray::XdgActivation::tokenReady, this, [activation](const QString &token) { - QStringList args {"--by-user", "org.deepin.dde.control-center"}; - if (!token.isEmpty()) - args << "-e" << "XDG_ACTIVATION_TOKEN=" + token; - args << "--" << "-p" << "display"; - QProcess::startDetached("dde-am", args); - activation->deleteLater(); - }, Qt::SingleShotConnection); - activation->requestToken(); + QStringList args {"--by-user", "org.deepin.dde.control-center", "--", "-p", "display"}; + QProcess::startDetached("dde-am", args); Q_EMIT requestHideApplet(); } } diff --git a/plugins/dde-dock/keyboard-layout/dbusadaptors.cpp b/plugins/dde-dock/keyboard-layout/dbusadaptors.cpp index 8e02e036a..66cf99a3d 100644 --- a/plugins/dde-dock/keyboard-layout/dbusadaptors.cpp +++ b/plugins/dde-dock/keyboard-layout/dbusadaptors.cpp @@ -7,7 +7,6 @@ #include "fcitxinputmethoditem.h" #include "plugins-logging-category.h" -#include "xdgactivation.h" #include @@ -177,16 +176,8 @@ void DBusAdaptors::refreshMenuSelection() void DBusAdaptors::handleActionTriggered(QAction *action) { if (action == m_addLayoutAction) { - auto *activation = new tray::XdgActivation(this); - connect(activation, &tray::XdgActivation::tokenReady, this, [activation](const QString &token) { - QStringList args {"--by-user", "org.deepin.dde.control-center"}; - if (!token.isEmpty()) - args << "-e" << "XDG_ACTIVATION_TOKEN=" + token; - args << "--" << "-p" << "keyboard/Keyboard Layout/Add Keyboard Layout"; - QProcess::startDetached("dde-am", args); - activation->deleteLater(); - }, Qt::SingleShotConnection); - activation->requestToken(); + QStringList args {"--by-user", "org.deepin.dde.control-center", "--", "-p", "keyboard/Keyboard Layout/Add Keyboard Layout"}; + QProcess::startDetached("dde-am", args); } const QString layout = action->objectName(); diff --git a/plugins/dde-dock/notification/notificationplugin.cpp b/plugins/dde-dock/notification/notificationplugin.cpp index 72d926199..2225cd169 100644 --- a/plugins/dde-dock/notification/notificationplugin.cpp +++ b/plugins/dde-dock/notification/notificationplugin.cpp @@ -3,7 +3,6 @@ // SPDX-License-Identifier: LGPL-3.0-or-later #include "notificationplugin.h" -#include "xdgactivation.h" #include @@ -134,16 +133,8 @@ void NotificationPlugin::invokedMenuItem(const QString &itemKey, const QString & if (menuId == TOGGLE_DND) { m_notification->setDndMode(!m_notification->dndMode()); } else if (menuId == NOTIFICATION_SETTINGS) { - auto *activation = new tray::XdgActivation(this); - connect(activation, &tray::XdgActivation::tokenReady, this, [activation](const QString &token) { - QStringList args {"--by-user", "org.deepin.dde.control-center"}; - if (!token.isEmpty()) - args << "-e" << "XDG_ACTIVATION_TOKEN=" + token; - args << "--" << "-p" << "notification"; - QProcess::startDetached("dde-am", args); - activation->deleteLater(); - }, Qt::SingleShotConnection); - activation->requestToken(); + QStringList args {"--by-user", "org.deepin.dde.control-center", "--", "-p", "notification"}; + QProcess::startDetached("dde-am", args); } } diff --git a/plugins/dde-dock/power/powerplugin.cpp b/plugins/dde-dock/power/powerplugin.cpp index 54efdcee8..168a51bf1 100644 --- a/plugins/dde-dock/power/powerplugin.cpp +++ b/plugins/dde-dock/power/powerplugin.cpp @@ -9,7 +9,6 @@ #include "dbus/dbusaccount.h" #include "plugins-logging-category.h" -#include "xdgactivation.h" #include @@ -143,16 +142,8 @@ void PowerPlugin::invokedMenuItem(const QString &itemKey, const QString &menuId, Q_UNUSED(checked) if (menuId == "power") { - auto *activation = new tray::XdgActivation(this); - connect(activation, &tray::XdgActivation::tokenReady, this, [activation](const QString &token) { - QStringList args {"--by-user", "org.deepin.dde.control-center"}; - if (!token.isEmpty()) - args << "-e" << "XDG_ACTIVATION_TOKEN=" + token; - args << "--" << "-p" << "power"; - QProcess::startDetached("dde-am", args); - activation->deleteLater(); - }, Qt::SingleShotConnection); - activation->requestToken(); + QStringList args {"--by-user", "org.deepin.dde.control-center", "--", "-p", "power"}; + QProcess::startDetached("dde-am", args); } } diff --git a/plugins/dde-dock/shutdown/shutdownplugin.cpp b/plugins/dde-dock/shutdown/shutdownplugin.cpp index 278e61db3..4720b1785 100644 --- a/plugins/dde-dock/shutdown/shutdownplugin.cpp +++ b/plugins/dde-dock/shutdown/shutdownplugin.cpp @@ -9,7 +9,6 @@ #include "./dbus/org_deepin_dde_sessionmanager.h" #include "plugins-logging-category.h" -#include "xdgactivation.h" #include #include @@ -309,16 +308,8 @@ void ShutdownPlugin::invokedMenuItem(const QString &itemKey, const QString &menu QCoreApplication::processEvents(QEventLoop::AllEvents, 200); if (menuId == "power") { - auto *activation = new tray::XdgActivation(this); - connect(activation, &tray::XdgActivation::tokenReady, this, [activation](const QString &token) { - QStringList args {"--by-user", "org.deepin.dde.control-center"}; - if (!token.isEmpty()) - args << "-e" << "XDG_ACTIVATION_TOKEN=" + token; - args << "--" << "-p" << "power"; - QProcess::startDetached("dde-am", args); - activation->deleteLater(); - }, Qt::SingleShotConnection); - activation->requestToken(); + QStringList args {"--by-user", "org.deepin.dde.control-center", "--", "-p", "power"}; + QProcess::startDetached("dde-am", args); } else if (menuId == "Lock") { if (QFile::exists(ICBC_CONF_FILE)) { QDBusMessage send = QDBusMessage::createMethodCall("org.deepin.dde.LockFront1", "/org/deepin/dde/LockFront1", "org.deepin.dde.LockFront1", "SwitchTTYAndShow"); diff --git a/plugins/dde-dock/sound/soundview.cpp b/plugins/dde-dock/sound/soundview.cpp index 290a3b2a9..c7a38b0ce 100644 --- a/plugins/dde-dock/sound/soundview.cpp +++ b/plugins/dde-dock/sound/soundview.cpp @@ -9,7 +9,6 @@ #include "utils.h" #include "soundmodel.h" -#include "xdgactivation.h" #include #include @@ -108,16 +107,8 @@ void SoundView::invokeMenuItem(const QString menuId, const bool checked) if (menuId == MUTE) { SoundController::ref().SetMuteQueued(!SoundModel::ref().isMute()); } else if (menuId == SETTINGS) { - auto *activation = new tray::XdgActivation(this); - connect(activation, &tray::XdgActivation::tokenReady, this, [activation](const QString &token) { - QStringList args {"--by-user", "org.deepin.dde.control-center"}; - if (!token.isEmpty()) - args << "-e" << "XDG_ACTIVATION_TOKEN=" + token; - args << "--" << "-p" << "sound"; - QProcess::startDetached("dde-am", args); - activation->deleteLater(); - }, Qt::SingleShotConnection); - activation->requestToken(); + QStringList args {"--by-user", "org.deepin.dde.control-center", "--", "-p", "sound"}; + QProcess::startDetached("dde-am", args); Q_EMIT requestHideApplet(); } } diff --git a/plugins/dde-network-display-ui/plugins/dock-wirelesscasting-plugin/src/wirelesscastingitem.cpp b/plugins/dde-network-display-ui/plugins/dock-wirelesscasting-plugin/src/wirelesscastingitem.cpp index 145772629..2e3c5c8c9 100644 --- a/plugins/dde-network-display-ui/plugins/dock-wirelesscasting-plugin/src/wirelesscastingitem.cpp +++ b/plugins/dde-network-display-ui/plugins/dock-wirelesscasting-plugin/src/wirelesscastingitem.cpp @@ -11,7 +11,6 @@ #include -#include "xdgactivation.h" #include @@ -221,16 +220,8 @@ void WirelessCastingItem::invokeMenuItem(const QString menuId, const bool checke { Q_UNUSED(checked); if (menuId == SETTINGS) { - auto *activation = new tray::XdgActivation(this); - connect(activation, &tray::XdgActivation::tokenReady, this, [activation](const QString &token) { - QStringList args {"--by-user", "org.deepin.dde.control-center"}; - if (!token.isEmpty()) - args << "-e" << "XDG_ACTIVATION_TOKEN=" + token; - args << "--" << "-p" << "display"; - QProcess::startDetached("dde-am", args); - activation->deleteLater(); - }, Qt::SingleShotConnection); - activation->requestToken(); + QStringList args {"--by-user", "org.deepin.dde.control-center", "--", "-p", "display"}; + QProcess::startDetached("dde-am", args); Q_EMIT requestHideApplet(); } diff --git a/src/loader/pluginitem.cpp b/src/loader/pluginitem.cpp index 3f26800e6..7514ce59a 100644 --- a/src/loader/pluginitem.cpp +++ b/src/loader/pluginitem.cpp @@ -8,10 +8,14 @@ #include "widgetplugin.h" #include "dockcontextmenu.h" +#include + #include #include #include #include +#include +#include const static QString DockQuickPlugins = "Dock_Quick_Plugins"; @@ -39,7 +43,18 @@ PluginItem::PluginItem(PluginsItemInterface *pluginItemInterface, const QString if (actionStr == Dock::dockMenuItemId || actionStr == Dock::unDockMenuItemId) { m_dbusProxy->setItemOnDock(DockQuickPlugins, m_itemKey, actionStr == Dock::dockMenuItemId); } else { - m_pluginsItemInterface->invokedMenuItem(m_itemKey, action->data().toString(), action->isCheckable() ? action->isChecked() : true); + const QString menuId = action->data().toString(); + const bool checked = action->isCheckable() ? action->isChecked() : true; + auto *activation = new tray::XdgActivation(this); + connect(activation, &tray::XdgActivation::tokenReady, this, [this, activation, menuId, checked](const QString &token) { + if (!token.isEmpty()) + qputenv("XDG_ACTIVATION_TOKEN", token.toUtf8()); + m_pluginsItemInterface->invokedMenuItem(m_itemKey, menuId, checked); + if (!token.isEmpty()) + qunsetenv("XDG_ACTIVATION_TOKEN"); + activation->deleteLater(); + }, Qt::SingleShotConnection); + activation->requestToken(); } }); } @@ -372,7 +387,17 @@ bool PluginItem::executeCommand() QStringList commandList = command.split(" "); QString program = commandList.takeFirst(); // 剩下是参数 - QProcess::startDetached(program, commandList); + auto *activation = new tray::XdgActivation(this); + connect(activation, &tray::XdgActivation::tokenReady, this, [activation, program, commandList](const QString &token) { + QProcess process; + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); + if (!token.isEmpty()) + env.insert("XDG_ACTIVATION_TOKEN", token); + process.setProcessEnvironment(env); + process.startDetached(program, commandList); + activation->deleteLater(); + }, Qt::SingleShotConnection); + activation->requestToken(); return true; } return false;