mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-03 16:30:02 +00:00
fix: displayplugin disappear when monitor count changed
changedProps.vale get a empty monitors list, and BrightnessAdjWidget not update monitor SliderContainer count log: fix displayplugin disappear
This commit is contained in:
parent
f408bd89f4
commit
7cd0cddf44
@ -12,13 +12,14 @@
|
|||||||
|
|
||||||
const int ItemSpacing = 5;
|
const int ItemSpacing = 5;
|
||||||
|
|
||||||
BrightnessAdjWidget::BrightnessAdjWidget(QWidget *parent)
|
BrightnessAdjWidget::BrightnessAdjWidget(BrightnessModel *model, QWidget *parent)
|
||||||
: QWidget(parent)
|
: QWidget(parent)
|
||||||
, m_mainLayout(new QVBoxLayout(this))
|
, m_mainLayout(new QVBoxLayout(this))
|
||||||
, m_brightnessModel(new BrightnessModel(this))
|
, m_brightnessModel(model)
|
||||||
{
|
{
|
||||||
m_mainLayout->setMargin(0);
|
m_mainLayout->setMargin(0);
|
||||||
m_mainLayout->setSpacing(ItemSpacing);
|
m_mainLayout->setSpacing(ItemSpacing);
|
||||||
|
connect(m_brightnessModel, &BrightnessModel::monitorChanged, this, &BrightnessAdjWidget::loadBrightnessItem);
|
||||||
|
|
||||||
loadBrightnessItem();
|
loadBrightnessItem();
|
||||||
}
|
}
|
||||||
@ -28,6 +29,11 @@ void BrightnessAdjWidget::loadBrightnessItem()
|
|||||||
QList<BrightMonitor *> monitors = m_brightnessModel->monitors();
|
QList<BrightMonitor *> monitors = m_brightnessModel->monitors();
|
||||||
int itemHeight = monitors.count() > 1 ? 56 : 30;
|
int itemHeight = monitors.count() > 1 ? 56 : 30;
|
||||||
|
|
||||||
|
// 清理之前的widget
|
||||||
|
while(m_mainLayout->count() > 0) {
|
||||||
|
m_mainLayout->takeAt(0)->widget()->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
for (BrightMonitor *monitor : monitors) {
|
for (BrightMonitor *monitor : monitors) {
|
||||||
SliderContainer *sliderContainer = new SliderContainer(this);
|
SliderContainer *sliderContainer = new SliderContainer(this);
|
||||||
if (monitors.count() > 1)
|
if (monitors.count() > 1)
|
||||||
@ -54,5 +60,6 @@ void BrightnessAdjWidget::loadBrightnessItem()
|
|||||||
|
|
||||||
QMargins margins = this->contentsMargins();
|
QMargins margins = this->contentsMargins();
|
||||||
setFixedHeight(margins.top() + margins.bottom() + monitors.count() * itemHeight + monitors.count() * ItemSpacing);
|
setFixedHeight(margins.top() + margins.bottom() + monitors.count() * itemHeight + monitors.count() * ItemSpacing);
|
||||||
|
Q_EMIT sizeChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,9 +19,12 @@ class BrightnessAdjWidget : public QWidget
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit BrightnessAdjWidget(QWidget *parent = nullptr);
|
explicit BrightnessAdjWidget(BrightnessModel *model, QWidget *parent = nullptr);
|
||||||
|
|
||||||
private:
|
Q_SIGNALS:
|
||||||
|
void sizeChanged();
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
void loadBrightnessItem();
|
void loadBrightnessItem();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QScreen>
|
#include <QScreen>
|
||||||
|
#include <qobjectdefs.h>
|
||||||
|
|
||||||
static const QString serviceName("org.deepin.dde.Display1");
|
static const QString serviceName("org.deepin.dde.Display1");
|
||||||
static const QString servicePath("/org/deepin/dde/Display1");
|
static const QString servicePath("/org/deepin/dde/Display1");
|
||||||
@ -88,14 +89,10 @@ void BrightnessModel::onPropertyChanged(const QDBusMessage &msg)
|
|||||||
if (defaultMonitor)
|
if (defaultMonitor)
|
||||||
Q_EMIT primaryChanged(defaultMonitor);
|
Q_EMIT primaryChanged(defaultMonitor);
|
||||||
} else if (changedProps.contains("Monitors")) {
|
} else if (changedProps.contains("Monitors")) {
|
||||||
int oldSize = m_monitor.size();
|
|
||||||
qDeleteAll(m_monitor);
|
qDeleteAll(m_monitor);
|
||||||
m_monitor = readMonitors(changedProps.value("Monitors").value<QList<QDBusObjectPath>>());
|
QDBusInterface dbusInter(serviceName, servicePath, serviceInterface, QDBusConnection::sessionBus());
|
||||||
if (oldSize == 1 && m_monitor.size() == 0) {
|
m_monitor = readMonitors(dbusInter.property("Monitors").value<QList<QDBusObjectPath>>());
|
||||||
Q_EMIT screenVisibleChanged(false);
|
Q_EMIT monitorChanged();
|
||||||
} else if (oldSize == 0 && m_monitor.size() == 1) {
|
|
||||||
Q_EMIT screenVisibleChanged(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ public:
|
|||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void primaryChanged(BrightMonitor *);
|
void primaryChanged(BrightMonitor *);
|
||||||
void screenVisibleChanged(bool);
|
void monitorChanged();
|
||||||
void monitorLightChanged();
|
void monitorLightChanged();
|
||||||
|
|
||||||
protected Q_SLOTS:
|
protected Q_SLOTS:
|
||||||
|
@ -49,7 +49,7 @@ void DisplayPlugin::init(PluginProxyInterface *proxyInter)
|
|||||||
m_model.reset(new BrightnessModel);
|
m_model.reset(new BrightnessModel);
|
||||||
m_displayWidget.reset(new BrightnessWidget(m_model.data()));
|
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_model.data()));
|
||||||
|
|
||||||
if (m_model->monitors().size() > 0)
|
if (m_model->monitors().size() > 0)
|
||||||
m_proxyInter->itemAdded(this, pluginName());
|
m_proxyInter->itemAdded(this, pluginName());
|
||||||
@ -60,8 +60,8 @@ void DisplayPlugin::init(PluginProxyInterface *proxyInter)
|
|||||||
connect(m_displaySettingWidget.data(), &DisplaySettingWidget::requestHide, this, [ this ] {
|
connect(m_displaySettingWidget.data(), &DisplaySettingWidget::requestHide, this, [ this ] {
|
||||||
m_proxyInter->requestSetAppletVisible(this, QUICK_ITEM_KEY, false);
|
m_proxyInter->requestSetAppletVisible(this, QUICK_ITEM_KEY, false);
|
||||||
});
|
});
|
||||||
connect(m_model.data(), &BrightnessModel::screenVisibleChanged, this, [ this ](bool visible) {
|
connect(m_model.data(), &BrightnessModel::monitorChanged, this, [ this ]() {
|
||||||
if (visible)
|
if (m_model->monitors().size() > 0)
|
||||||
m_proxyInter->itemAdded(this, pluginName());
|
m_proxyInter->itemAdded(this, pluginName());
|
||||||
else
|
else
|
||||||
m_proxyInter->itemRemoved(this, pluginName());
|
m_proxyInter->itemRemoved(this, pluginName());
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||||
|
|
||||||
#include "displaysettingwidget.h"
|
#include "displaysettingwidget.h"
|
||||||
#include "brightnessadjwidget.h"
|
|
||||||
#include "devcollaborationwidget.h"
|
#include "devcollaborationwidget.h"
|
||||||
|
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
@ -14,9 +13,9 @@
|
|||||||
|
|
||||||
const int ItemSpacing = 10;
|
const int ItemSpacing = 10;
|
||||||
|
|
||||||
DisplaySettingWidget::DisplaySettingWidget(QWidget *parent)
|
DisplaySettingWidget::DisplaySettingWidget(BrightnessModel *model, QWidget *parent)
|
||||||
: QWidget(parent)
|
: QWidget(parent)
|
||||||
, m_brightnessAdjWidget(new BrightnessAdjWidget(this))
|
, m_brightnessAdjWidget(new BrightnessAdjWidget(model, this))
|
||||||
, m_collaborationWidget(new DevCollaborationWidget(this))
|
, m_collaborationWidget(new DevCollaborationWidget(this))
|
||||||
, m_settingBtn(new QPushButton(tr("Multi-Screen Collaboration"), this))
|
, m_settingBtn(new QPushButton(tr("Multi-Screen Collaboration"), this))
|
||||||
{
|
{
|
||||||
@ -48,6 +47,8 @@ void DisplaySettingWidget::initUI()
|
|||||||
resizeWidgetHeight();
|
resizeWidgetHeight();
|
||||||
connect(m_collaborationWidget, &DevCollaborationWidget::sizeChanged,
|
connect(m_collaborationWidget, &DevCollaborationWidget::sizeChanged,
|
||||||
this, &DisplaySettingWidget::resizeWidgetHeight);
|
this, &DisplaySettingWidget::resizeWidgetHeight);
|
||||||
|
connect(m_brightnessAdjWidget, &BrightnessAdjWidget::sizeChanged,
|
||||||
|
this, &DisplaySettingWidget::resizeWidgetHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisplaySettingWidget::resizeWidgetHeight()
|
void DisplaySettingWidget::resizeWidgetHeight()
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
#ifndef DISPLAY_SETTING_WIDGET_H
|
#ifndef DISPLAY_SETTING_WIDGET_H
|
||||||
#define DISPLAY_SETTING_WIDGET_H
|
#define DISPLAY_SETTING_WIDGET_H
|
||||||
|
|
||||||
|
#include "brightnessadjwidget.h"
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
class QPushButton;
|
class QPushButton;
|
||||||
@ -21,7 +23,7 @@ class DisplaySettingWidget : public QWidget
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit DisplaySettingWidget(QWidget *parent = nullptr);
|
explicit DisplaySettingWidget(BrightnessModel *model, QWidget *parent = nullptr);
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void requestHide();
|
void requestHide();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user