fix: 修复飞行模式显示问题

1.gsettings不存在的情况下,或者值为true的情况下,飞行模式表现和需求一致。
2.如果gsettings值存在且为false,那么飞行模式始终不显示。
3.gsettings的值除手动修改外,不应有其他修改方式

Log: 修复飞行模式显示问题
Bug: https://pms.uniontech.com/zentao/bug-view-112804.html
Influence: 任务栏-飞行模式插件-显示效果与需求保持一致
Change-Id: Iec07689cc77db8b80e6974d6171511a97e22671d
This commit is contained in:
fanpengcheng 2022-02-15 10:19:12 +08:00
parent 076f96f753
commit 406fb15ebf
6 changed files with 34 additions and 99 deletions

View File

@ -57,12 +57,7 @@ AirplaneModeItem::AirplaneModeItem(QWidget *parent)
connect(m_airplaneModeInter, &DBusAirplaneMode::EnabledChanged, this, [this](bool enable) {
m_applet->setEnabled(enable);
refreshIcon();
if (!enable || !Utils::SettingValue("com.deepin.dde.dock.module.airplane-mode", "/com/deepin/dde/dock/module/airplane-mode/", "enable", true).toBool())
emit removeItem();
else if (Utils::SettingValue("com.deepin.dde.dock.module.airplane-mode", "/com/deepin/dde/dock/module/airplane-mode/", "enable", true).toBool())
emit addItem();
Q_EMIT airplaneEnableChanged(enable);
updateTips();
});
@ -153,6 +148,11 @@ void AirplaneModeItem::updateTips()
m_tipsLabel->setText(tr("Airplane mode disabled"));
}
bool AirplaneModeItem::airplaneEnable()
{
return m_airplaneModeInter->enabled();
}
void AirplaneModeItem::resizeEvent(QResizeEvent *e)
{
QWidget::resizeEvent(e);

View File

@ -48,13 +48,14 @@ public:
void refreshIcon();
void updateTips();
bool airplaneEnable();
protected:
void resizeEvent(QResizeEvent *e);
void paintEvent(QPaintEvent *e);
signals:
void removeItem();
void addItem();
void airplaneEnableChanged(bool enable);
private:
Dock::TipsWidget *m_tipsLabel;

View File

@ -30,8 +30,7 @@ AirplaneModePlugin::AirplaneModePlugin(QObject *parent)
: QObject(parent)
, m_item(new AirplaneModeItem)
{
connect(m_item, &AirplaneModeItem::removeItem, this, &AirplaneModePlugin::removePlugin);
connect(m_item, &AirplaneModeItem::addItem, this, &AirplaneModePlugin::addPlugin);
connect(m_item, &AirplaneModeItem::airplaneEnableChanged, this, &AirplaneModePlugin::onAirplaneEnableChanged);
}
const QString AirplaneModePlugin::pluginName() const
@ -50,11 +49,15 @@ void AirplaneModePlugin::init(PluginProxyInterface *proxyInter)
if (!pluginIsDisable())
m_proxyInter->itemAdded(this, AIRPLANEMODE_KEY);
refreshAirplaneEnableState();
}
void AirplaneModePlugin::pluginStateSwitched()
{
m_proxyInter->saveValue(this, STATE_KEY, pluginIsDisable());
refreshAirplaneEnableState();
}
bool AirplaneModePlugin::pluginIsDisable()
@ -80,35 +83,6 @@ QWidget *AirplaneModePlugin::itemTipsWidget(const QString &itemKey)
return nullptr;
}
QWidget *AirplaneModePlugin::itemPopupApplet(const QString &itemKey)
{
return nullptr; // 禁用左键点击功能
if (itemKey == AIRPLANEMODE_KEY) {
return m_item->popupApplet();
}
return nullptr;
}
const QString AirplaneModePlugin::itemContextMenu(const QString &itemKey)
{
return QString(); // 禁用右键菜单
if (itemKey == AIRPLANEMODE_KEY) {
return m_item->contextMenu();
}
return QString();
}
void AirplaneModePlugin::invokedMenuItem(const QString &itemKey, const QString &menuId, const bool checked)
{
if (itemKey == AIRPLANEMODE_KEY) {
m_item->invokeMenuItem(menuId, checked);
}
}
int AirplaneModePlugin::itemSortKey(const QString &itemKey)
{
const QString key = QString("pos_%1_%2").arg(itemKey).arg(Dock::Efficient);
@ -130,20 +104,24 @@ void AirplaneModePlugin::refreshIcon(const QString &itemKey)
}
}
void AirplaneModePlugin::removePlugin()
void AirplaneModePlugin::refreshAirplaneEnableState()
{
onAirplaneEnableChanged(m_item->airplaneEnable());
}
void AirplaneModePlugin::onAirplaneEnableChanged(bool enable)
{
if (!m_proxyInter)
return;
m_proxyInter->itemRemoved(this, AIRPLANEMODE_KEY);
m_proxyInter->saveValue(this, STATE_KEY, false);
if (enable) {
m_proxyInter->itemAdded(this, AIRPLANEMODE_KEY);
m_proxyInter->saveValue(this, STATE_KEY, true);
}
else {
m_proxyInter->itemRemoved(this, AIRPLANEMODE_KEY);
m_proxyInter->saveValue(this, STATE_KEY, false);
}
}
void AirplaneModePlugin::addPlugin()
{
if (!m_proxyInter)
return;
m_proxyInter->itemAdded(this, AIRPLANEMODE_KEY);
m_proxyInter->saveValue(this, STATE_KEY, true);
}

View File

@ -43,16 +43,13 @@ public:
bool pluginIsDisable() Q_DECL_OVERRIDE;
QWidget *itemWidget(const QString &itemKey) Q_DECL_OVERRIDE;
QWidget *itemTipsWidget(const QString &itemKey) Q_DECL_OVERRIDE;
QWidget *itemPopupApplet(const QString &itemKey) Q_DECL_OVERRIDE;
const QString itemContextMenu(const QString &itemKey) Q_DECL_OVERRIDE;
void invokedMenuItem(const QString &itemKey, const QString &menuId, const bool checked) Q_DECL_OVERRIDE;
int itemSortKey(const QString &itemKey) Q_DECL_OVERRIDE;
void setSortKey(const QString &itemKey, const int order) Q_DECL_OVERRIDE;
void refreshIcon(const QString &itemKey) Q_DECL_OVERRIDE;
public slots:
void removePlugin();
void addPlugin();
void refreshAirplaneEnableState();
void onAirplaneEnableChanged(bool enable);
private:
AirplaneModeItem *m_item;

View File

@ -22,15 +22,11 @@
#include "systemtrayitem.h"
#include "utils.h"
#include <com_deepin_daemon_airplanemode.h>
#include <QProcess>
#include <QDebug>
#include <xcb/xproto.h>
using DBusAirplaneMode = com::deepin::daemon::AirplaneMode;
Dock::Position SystemTrayItem::DockPosition = Dock::Position::Top;
QPointer<DockPopupWindow> SystemTrayItem::PopupWindow = nullptr;
@ -492,18 +488,6 @@ 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);
}

View File

@ -23,13 +23,9 @@
#include "pluginsiteminterface.h"
#include "utils.h"
#include <com_deepin_daemon_airplanemode.h>
#include <QDebug>
#include <QDir>
using DBusAirplaneMode = com::deepin::daemon::AirplaneMode;
SystemTraysController::SystemTraysController(QObject *parent)
: AbstractPluginsController(parent)
{
@ -40,20 +36,12 @@ void SystemTraysController::itemAdded(PluginsItemInterface * const itemInter, co
{
QMap<PluginsItemInterface *, QMap<QString, QObject *>> &mPluginsMap = pluginsMap();
SystemTrayItem *item = nullptr;
// check if same item added
if (mPluginsMap.contains(itemInter))
if (mPluginsMap[itemInter].contains(itemKey)) {
if (itemKey != "airplane-mode-key")
return;
item = static_cast<SystemTrayItem *>(pluginItemAt(itemInter, itemKey));
}
if (!item)
item = new SystemTrayItem(itemInter, itemKey);
if (mPluginsMap[itemInter].contains(itemKey))
return;
SystemTrayItem *item = new SystemTrayItem(itemInter, itemKey);
connect(item, &SystemTrayItem::itemVisibleChanged, this, [=] (bool visible){
if (visible) {
emit pluginItemAdded(itemKey, item);
@ -65,22 +53,9 @@ 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)