mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-03 00:15:21 +00:00
fix: 新增或移除显示屏插件自动添加或删除
增加显示屏变化的信号,当新增或删除显示屏的时候,根据信号来移除或新增插件 Log: Influence: 拔出显示屏后再插入显示屏,观察任务栏快捷面板中的亮度设置插件是否发生变化 Task: https://pms.uniontech.com/task-view-220489.html Change-Id: If093e8c2de7e6574be7cdecd5f44f7b379cfb886
This commit is contained in:
parent
9ebbd85dde
commit
5ad52ae407
@ -43,16 +43,12 @@ BrightnessModel::BrightnessModel(QObject *parent)
|
||||
QDBusInterface dbusInter(serviceName, servicePath, serviceInterface, QDBusConnection::sessionBus());
|
||||
if (dbusInter.isValid()) {
|
||||
// 读取所有的屏幕的信息
|
||||
QString primaryScreenName = dbusInter.property("Primary").value<QString>();
|
||||
QList<QDBusObjectPath> paths = dbusInter.property("Monitors").value<QList<QDBusObjectPath>>();
|
||||
for (QDBusObjectPath path : paths) {
|
||||
BrightMonitor *monitor = new BrightMonitor(path.path(), this);
|
||||
monitor->setPrimary(primaryScreenName == monitor->name());
|
||||
m_monitor << monitor;
|
||||
}
|
||||
}
|
||||
m_primaryScreenName = dbusInter.property("Primary").value<QString>();
|
||||
m_monitor = readMonitors(dbusInter.property("Monitors").value<QList<QDBusObjectPath>>());
|
||||
|
||||
connect(qApp, &QApplication::primaryScreenChanged, this, &BrightnessModel::primaryScreenChanged);
|
||||
QDBusConnection::sessionBus().connect(serviceName, servicePath, propertiesInterface,
|
||||
"PropertiesChanged", "sa{sv}as", this, SLOT(onPropertyChanged(const QDBusMessage &)));
|
||||
}
|
||||
}
|
||||
|
||||
BrightnessModel::~BrightnessModel()
|
||||
@ -87,6 +83,51 @@ void BrightnessModel::primaryScreenChanged(QScreen *screen)
|
||||
Q_EMIT primaryChanged(defaultMonitor);
|
||||
}
|
||||
|
||||
void BrightnessModel::onPropertyChanged(const QDBusMessage &msg)
|
||||
{
|
||||
QList<QVariant> arguments = msg.arguments();
|
||||
if (3 != arguments.count())
|
||||
return;
|
||||
|
||||
QString interfaceName = msg.arguments().at(0).toString();
|
||||
if (interfaceName != serviceInterface)
|
||||
return;
|
||||
|
||||
QVariantMap changedProps = qdbus_cast<QVariantMap>(arguments.at(1).value<QDBusArgument>());
|
||||
if (changedProps.contains("Primary")) {
|
||||
m_primaryScreenName = changedProps.value("Primary").toString();
|
||||
BrightMonitor *defaultMonitor = nullptr;
|
||||
for (BrightMonitor *monitor : m_monitor) {
|
||||
monitor->setPrimary(monitor->name() == m_primaryScreenName);
|
||||
if (monitor->isPrimary())
|
||||
defaultMonitor = monitor;
|
||||
}
|
||||
|
||||
if (defaultMonitor)
|
||||
Q_EMIT primaryChanged(defaultMonitor);
|
||||
} else if (changedProps.contains("Monitors")) {
|
||||
int oldSize = m_monitor.size();
|
||||
qDeleteAll(m_monitor);
|
||||
m_monitor = readMonitors(changedProps.value("Monitors").value<QList<QDBusObjectPath>>());
|
||||
if (oldSize == 1 && m_monitor.size() == 0) {
|
||||
Q_EMIT screenVisibleChanged(false);
|
||||
} else if (oldSize == 0 && m_monitor.size() == 1) {
|
||||
Q_EMIT screenVisibleChanged(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QList<BrightMonitor *> BrightnessModel::readMonitors(const QList<QDBusObjectPath> &paths)
|
||||
{
|
||||
QList<BrightMonitor *> monitors;
|
||||
for (QDBusObjectPath path : paths) {
|
||||
BrightMonitor *monitor = new BrightMonitor(path.path(), this);
|
||||
monitor->setPrimary(m_primaryScreenName == monitor->name());
|
||||
monitors << monitor;
|
||||
}
|
||||
return monitors;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief monitor
|
||||
*/
|
||||
|
@ -22,6 +22,7 @@
|
||||
#ifndef BRIGHTNESSMODEL_H
|
||||
#define BRIGHTNESSMODEL_H
|
||||
|
||||
#include <QDBusObjectPath>
|
||||
#include <QObject>
|
||||
|
||||
class BrightMonitor;
|
||||
@ -41,12 +42,18 @@ public:
|
||||
|
||||
Q_SIGNALS:
|
||||
void primaryChanged(BrightMonitor *);
|
||||
void screenVisibleChanged(bool);
|
||||
|
||||
protected Q_SLOTS:
|
||||
void primaryScreenChanged(QScreen *screen);
|
||||
void onPropertyChanged(const QDBusMessage &msg);
|
||||
|
||||
private:
|
||||
QList<BrightMonitor *> readMonitors(const QList<QDBusObjectPath> &paths);
|
||||
|
||||
private:
|
||||
QList<BrightMonitor *> m_monitor;
|
||||
QString m_primaryScreenName;
|
||||
};
|
||||
|
||||
class BrightMonitor : public QObject
|
||||
|
@ -48,14 +48,6 @@ void BrightnessWidget::showEvent(QShowEvent *event)
|
||||
|
||||
// 显示的时候更新一下slider的主屏幕亮度值
|
||||
updateSliderValue();
|
||||
Q_EMIT visibleChanged(true);
|
||||
}
|
||||
|
||||
void BrightnessWidget::hideEvent(QHideEvent *event)
|
||||
{
|
||||
QWidget::hideEvent(event);
|
||||
|
||||
Q_EMIT visibleChanged(true);
|
||||
}
|
||||
|
||||
void BrightnessWidget::initUi()
|
||||
|
@ -38,12 +38,10 @@ public:
|
||||
~BrightnessWidget() override;
|
||||
|
||||
Q_SIGNALS:
|
||||
void visibleChanged(bool);
|
||||
void brightClicked();
|
||||
|
||||
protected:
|
||||
void showEvent(QShowEvent *event) override;
|
||||
void hideEvent(QHideEvent *event) override;
|
||||
|
||||
private:
|
||||
void initUi();
|
||||
|
@ -35,15 +35,13 @@
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
#define PLUGIN_STATE_KEY "enable"
|
||||
#define TIME_FORMAT_KEY "Use24HourFormat"
|
||||
using namespace Dock;
|
||||
DisplayPlugin::DisplayPlugin(QObject *parent)
|
||||
: QObject(parent)
|
||||
, m_displayWidget(nullptr)
|
||||
, m_displaySettingWidget(nullptr)
|
||||
, m_displayTips(nullptr)
|
||||
, m_model(new BrightnessModel(this))
|
||||
, m_model(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
@ -64,15 +62,23 @@ void DisplayPlugin::init(PluginProxyInterface *proxyInter)
|
||||
|
||||
m_proxyInter = proxyInter;
|
||||
m_displayTips.reset(new TipsWidget);
|
||||
m_displayWidget.reset(new BrightnessWidget(m_model));
|
||||
m_model.reset(new BrightnessModel);
|
||||
m_displayWidget.reset(new BrightnessWidget(m_model.data()));
|
||||
m_displayWidget->setFixedHeight(60);
|
||||
m_displaySettingWidget.reset(new DisplaySettingWidget);
|
||||
|
||||
m_proxyInter->itemAdded(this, pluginName());
|
||||
if (m_model->monitors().size() > 0)
|
||||
m_proxyInter->itemAdded(this, pluginName());
|
||||
|
||||
connect(m_displayWidget.data(), &BrightnessWidget::brightClicked, this, [ this ] {
|
||||
m_proxyInter->requestSetAppletVisible(this, QUICK_ITEM_KEY, true);
|
||||
});
|
||||
connect(m_model.data(), &BrightnessModel::screenVisibleChanged, this, [ this ](bool visible) {
|
||||
if (visible)
|
||||
m_proxyInter->itemAdded(this, pluginName());
|
||||
else
|
||||
m_proxyInter->itemRemoved(this, pluginName());
|
||||
});
|
||||
}
|
||||
|
||||
QWidget *DisplayPlugin::itemWidget(const QString &itemKey)
|
||||
|
@ -59,7 +59,7 @@ private:
|
||||
QScopedPointer<BrightnessWidget> m_displayWidget;
|
||||
QScopedPointer<DisplaySettingWidget> m_displaySettingWidget;
|
||||
QScopedPointer<Dock::TipsWidget> m_displayTips;
|
||||
BrightnessModel *m_model;
|
||||
QScopedPointer<BrightnessModel> m_model;
|
||||
};
|
||||
|
||||
#endif // DATETIMEPLUGIN_H
|
||||
|
Loading…
x
Reference in New Issue
Block a user