diff --git a/plugins/airplane-mode/airplanemodeitem.cpp b/plugins/airplane-mode/airplanemodeitem.cpp index b578c8ca5..165f72431 100644 --- a/plugins/airplane-mode/airplanemodeitem.cpp +++ b/plugins/airplane-mode/airplanemodeitem.cpp @@ -58,9 +58,9 @@ AirplaneModeItem::AirplaneModeItem(QWidget *parent) m_applet->setEnabled(enable); refreshIcon(); - if (!enable) + if (!enable || !Utils::SettingValue("com.deepin.dde.dock.module.airplane-mode", "/com/deepin/dde/dock/module/airplane-mode/", "enable", true).toBool()) emit removeItem(); - else + else if (Utils::SettingValue("com.deepin.dde.dock.module.airplane-mode", "/com/deepin/dde/dock/module/airplane-mode/", "enable", true).toBool()) emit addItem(); updateTips(); diff --git a/plugins/airplane-mode/airplanemodeplugin.cpp b/plugins/airplane-mode/airplanemodeplugin.cpp index 507ef3bb9..260ecb115 100644 --- a/plugins/airplane-mode/airplanemodeplugin.cpp +++ b/plugins/airplane-mode/airplanemodeplugin.cpp @@ -147,5 +147,3 @@ void AirplaneModePlugin::addPlugin() m_proxyInter->itemAdded(this, AIRPLANEMODE_KEY); m_proxyInter->saveValue(this, STATE_KEY, true); } - - diff --git a/plugins/tray/system-trays/systemtrayitem.cpp b/plugins/tray/system-trays/systemtrayitem.cpp index 6dc8ff29b..cb8b9b29a 100644 --- a/plugins/tray/system-trays/systemtrayitem.cpp +++ b/plugins/tray/system-trays/systemtrayitem.cpp @@ -22,11 +22,15 @@ #include "systemtrayitem.h" #include "utils.h" +#include + + #include #include #include +using DBusAirplaneMode = com::deepin::daemon::AirplaneMode; Dock::Position SystemTrayItem::DockPosition = Dock::Position::Top; QPointer SystemTrayItem::PopupWindow = nullptr; @@ -488,6 +492,18 @@ void SystemTrayItem::onGSettingsChanged(const QString &key) { if (m_gsettings && m_gsettings->keys().contains("enable")) { const bool visible = m_gsettings->get("enable").toBool(); + + // 飞行模式显示条件: gsettings为true且飞行模式已开启 + DBusAirplaneMode airplaneBus("com.deepin.daemon.AirplaneMode", + "/com/deepin/daemon/AirplaneMode", + QDBusConnection::systemBus(), + this); + if (m_pluginInter && m_pluginInter->pluginName() == "airplane-mode" && !airplaneBus.enabled()) { + setVisible(false); + emit itemVisibleChanged(false); + return; + } + setVisible(visible); emit itemVisibleChanged(visible); } diff --git a/plugins/tray/system-trays/systemtrayscontroller.cpp b/plugins/tray/system-trays/systemtrayscontroller.cpp index 4f33c682c..5b0f2d9cf 100644 --- a/plugins/tray/system-trays/systemtrayscontroller.cpp +++ b/plugins/tray/system-trays/systemtrayscontroller.cpp @@ -23,9 +23,13 @@ #include "pluginsiteminterface.h" #include "utils.h" +#include + #include #include +using DBusAirplaneMode = com::deepin::daemon::AirplaneMode; + SystemTraysController::SystemTraysController(QObject *parent) : AbstractPluginsController(parent) { @@ -36,12 +40,20 @@ void SystemTraysController::itemAdded(PluginsItemInterface * const itemInter, co { QMap> &mPluginsMap = pluginsMap(); + SystemTrayItem *item = nullptr; + // check if same item added if (mPluginsMap.contains(itemInter)) - if (mPluginsMap[itemInter].contains(itemKey)) - return; + if (mPluginsMap[itemInter].contains(itemKey)) { + if (itemKey != "airplane-mode-key") + return; + + item = static_cast(pluginItemAt(itemInter, itemKey)); + } + + if (!item) + item = new SystemTrayItem(itemInter, itemKey); - SystemTrayItem *item = new SystemTrayItem(itemInter, itemKey); connect(item, &SystemTrayItem::itemVisibleChanged, this, [=] (bool visible){ if (visible) { emit pluginItemAdded(itemKey, item); @@ -53,9 +65,22 @@ void SystemTraysController::itemAdded(PluginsItemInterface * const itemInter, co mPluginsMap[itemInter][itemKey] = item; + if (itemInter->pluginName() == "airplane-mode") { + // 飞行模式显示条件: gsettings为true且飞行模式已开启 + DBusAirplaneMode airplaneBus("com.deepin.daemon.AirplaneMode", + "/com/deepin/daemon/AirplaneMode", + QDBusConnection::systemBus(), + this); + if (!Utils::SettingValue(QString("com.deepin.dde.dock.module.airplane-mode"), QByteArray(), "enable", true).toBool() || !airplaneBus.enabled()) { + emit pluginItemRemoved(itemKey, item); + return; + } + } + // 隐藏的插件不加入到布局中 - if (Utils::SettingValue(QString("com.deepin.dde.dock.module.") + itemInter->pluginName(), QByteArray(), "enable", true).toBool()) + if (Utils::SettingValue(QString("com.deepin.dde.dock.module.") + itemInter->pluginName(), QByteArray(), "enable", true).toBool()) { emit pluginItemAdded(itemKey, item); + } } void SystemTraysController::itemUpdate(PluginsItemInterface * const itemInter, const QString &itemKey)