mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +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());
|
QDBusInterface dbusInter(serviceName, servicePath, serviceInterface, QDBusConnection::sessionBus());
|
||||||
if (dbusInter.isValid()) {
|
if (dbusInter.isValid()) {
|
||||||
// 读取所有的屏幕的信息
|
// 读取所有的屏幕的信息
|
||||||
QString primaryScreenName = dbusInter.property("Primary").value<QString>();
|
m_primaryScreenName = dbusInter.property("Primary").value<QString>();
|
||||||
QList<QDBusObjectPath> paths = dbusInter.property("Monitors").value<QList<QDBusObjectPath>>();
|
m_monitor = readMonitors(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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
connect(qApp, &QApplication::primaryScreenChanged, this, &BrightnessModel::primaryScreenChanged);
|
QDBusConnection::sessionBus().connect(serviceName, servicePath, propertiesInterface,
|
||||||
|
"PropertiesChanged", "sa{sv}as", this, SLOT(onPropertyChanged(const QDBusMessage &)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BrightnessModel::~BrightnessModel()
|
BrightnessModel::~BrightnessModel()
|
||||||
@ -87,6 +83,51 @@ void BrightnessModel::primaryScreenChanged(QScreen *screen)
|
|||||||
Q_EMIT primaryChanged(defaultMonitor);
|
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
|
* @brief monitor
|
||||||
*/
|
*/
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#ifndef BRIGHTNESSMODEL_H
|
#ifndef BRIGHTNESSMODEL_H
|
||||||
#define BRIGHTNESSMODEL_H
|
#define BRIGHTNESSMODEL_H
|
||||||
|
|
||||||
|
#include <QDBusObjectPath>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
class BrightMonitor;
|
class BrightMonitor;
|
||||||
@ -41,12 +42,18 @@ public:
|
|||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void primaryChanged(BrightMonitor *);
|
void primaryChanged(BrightMonitor *);
|
||||||
|
void screenVisibleChanged(bool);
|
||||||
|
|
||||||
protected Q_SLOTS:
|
protected Q_SLOTS:
|
||||||
void primaryScreenChanged(QScreen *screen);
|
void primaryScreenChanged(QScreen *screen);
|
||||||
|
void onPropertyChanged(const QDBusMessage &msg);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QList<BrightMonitor *> readMonitors(const QList<QDBusObjectPath> &paths);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QList<BrightMonitor *> m_monitor;
|
QList<BrightMonitor *> m_monitor;
|
||||||
|
QString m_primaryScreenName;
|
||||||
};
|
};
|
||||||
|
|
||||||
class BrightMonitor : public QObject
|
class BrightMonitor : public QObject
|
||||||
|
@ -48,14 +48,6 @@ void BrightnessWidget::showEvent(QShowEvent *event)
|
|||||||
|
|
||||||
// 显示的时候更新一下slider的主屏幕亮度值
|
// 显示的时候更新一下slider的主屏幕亮度值
|
||||||
updateSliderValue();
|
updateSliderValue();
|
||||||
Q_EMIT visibleChanged(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void BrightnessWidget::hideEvent(QHideEvent *event)
|
|
||||||
{
|
|
||||||
QWidget::hideEvent(event);
|
|
||||||
|
|
||||||
Q_EMIT visibleChanged(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BrightnessWidget::initUi()
|
void BrightnessWidget::initUi()
|
||||||
|
@ -38,12 +38,10 @@ public:
|
|||||||
~BrightnessWidget() override;
|
~BrightnessWidget() override;
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void visibleChanged(bool);
|
|
||||||
void brightClicked();
|
void brightClicked();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void showEvent(QShowEvent *event) override;
|
void showEvent(QShowEvent *event) override;
|
||||||
void hideEvent(QHideEvent *event) override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void initUi();
|
void initUi();
|
||||||
|
@ -35,15 +35,13 @@
|
|||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#define PLUGIN_STATE_KEY "enable"
|
|
||||||
#define TIME_FORMAT_KEY "Use24HourFormat"
|
|
||||||
using namespace Dock;
|
using namespace Dock;
|
||||||
DisplayPlugin::DisplayPlugin(QObject *parent)
|
DisplayPlugin::DisplayPlugin(QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, m_displayWidget(nullptr)
|
, m_displayWidget(nullptr)
|
||||||
, m_displaySettingWidget(nullptr)
|
, m_displaySettingWidget(nullptr)
|
||||||
, m_displayTips(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_proxyInter = proxyInter;
|
||||||
m_displayTips.reset(new TipsWidget);
|
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_displayWidget->setFixedHeight(60);
|
||||||
m_displaySettingWidget.reset(new DisplaySettingWidget);
|
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 ] {
|
connect(m_displayWidget.data(), &BrightnessWidget::brightClicked, this, [ this ] {
|
||||||
m_proxyInter->requestSetAppletVisible(this, QUICK_ITEM_KEY, true);
|
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)
|
QWidget *DisplayPlugin::itemWidget(const QString &itemKey)
|
||||||
|
@ -59,7 +59,7 @@ private:
|
|||||||
QScopedPointer<BrightnessWidget> m_displayWidget;
|
QScopedPointer<BrightnessWidget> m_displayWidget;
|
||||||
QScopedPointer<DisplaySettingWidget> m_displaySettingWidget;
|
QScopedPointer<DisplaySettingWidget> m_displaySettingWidget;
|
||||||
QScopedPointer<Dock::TipsWidget> m_displayTips;
|
QScopedPointer<Dock::TipsWidget> m_displayTips;
|
||||||
BrightnessModel *m_model;
|
QScopedPointer<BrightnessModel> m_model;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DATETIMEPLUGIN_H
|
#endif // DATETIMEPLUGIN_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user