From 26248213bf22c2dd63f6896be52eae713a98e830 Mon Sep 17 00:00:00 2001 From: chenwei Date: Tue, 12 Jan 2021 16:07:03 +0800 Subject: [PATCH 01/30] =?UTF-8?q?fix:=20=E4=BB=BB=E5=8A=A1=E6=A0=8F?= =?UTF-8?q?=E8=93=9D=E7=89=99=E6=8F=92=E4=BB=B6=E6=97=A0=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 蓝牙插件刷新按钮未添加,按照之前的蓝牙插件界面刷新按钮位置添加刷新按钮 Log: 蓝牙插件刷新按钮去掉了无法刷新列表 Bug: https://pms.uniontech.com/zentao/bug-view-60828.html Change-Id: I9c6813e1d57e4b83db2f8e224e107c06215e802f --- .../componments/bluetoothadapteritem.cpp | 36 ++++++++- .../componments/bluetoothadapteritem.h | 4 + .../bluetooth/componments/bluetoothapplet.cpp | 6 +- .../bluetooth/componments/bluetoothapplet.h | 2 +- .../bluetooth/componments/refreshbutton.cpp | 73 +++++++++++++++++++ plugins/bluetooth/componments/refreshbutton.h | 34 +++++++++ 6 files changed, 151 insertions(+), 4 deletions(-) create mode 100644 plugins/bluetooth/componments/refreshbutton.cpp create mode 100644 plugins/bluetooth/componments/refreshbutton.h diff --git a/plugins/bluetooth/componments/bluetoothadapteritem.cpp b/plugins/bluetooth/componments/bluetoothadapteritem.cpp index a02a5d8ab..ceb0a4c65 100644 --- a/plugins/bluetooth/componments/bluetoothadapteritem.cpp +++ b/plugins/bluetooth/componments/bluetoothadapteritem.cpp @@ -24,6 +24,7 @@ #include "componments/adapter.h" #include "bluetoothapplet.h" #include "bluetoothconstants.h" +#include "refreshbutton.h" #include #include @@ -121,6 +122,7 @@ BluetoothAdapterItem::BluetoothAdapterItem(Adapter *adapter, QWidget *parent) , m_adapterStateBtn(new DSwitchButton(this)) , m_deviceListview(new DListView(this)) , m_deviceModel(new QStandardItemModel(m_deviceListview)) + , m_refreshBtn(new RefreshButton(this)) { initData(); initUi(); @@ -162,6 +164,15 @@ void BluetoothAdapterItem::onAdapterNameChanged(const QString name) m_adapterLabel->label()->setText(name); } +void BluetoothAdapterItem::updateIconTheme(DGuiApplicationHelper::ColorType type) +{ + if (type == DGuiApplicationHelper::LightType) { + m_refreshBtn->setRotateIcon(":/wireless/resources/wireless/refresh_dark.svg"); + } else { + m_refreshBtn->setRotateIcon(":/wireless/resources/wireless/refresh.svg"); + } +} + int BluetoothAdapterItem::currentDeviceCount() { return m_deviceItems.size(); @@ -222,10 +233,14 @@ void BluetoothAdapterItem::onDeviceRemoved(const Device *device) void BluetoothAdapterItem::initUi() { + m_refreshBtn->setFixedSize(24, 24); + m_refreshBtn->setVisible(m_adapter->powered()); + setAccessibleName(m_adapter->name()); setContentsMargins(0, 0, 0, 0); m_adapterLabel->setFixedSize(ItemWidth, TitleHeight); - m_adapterLabel->addSwichButton(m_adapterStateBtn); + m_adapterLabel->addButton(m_refreshBtn, 0); + m_adapterLabel->addButton(m_adapterStateBtn, 10); DFontSizeManager::instance()->bind(m_adapterLabel->label(), DFontSizeManager::T4); m_adapterStateBtn->setChecked(m_adapter->powered()); @@ -250,14 +265,32 @@ void BluetoothAdapterItem::initUi() mainLayout->addWidget(m_adapterLabel); mainLayout->addSpacing(2); mainLayout->addWidget(m_deviceListview); + + updateIconTheme(DGuiApplicationHelper::instance()->themeType()); + if (m_adapter->discover()) { + m_refreshBtn->startRotate(); + } } void BluetoothAdapterItem::initConnect() { + connect(DApplicationHelper::instance(), &DApplicationHelper::themeTypeChanged, this, &BluetoothAdapterItem::updateIconTheme); connect(m_adapter, &Adapter::deviceAdded, this, &BluetoothAdapterItem::onDeviceAdded); connect(m_adapter, &Adapter::deviceRemoved, this, &BluetoothAdapterItem::onDeviceRemoved); connect(m_adapter, &Adapter::nameChanged, this, &BluetoothAdapterItem::onAdapterNameChanged); connect(m_deviceListview, &DListView::clicked, this, &BluetoothAdapterItem::onConnectDevice); + connect(m_adapter, &Adapter::discoveringChanged, this, [ = ] (bool state) { + if (state) { + m_refreshBtn->startRotate(); + } else { + m_refreshBtn->stopRotate(); + } + }); + + connect(m_refreshBtn, &RefreshButton::clicked, this, [ = ] { + emit requestRefreshAdapter(m_adapter); + }); + connect(m_adapter, &Adapter::poweredChanged, this, [ = ] (bool state) { initData(); m_deviceListview->setVisible(state); @@ -271,6 +304,7 @@ void BluetoothAdapterItem::initConnect() m_deviceModel->clear(); m_deviceListview->setVisible(false); m_adapterStateBtn->setEnabled(false); + m_refreshBtn->setVisible(state); emit requestSetAdapterPower(m_adapter, state); }); } diff --git a/plugins/bluetooth/componments/bluetoothadapteritem.h b/plugins/bluetooth/componments/bluetoothadapteritem.h index 699eb4a09..3bd61f3fb 100644 --- a/plugins/bluetooth/componments/bluetoothadapteritem.h +++ b/plugins/bluetooth/componments/bluetoothadapteritem.h @@ -42,6 +42,7 @@ DWIDGET_END_NAMESPACE class Adapter; class SettingLabel; class QStandardItemModel; +class RefreshButton; const QString LightString = QString(":/light/buletooth_%1_light.svg"); const QString DarkString = QString(":/dark/buletooth_%1_dark.svg"); @@ -101,10 +102,12 @@ public slots: void onTopDeviceItem(DStandardItem* item); // 设置蓝牙适配器名称 void onAdapterNameChanged(const QString name); + void updateIconTheme(DGuiApplicationHelper::ColorType type); signals: void adapterPowerChanged(); void requestSetAdapterPower(Adapter *adapter, bool state); + void requestRefreshAdapter(Adapter *adapter); void connectDevice(const Device *device, Adapter *adapter); void deviceCountChanged(); void deviceStateChanged(const Device* device); @@ -119,6 +122,7 @@ private: DSwitchButton *m_adapterStateBtn = nullptr; DListView *m_deviceListview = nullptr; QStandardItemModel *m_deviceModel = nullptr; + RefreshButton *m_refreshBtn = nullptr; QMap m_deviceItems; }; diff --git a/plugins/bluetooth/componments/bluetoothapplet.cpp b/plugins/bluetooth/componments/bluetoothapplet.cpp index afbb5628c..2e163ac8f 100644 --- a/plugins/bluetooth/componments/bluetoothapplet.cpp +++ b/plugins/bluetooth/componments/bluetoothapplet.cpp @@ -50,12 +50,13 @@ SettingLabel::SettingLabel(QString text, QWidget *parent) m_layout->setMargin(0); m_layout->addSpacing(20); m_layout->addWidget(m_label, 0, Qt::AlignLeft | Qt::AlignHCenter); + m_layout->addStretch(); } -void SettingLabel::addSwichButton(DSwitchButton *button) +void SettingLabel::addButton(QWidget *button, int space) { m_layout->addWidget(button, 0, Qt::AlignRight | Qt::AlignHCenter); - m_layout->addSpacing(10); + m_layout->addSpacing(space); } void SettingLabel::mousePressEvent(QMouseEvent *ev) @@ -153,6 +154,7 @@ void BluetoothApplet::onAdapterAdded(Adapter *adapter) connect(adapterItem, &BluetoothAdapterItem::deviceCountChanged, this, &BluetoothApplet::updateSize); connect(adapterItem, &BluetoothAdapterItem::adapterPowerChanged, this, &BluetoothApplet::updateBluetoothPowerState); connect(adapterItem, &BluetoothAdapterItem::deviceStateChanged, this, &BluetoothApplet::deviceStateChanged); + connect(adapterItem, &BluetoothAdapterItem::requestRefreshAdapter, m_adaptersManager, &AdaptersManager::adapterRefresh); m_adapterItems.insert(adapter->id(), adapterItem); m_contentLayout->insertWidget(0, adapterItem, Qt::AlignTop | Qt::AlignVCenter); diff --git a/plugins/bluetooth/componments/bluetoothapplet.h b/plugins/bluetooth/componments/bluetoothapplet.h index 94b719052..19e50d773 100644 --- a/plugins/bluetooth/componments/bluetoothapplet.h +++ b/plugins/bluetooth/componments/bluetoothapplet.h @@ -49,7 +49,7 @@ class SettingLabel : public QWidget Q_OBJECT public: explicit SettingLabel(QString text, QWidget *parent = nullptr); - void addSwichButton(DSwitchButton *button); + void addButton(QWidget *button, int space); DLabel *label() { return m_label; } signals: void clicked(); diff --git a/plugins/bluetooth/componments/refreshbutton.cpp b/plugins/bluetooth/componments/refreshbutton.cpp new file mode 100644 index 000000000..b776e2598 --- /dev/null +++ b/plugins/bluetooth/componments/refreshbutton.cpp @@ -0,0 +1,73 @@ +#include "refreshbutton.h" + +#include +#include +#include +#include +#include +#include + +RefreshButton::RefreshButton(QWidget *parent) + : QWidget(parent) + , m_refreshTimer(new QTimer(this)) + , m_rotateAngle(0) +{ + setAccessibleName("RefreshButton"); + m_refreshTimer->setInterval(500 / 60); + initConnect(); +} + +void RefreshButton::setRotateIcon(QString path) +{ + m_pixmap = QIcon(path).pixmap(size()); +} + +void RefreshButton::startRotate() +{ + m_refreshTimer->start(); + if (m_rotateAngle == 360) { + m_rotateAngle = 0; + } + m_rotateAngle += 360 / 60; + update(); +} + +void RefreshButton::stopRotate() +{ + m_refreshTimer->stop(); + m_rotateAngle = 0; + update(); +} + +void RefreshButton::paintEvent(QPaintEvent *e) +{ + QPainter painter(this); + painter.setPen(Qt::NoPen); + painter.setBrush(Qt::NoBrush); + painter.setRenderHint(QPainter::SmoothPixmapTransform); + + painter.translate(this->width() / 2, this->height() / 2); + painter.rotate(m_rotateAngle); + painter.translate(-(this->width() / 2), -(this->height() / 2)); + painter.drawPixmap(this->rect(), m_pixmap); + + QWidget::paintEvent(e); +} + +void RefreshButton::mousePressEvent(QMouseEvent *event) +{ + m_pressPos = event->pos(); + return QWidget::mousePressEvent(event); +} + +void RefreshButton::mouseReleaseEvent(QMouseEvent *event) +{ + if (rect().contains(m_pressPos) && rect().contains(event->pos()) && !m_refreshTimer->isActive()) + Q_EMIT clicked(); + return QWidget::mouseReleaseEvent(event); +} + +void RefreshButton::initConnect() +{ + connect(m_refreshTimer, &QTimer::timeout, this, &RefreshButton::startRotate); +} diff --git a/plugins/bluetooth/componments/refreshbutton.h b/plugins/bluetooth/componments/refreshbutton.h new file mode 100644 index 000000000..a2d637f75 --- /dev/null +++ b/plugins/bluetooth/componments/refreshbutton.h @@ -0,0 +1,34 @@ +#ifndef REFRESHBUTTON_H +#define REFRESHBUTTON_H + +#include + +class QTimer; + +class RefreshButton : public QWidget +{ + Q_OBJECT +public: + explicit RefreshButton(QWidget *parent = nullptr); + void setRotateIcon(QString path); + void startRotate(); + void stopRotate(); + +signals: + void clicked(); + +protected: + void paintEvent(QPaintEvent *e) override; + void mousePressEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; + +private: + void initConnect(); + + QTimer *m_refreshTimer; + QPixmap m_pixmap; + QPoint m_pressPos; + int m_rotateAngle; +}; + +#endif // REFRESHBUTTON_H From b6718bfd2d1455493a0fdbbfe977337bd013a9a1 Mon Sep 17 00:00:00 2001 From: chenjun Date: Fri, 18 Dec 2020 16:18:58 +0800 Subject: [PATCH 02/30] =?UTF-8?q?fix:=20=E5=9C=A8=E9=A2=84=E8=A7=88?= =?UTF-8?q?=E5=89=8D=E5=85=88=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A2=84=E8=A7=88?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E7=9A=84=E8=BE=B9=E8=B7=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在打开特效时,如果鼠标快速进入并退出预览窗口,此时在进入时会设置预览窗口的边距,退出没有重置边距,然后在关闭特效后,再次预览时,窗口标题会出现偏 移问题,在开始预览时全部重置下预览界面的边距 Log: 修复无窗口特效下,多个窗口任务栏预览,概率性显示错位问题 Bug: https://pms.uniontech.com/zentao/bug-view-57974.html Change-Id: I1e403dfb9262ec6c290468df49d4dfc6bcb827f5 --- frame/item/components/previewcontainer.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frame/item/components/previewcontainer.cpp b/frame/item/components/previewcontainer.cpp index d29f01126..e4d6166ed 100644 --- a/frame/item/components/previewcontainer.cpp +++ b/frame/item/components/previewcontainer.cpp @@ -64,6 +64,9 @@ void PreviewContainer::setWindowInfos(const WindowInfoMap &infos, const WindowLi // check removed window for (auto it(m_snapshots.begin()); it != m_snapshots.end();) { + //初始化预览界面边距 + it.value()->setContentsMargins(0, 0, 0, 0); + if (!infos.contains(it.key())) { m_windowListLayout->removeWidget(it.value()); From cc5378c24bd7b428cf371d40cc3404eb42e9a7e7 Mon Sep 17 00:00:00 2001 From: chenjun Date: Tue, 8 Dec 2020 13:17:15 +0800 Subject: [PATCH 03/30] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E6=B5=8F?= =?UTF-8?q?=E8=A7=88=E5=99=A8=E3=80=81=E7=BB=88=E7=AB=AF=E7=AD=89=E6=9C=80?= =?UTF-8?q?=E5=A4=A7=E5=8C=96=E7=AA=97=E5=8F=A3=E5=BC=82=E5=B8=B8=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 解决浏览器、终端等最大化窗口异常问题 Log: 解决浏览器、终端等最大化窗口异常问题 Bug: https://pms.uniontech.com/zentao/bug-view-51294.html Change-Id: I81e54d6a603b48cbcde611bdca58aa18e554ea3a --- frame/util/multiscreenworker.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frame/util/multiscreenworker.cpp b/frame/util/multiscreenworker.cpp index 5ea1c48f5..06f3d8e59 100644 --- a/frame/util/multiscreenworker.cpp +++ b/frame/util/multiscreenworker.cpp @@ -900,14 +900,16 @@ void MultiScreenWorker::updateMonitorDockedInfo() void MultiScreenWorker::updatePrimaryDisplayRotation() { + //多次调用后,会append多次,造成重复项,因此先清空当前保存的旋转方向 + m_rotations.clear(); Monitor * primaryMonitor = monitorByName(m_mtrInfo.validMonitor(), m_displayInter->primary()); if(primaryMonitor) { MonitorInter *inter = new MonitorInter("com.deepin.daemon.Display", primaryMonitor->path(), QDBusConnection::sessionBus(), this); m_monitorRotation = inter->rotation(); //保存屏幕允许那些方向 foreach (quint16 var, inter->rotations()) { - m_rotations.append(var); - } + m_rotations.append(var); + } } } From 4fdca655f8927058290bc6209672e6344a388440 Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Thu, 14 Jan 2021 10:59:54 +0800 Subject: [PATCH 04/30] =?UTF-8?q?fix:=20=E6=B7=BB=E5=8A=A0=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=A0=8F=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 任务栏目前依赖dde-qt5xcb-plugins设置位置,但用户从1010升级到1031时,未安装这个包,会导致任务栏显示异常。故增加这个依赖 Log: 添加任务栏依赖。 Bug: https://pms.uniontech.com/zentao/bug-view-61074.html Bug: https://pms.uniontech.com/zentao/bug-view-61052.html Change-Id: I9d24c24fcc47bcc282b980c492ddd386bbd259af --- debian/control | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/debian/control b/debian/control index e7419babb..a68d578ca 100644 --- a/debian/control +++ b/debian/control @@ -33,7 +33,8 @@ Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, deepin-desktop-schemas (>=5.8.0.34), libdframeworkdbus2 (>=5.3.0.24), - libdde-network-utils (>=5.3.0.5) + libdde-network-utils (>=5.3.0.5), + dde-qt5xcb-plugin, Recommends: dde-disk-mount-plugin, dde-dock-onboard-plugin Conflicts: dde-workspace (<< 2.90.5), From 1a37d49365fef4152cdf01d46a85d2aef5383d1f Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Fri, 15 Jan 2021 11:10:30 +0800 Subject: [PATCH 05/30] =?UTF-8?q?fix:=20=E6=97=B6=E9=97=B4=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E6=98=BE=E7=A4=BA=E4=B8=8D=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在未开特效的情况下,任务栏切换位置的动画时间为0,任务栏位置还未切换完成,时间插件的布局就更新了,应该在任务栏显示完全后再刷新布局。 故在任务栏显示模式或位置改变后,设置圆角的同时调整一下插件的布局。 Log: 修复任务栏时间插件显示不全的问题。 Bug: https://pms.uniontech.com/zentao/bug-view-61203.html Change-Id: Ibce5bce7121743921819cb5cf4b139746add6e8e --- frame/window/mainwindow.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/frame/window/mainwindow.cpp b/frame/window/mainwindow.cpp index 598570229..9995e7126 100755 --- a/frame/window/mainwindow.cpp +++ b/frame/window/mainwindow.cpp @@ -370,6 +370,7 @@ void MainWindow::adjustShadowMask() } } m_platformWindowHandle.setWindowRadius(radius); + m_mainPanel->updatePluginsLayout(); } void MainWindow::onDbusNameOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner) From c18ad621d33d2860c3eb250b229c77fed1634041 Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Fri, 15 Jan 2021 13:10:09 +0800 Subject: [PATCH 06/30] =?UTF-8?q?fix:=20=E4=BB=BB=E5=8A=A1=E6=A0=8F?= =?UTF-8?q?=E5=9B=BE=E6=A0=87=E6=B6=88=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在未开窗口特效的情况下,拖动任务栏图标出任务栏,放开后需要触发动画执行完成的信号,将图标显示出来。 Log: 任务栏图标消失的问题。 Bug: https://pms.uniontech.com/zentao/bug-view-61231.html Change-Id: I21ce4ba750c089f6537316fb3a70bab79b9b00e0 --- frame/panel/mainpanelcontrol.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/frame/panel/mainpanelcontrol.cpp b/frame/panel/mainpanelcontrol.cpp index bdfdd993c..a1c4999b8 100755 --- a/frame/panel/mainpanelcontrol.cpp +++ b/frame/panel/mainpanelcontrol.cpp @@ -736,6 +736,22 @@ void MainPanelControl::startDrag(DockItem *item) drag->setMimeData(new QMimeData); drag->exec(Qt::MoveAction); + /** + * 在关闭窗口特效模式下,拖动任务栏图标到外面时,存在 dropEvent 被其它窗口捕获的情况, + * 导致 AppDragWidget 中的 dropEvent 无法触发,故这里特殊处理 + */ + if (item->itemType() == DockItem::App && !DWindowManagerHelper::instance()->hasComposite()) { + m_appDragWidget = nullptr; + if (qobject_cast(item)->isValid()) { + if (-1 == m_appAreaSonLayout->indexOf(item) && m_dragIndex != -1) { + insertItem(m_dragIndex, item); + m_dragIndex = -1; + } + item->setDraging(false); + item->update(); + } + } + if (item->itemType() != DockItem::App || m_dragIndex == -1) { m_appDragWidget = nullptr; item->setDraging(false); From 7658c6ff6a3c0e7ed7b75118ce6b4e6347cf8c68 Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Fri, 15 Jan 2021 14:46:13 +0800 Subject: [PATCH 07/30] =?UTF-8?q?fix:=20=E4=BB=BB=E5=8A=A1=E6=A0=8F?= =?UTF-8?q?=E9=AB=98=E5=BA=A6=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 任务栏传给xcb的高度计算错误。 Log: 修复任务栏高度异常的问题。 Bug: https://pms.uniontech.com/zentao/bug-view-60842.html Change-Id: I0b467f269304e5dabb44a1ad6bc157590790c851 --- frame/util/multiscreenworker.cpp | 24 +++++++++++++++--------- frame/util/multiscreenworker.h | 2 +- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/frame/util/multiscreenworker.cpp b/frame/util/multiscreenworker.cpp index 06f3d8e59..9359e5739 100644 --- a/frame/util/multiscreenworker.cpp +++ b/frame/util/multiscreenworker.cpp @@ -735,6 +735,10 @@ void MultiScreenWorker::onRequestUpdateFrontendGeometry() emit requestUpdateDockEntry(); } +/** + * @brief 这里用到xcb去设置任务栏的高度,比较特殊,参考_NET_WM_STRUT_PARTIAL属性 + * 在屏幕旋转后,所有参数以控制中心自定义设置里主屏显示的图示为准(旋转不用特殊处理) + */ void MultiScreenWorker::onRequestNotifyWindowManager() { static QRect lastRect = QRect(); @@ -772,12 +776,10 @@ void MultiScreenWorker::onRequestNotifyWindowManager() const QPoint &p = rawXPosition(rect.topLeft()); qDebug() << "dock topLeft position:" << p; - QScreen const *currentScreen = Utils::screenAtByScaled(rect.topLeft()); - XcbMisc::Orientation orientation = XcbMisc::OrientationTop; - uint strut = 0; - uint strutStart = 0; - uint strutEnd = 0; + double strut = 0; + double strutStart = 0; + double strutEnd = 0; switch (m_position) { case Position::Top: @@ -788,7 +790,7 @@ void MultiScreenWorker::onRequestNotifyWindowManager() break; case Position::Bottom: orientation = XcbMisc::OrientationBottom; - strut = currentScreen->geometry().height() * ratio - p.y(); + strut = m_screenRawHeight - p.y(); strutStart = p.x(); strutEnd = qMin(qRound(p.x() + rect.width() * ratio), rect.right()); break; @@ -800,13 +802,17 @@ void MultiScreenWorker::onRequestNotifyWindowManager() break; case Position::Right: orientation = XcbMisc::OrientationRight; - strut = currentScreen->geometry().width() * ratio - p.x(); + strut = m_screenRawWidth - p.x(); strutStart = p.y(); strutEnd = qMin(qRound(p.y() + rect.height() * ratio), rect.bottom()); break; } - qDebug() << "set dock geometry to xcb:" << strut << strutStart << strutEnd; - XcbMisc::instance()->set_strut_partial(parent()->winId(), orientation, strut + WINDOWMARGIN * ratio, strutStart, strutEnd); + + qDebug() << "set reserved area to xcb:" << strut << strutStart << strutEnd; + XcbMisc::instance()->set_strut_partial(static_cast(parent()->winId()), orientation, + static_cast(strut + WINDOWMARGIN * ratio), // 设置窗口与屏幕边缘距离,需要乘缩放 + static_cast(strutStart), // 设置任务栏起点坐标(上下为x,左右为y) + static_cast(strutEnd)); // 设置任务栏终点坐标(上下为x,左右为y) } void MultiScreenWorker::onRequestUpdatePosition(const Position &fromPos, const Position &toPos) diff --git a/frame/util/multiscreenworker.h b/frame/util/multiscreenworker.h index c89ab2f99..4cdb7918f 100644 --- a/frame/util/multiscreenworker.h +++ b/frame/util/multiscreenworker.h @@ -476,7 +476,7 @@ private: //当前屏幕的方向 int m_monitorRotation; //当前屏幕的所有方向 - RotationList m_rotations; + RotationList m_rotations; // 逆时针旋转(向下,向右,向上,向左) /***************不和其他流程产生交互,尽量不要动这里的变量***************/ int m_screenRawHeight; From 2c7642191f8a930644e6fe8a01239a1ef3c835e9 Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Mon, 18 Jan 2021 16:07:42 +0800 Subject: [PATCH 08/30] =?UTF-8?q?Revert=20"fix:=20=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=A0=8F=E5=9B=BE=E6=A0=87=E6=B6=88=E5=A4=B1"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit c18ad621d33d2860c3eb250b229c77fed1634041. Change-Id: I9a99f27a6ed301462aa81f8ae214f18820b18bf1 --- frame/panel/mainpanelcontrol.cpp | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/frame/panel/mainpanelcontrol.cpp b/frame/panel/mainpanelcontrol.cpp index a1c4999b8..bdfdd993c 100755 --- a/frame/panel/mainpanelcontrol.cpp +++ b/frame/panel/mainpanelcontrol.cpp @@ -736,22 +736,6 @@ void MainPanelControl::startDrag(DockItem *item) drag->setMimeData(new QMimeData); drag->exec(Qt::MoveAction); - /** - * 在关闭窗口特效模式下,拖动任务栏图标到外面时,存在 dropEvent 被其它窗口捕获的情况, - * 导致 AppDragWidget 中的 dropEvent 无法触发,故这里特殊处理 - */ - if (item->itemType() == DockItem::App && !DWindowManagerHelper::instance()->hasComposite()) { - m_appDragWidget = nullptr; - if (qobject_cast(item)->isValid()) { - if (-1 == m_appAreaSonLayout->indexOf(item) && m_dragIndex != -1) { - insertItem(m_dragIndex, item); - m_dragIndex = -1; - } - item->setDraging(false); - item->update(); - } - } - if (item->itemType() != DockItem::App || m_dragIndex == -1) { m_appDragWidget = nullptr; item->setDraging(false); From eef486b62ee3e5b2c5ff98585ce0c5472048f1fa Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Mon, 18 Jan 2021 16:16:33 +0800 Subject: [PATCH 09/30] =?UTF-8?q?fix:=20=E4=BB=BB=E5=8A=A1=E6=A0=8F?= =?UTF-8?q?=E5=9B=BE=E6=A0=87=E6=B6=88=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在拖动任务栏图标的过程中,DropAction 会发生变化,导致无法进入 dropEvent 故在 dragWidget 析构的时候显示原来的图标。 Log: 任务栏图标消失的问题。 Bug: https://pms.uniontech.com/zentao/bug-view-61231.html Change-Id: Ic8c6cbf2979dea126baa11eeb04a325fbcb0d952 --- frame/item/components/appdragwidget.cpp | 2 -- frame/item/components/appdragwidget.h | 1 - frame/panel/mainpanelcontrol.cpp | 18 +++++++----------- 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/frame/item/components/appdragwidget.cpp b/frame/item/components/appdragwidget.cpp index 6f4aed3ff..5c58554ae 100644 --- a/frame/item/components/appdragwidget.cpp +++ b/frame/item/components/appdragwidget.cpp @@ -203,7 +203,6 @@ void AppDragWidget::dropEvent(QDropEvent *event) } else { hide(); } - emit animationFinished(); AppItem *appItem = static_cast(event->source()); appItem->undock(); m_popupWindow->setVisible(false); @@ -267,7 +266,6 @@ void AppDragWidget::initAnimations() connect(m_animGroup, &QParallelAnimationGroup::stateChanged, this, &AppDragWidget::onRemoveAnimationStateChanged); connect(m_goBackAnim, &QPropertyAnimation::finished, this, &AppDragWidget::hide); - connect(m_goBackAnim, &QPropertyAnimation::finished, this, &AppDragWidget::animationFinished); } void AppDragWidget::initConfigurations() diff --git a/frame/item/components/appdragwidget.h b/frame/item/components/appdragwidget.h index 130b02cf5..ff387160b 100644 --- a/frame/item/components/appdragwidget.h +++ b/frame/item/components/appdragwidget.h @@ -51,7 +51,6 @@ public: signals: void requestRemoveItem(); - void animationFinished(); protected: void mouseMoveEvent(QMouseEvent *event) override; diff --git a/frame/panel/mainpanelcontrol.cpp b/frame/panel/mainpanelcontrol.cpp index bdfdd993c..b40bc3bcc 100755 --- a/frame/panel/mainpanelcontrol.cpp +++ b/frame/panel/mainpanelcontrol.cpp @@ -692,17 +692,6 @@ void MainPanelControl::startDrag(DockItem *item) connect(m_appDragWidget, &AppDragWidget::destroyed, this, [ = ] { m_appDragWidget = nullptr; - }); - - connect(m_appDragWidget, &AppDragWidget::requestRemoveItem, this, [ = ] { - if (-1 != m_appAreaSonLayout->indexOf(item)) { - m_dragIndex = m_appAreaSonLayout->indexOf(item); - removeItem(item); - } - }); - - connect(m_appDragWidget, &AppDragWidget::animationFinished, this, [ = ] { - m_appDragWidget = nullptr; if (qobject_cast(item)->isValid()) { if (-1 == m_appAreaSonLayout->indexOf(item) && m_dragIndex != -1) { insertItem(m_dragIndex, item); @@ -713,6 +702,13 @@ void MainPanelControl::startDrag(DockItem *item) } }); + connect(m_appDragWidget, &AppDragWidget::requestRemoveItem, this, [ = ] { + if (-1 != m_appAreaSonLayout->indexOf(item)) { + m_dragIndex = m_appAreaSonLayout->indexOf(item); + removeItem(item); + } + }); + appDrag->appDragWidget()->setOriginPos((m_appAreaSonWidget->mapToGlobal(item->pos()))); appDrag->appDragWidget()->setDockInfo(m_position, QRect(mapToGlobal(pos()), size())); const QPixmap &dragPix = qobject_cast(item)->appIcon(); From 2300b1250fe7a417446704fbeb6b2c04fca6c40e Mon Sep 17 00:00:00 2001 From: chenwei Date: Tue, 19 Jan 2021 14:06:10 +0800 Subject: [PATCH 10/30] =?UTF-8?q?fix:=20=E4=BB=BB=E5=8A=A1=E6=A0=8F?= =?UTF-8?q?=E8=93=9D=E7=89=99=E6=8F=92=E4=BB=B6=E6=97=A0=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 蓝牙第一次插入时电源状态有可能是错误的,导致任务栏蓝牙插件刷新按钮初始化错误,在蓝牙适配器电源状态改变时设置刷新按钮的显示状态 Log: 蓝牙插件刷新按钮去掉了无法刷新列表 Bug: https://pms.uniontech.com/zentao/bug-view-60828.html Change-Id: I2df971ffce5d2a4ce60c2835b540465c25890131 --- plugins/bluetooth/componments/bluetoothadapteritem.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/bluetooth/componments/bluetoothadapteritem.cpp b/plugins/bluetooth/componments/bluetoothadapteritem.cpp index ceb0a4c65..58323d5c7 100644 --- a/plugins/bluetooth/componments/bluetoothadapteritem.cpp +++ b/plugins/bluetooth/componments/bluetoothadapteritem.cpp @@ -293,6 +293,7 @@ void BluetoothAdapterItem::initConnect() connect(m_adapter, &Adapter::poweredChanged, this, [ = ] (bool state) { initData(); + m_refreshBtn->setVisible(state); m_deviceListview->setVisible(state); m_adapterStateBtn->setChecked(state); m_adapterStateBtn->setEnabled(true); From d2d80218eea44b72d9efd8fed60fc5c49a68ac9d Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Wed, 20 Jan 2021 10:49:16 +0800 Subject: [PATCH 11/30] feat: Optimize code structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化任务栏显示和隐藏时参数的计算方法。 Log: 调整任务栏代码结构。 Change-Id: I7c31f22e7e45e0c8660576f3271abe26825852ef --- frame/util/multiscreenworker.cpp | 209 ++++++++++--------------------- frame/util/multiscreenworker.h | 9 +- 2 files changed, 70 insertions(+), 148 deletions(-) diff --git a/frame/util/multiscreenworker.cpp b/frame/util/multiscreenworker.cpp index 9359e5739..7113fc7c5 100644 --- a/frame/util/multiscreenworker.cpp +++ b/frame/util/multiscreenworker.cpp @@ -1556,82 +1556,47 @@ MainWindow *MultiScreenWorker::parent() return static_cast(m_parent); } +/** + * @brief 获取任务栏显示时的参数。目前多屏情况下缩放保持一致,如果后续缩放规则修改,这里需要重新调整 + * + * @param screenName 当前屏幕名字 + * @param pos 任务栏位置 + * @param displaymode 任务栏显示模式 + * @param withoutScale 是否不考虑缩放(true:不考虑缩放; false:考虑缩放(默认)) + * @return QRect 任务栏参数 + */ QRect MultiScreenWorker::getDockShowGeometry(const QString &screenName, const Position &pos, const DisplayMode &displaymode, bool withoutScale) { - //!!! 注意,目前双屏情况下缩放保持一致,不会出现两个屏幕的缩放不一致的情况,如果后面出现了,那么这里可能会有问题 - const qreal scale = qApp->devicePixelRatio(); QRect rect; - if (withoutScale) {//后端真实大小 - foreach (Monitor *inter, m_mtrInfo.validMonitor()) { - if (inter->name() == screenName) { - // windowSizeFashion和windowSizeEfficient给出的值始终对应前端认为的界面高度或宽度(受缩放影响) - const int dockSize = int(displaymode == DisplayMode::Fashion ? m_dockInter->windowSizeFashion() : m_dockInter->windowSizeEfficient()) * scale; - switch (static_cast(pos)) { - case Top: { - rect.setX(inter->x() + WINDOWMARGIN); - rect.setY(inter->y() + WINDOWMARGIN); - rect.setWidth(inter->w() - 2 * WINDOWMARGIN); - rect.setHeight(dockSize); - } + const double ratio = withoutScale ? 1 : qApp->devicePixelRatio(); + const int margin = (displaymode == DisplayMode::Fashion) ? 10 : 0; + const int dockSize = static_cast((displaymode == DisplayMode::Fashion ? m_dockInter->windowSizeFashion() : m_dockInter->windowSizeEfficient()) * (withoutScale ? ratio : 1)); + for (Monitor *monitor : m_mtrInfo.validMonitor()) { + if (monitor->name() == screenName) { + switch (pos) { + case Position::Top: + rect.setX(static_cast(monitor->x() + margin * ratio)); + rect.setY(static_cast(monitor->y() + margin * ratio)); + rect.setWidth(static_cast(monitor->w() / ratio - 2 * margin * ratio)); + rect.setHeight(dockSize); break; - case Bottom: { - rect.setX(inter->x() + WINDOWMARGIN); - rect.setY(inter->y() + inter->h() - WINDOWMARGIN - dockSize); - rect.setWidth(inter->w() - 2 * WINDOWMARGIN); - rect.setHeight(dockSize); - } + case Position::Bottom: + rect.setX(static_cast(monitor->x() + margin * ratio)); + rect.setY(static_cast(monitor->y() + monitor->h() / ratio - margin * ratio - dockSize)); + rect.setWidth(static_cast(monitor->w() / ratio - 2 * margin * ratio)); + rect.setHeight(dockSize); break; - case Left: { - rect.setX(inter->x() + WINDOWMARGIN); - rect.setY(inter->y() + WINDOWMARGIN); - rect.setWidth(dockSize); - rect.setHeight(inter->h() - 2 * WINDOWMARGIN); - } + case Position::Left: + rect.setX(static_cast(monitor->x() + margin * ratio)); + rect.setY(static_cast(monitor->y() + margin * ratio)); + rect.setWidth(dockSize); + rect.setHeight(static_cast(monitor->h() / ratio - 2 * margin * ratio)); break; - case Right: { - rect.setX(inter->x() + inter->w() - WINDOWMARGIN - dockSize); - rect.setY(inter->y() + WINDOWMARGIN); - rect.setWidth(dockSize); - rect.setHeight(inter->h() - 2 * WINDOWMARGIN); - } - } - break; - } - } - } else {//前端真实大小 - foreach (Monitor *inter, m_mtrInfo.validMonitor()) { - if (inter->name() == screenName) { - // windowSizeFashion和windowSizeEfficient给出的值始终对应前端认为的界面高度或宽度(受缩放影响) - const int dockSize = int(displaymode == DisplayMode::Fashion ? m_dockInter->windowSizeFashion() : m_dockInter->windowSizeEfficient()); - switch (static_cast(pos)) { - case Top: { - rect.setX(inter->x() + WINDOWMARGIN); - rect.setY(inter->y() + WINDOWMARGIN); - rect.setWidth(inter->w() / scale - 2 * WINDOWMARGIN); - rect.setHeight(dockSize); - } - break; - case Bottom: { - rect.setX(inter->x() + WINDOWMARGIN); - rect.setY(inter->y() + inter->h() / scale - WINDOWMARGIN - dockSize); - rect.setWidth(inter->w() / scale - 2 * WINDOWMARGIN); - rect.setHeight(dockSize); - } - break; - case Left: { - rect.setX(inter->x() + WINDOWMARGIN); - rect.setY(inter->y() + WINDOWMARGIN); - rect.setWidth(dockSize); - rect.setHeight(inter->h() / scale - 2 * WINDOWMARGIN); - } - break; - case Right: { - rect.setX(inter->x() + inter->w() / scale - WINDOWMARGIN - dockSize); - rect.setY(inter->y() + WINDOWMARGIN); - rect.setWidth(dockSize); - rect.setHeight(inter->h() / scale - 2 * WINDOWMARGIN); - } - } + case Position::Right: + rect.setX(static_cast(monitor->x() + monitor->w() / ratio - margin * ratio - dockSize)); + rect.setY(static_cast(monitor->y() + margin * ratio)); + rect.setWidth(dockSize); + rect.setHeight(static_cast(monitor->h() / ratio - 2 * margin * ratio)); break; } } @@ -1639,83 +1604,47 @@ QRect MultiScreenWorker::getDockShowGeometry(const QString &screenName, const Po return rect; } +/** + * @brief 获取任务栏隐藏时的参数。目前多屏情况下缩放保持一致,如果后续缩放规则修改,这里需要重新调整 + * + * @param screenName 当前屏幕名字 + * @param pos 任务栏位置 + * @param displaymode 任务栏显示模式 + * @param withoutScale 是否不考虑缩放(true:不考虑缩放; false:考虑缩放(默认)) + * @return QRect 任务栏参数 + */ QRect MultiScreenWorker::getDockHideGeometry(const QString &screenName, const Position &pos, const DisplayMode &displaymode, bool withoutScale) { - //!!! 注意,目前双屏情况下缩放保持一致,不会出现两个屏幕的缩放不一致的情况,如果后面出现了,那么这里可能会有问题 - const qreal scale = qApp->devicePixelRatio(); QRect rect; - if (withoutScale) {//后端真实大小 - foreach (Monitor *inter, m_mtrInfo.validMonitor()) { - if (inter->name() == screenName) { - const int margin = (displaymode == DisplayMode::Fashion ? WINDOWMARGIN : 0); - - switch (static_cast(pos)) { - case Top: { - rect.setX(inter->x() + margin); - rect.setY(inter->y()); - rect.setWidth(inter->w() - 2 * margin); - rect.setHeight(0); - } + const double ratio = withoutScale ? 1 : qApp->devicePixelRatio(); + const int margin = (displaymode == DisplayMode::Fashion) ? 10 : 0; + for (Monitor *monitor : m_mtrInfo.validMonitor()) { + if (monitor->name() == screenName) { + switch (pos) { + case Position::Top: + rect.setX(static_cast(monitor->x() + margin * ratio)); + rect.setY(static_cast(monitor->y() + margin * ratio)); + rect.setWidth(static_cast(monitor->w() / ratio - 2 * margin * ratio)); + rect.setHeight(0); break; - case Bottom: { - rect.setX(inter->x() + margin); - rect.setY(inter->y() + inter->h()); - rect.setWidth(inter->w() - 2 * margin); - rect.setHeight(0); - } + case Position::Bottom: + rect.setX(static_cast(monitor->x() + margin * ratio)); + rect.setY(static_cast(monitor->y() + monitor->h() / ratio - margin * ratio)); + rect.setWidth(static_cast(monitor->w() / ratio - 2 * margin * ratio)); + rect.setHeight(0); break; - case Left: { - rect.setX(inter->x()); - rect.setY(inter->y() + margin); - rect.setWidth(0); - rect.setHeight(inter->h() - 2 * margin); - } + case Position::Left: + rect.setX(static_cast(monitor->x() + margin * ratio)); + rect.setY(static_cast(monitor->y() + margin * ratio)); + rect.setWidth(0); + rect.setHeight(static_cast(monitor->h() / ratio - 2 * margin * ratio)); break; - case Right: { - rect.setX(inter->x() + inter->w()); - rect.setY(inter->y() + margin); - rect.setWidth(0); - rect.setHeight(inter->h() - 2 * margin); - } + case Position::Right: + rect.setX(static_cast(monitor->x() + monitor->w() / ratio - margin * ratio)); + rect.setY(static_cast(monitor->y() + margin * ratio)); + rect.setWidth(0); + rect.setHeight(static_cast(monitor->h() / ratio - 2 * margin * ratio)); break; - } - } - } - } else {//前端真实大小 - foreach (Monitor *inter, m_mtrInfo.validMonitor()) { - if (inter->name() == screenName) { - const int margin = (displaymode == DisplayMode::Fashion ? WINDOWMARGIN : 0); - - switch (static_cast(pos)) { - case Top: { - rect.setX(inter->x() + margin); - rect.setY(inter->y()); - rect.setWidth(inter->w() / scale - 2 * margin); - rect.setHeight(0); - } - break; - case Bottom: { - rect.setX(inter->x() + margin); - rect.setY(inter->y() + inter->h() / scale); - rect.setWidth(inter->w() / scale - 2 * margin); - rect.setHeight(0); - } - break; - case Left: { - rect.setX(inter->x()); - rect.setY(inter->y() + margin); - rect.setWidth(0); - rect.setHeight(inter->h() / scale - 2 * margin); - } - break; - case Right: { - rect.setX(inter->x() + inter->w() / scale); - rect.setY(inter->y() + margin); - rect.setWidth(0); - rect.setHeight(inter->h() / scale - 2 * margin); - } - break; - } } } } diff --git a/frame/util/multiscreenworker.h b/frame/util/multiscreenworker.h index 4cdb7918f..470ab1376 100644 --- a/frame/util/multiscreenworker.h +++ b/frame/util/multiscreenworker.h @@ -422,14 +422,7 @@ private: void checkXEventMonitorService(); MainWindow *parent(); - /** - * @brief getDockShowGeometry 获取任务栏显示时的位置 - * @param screenName 当前屏幕名 - * @param pos 任务栏位置 - * @param displaymode 显示模式 - * @param real 接口是否计算算法,false为计算,true为不计算(与后端接口大小的形式保持一致.比如,后端给出的屏幕大小是不计算缩放的) - * @return - */ + QRect getDockShowGeometry(const QString &screenName, const Position &pos, const DisplayMode &displaymode, bool withoutScale = false); QRect getDockHideGeometry(const QString &screenName, const Position &pos, const DisplayMode &displaymode, bool withoutScale = false); From ff4aa3aa056924b4e18adf6f823c5fb3892ac386 Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Wed, 20 Jan 2021 15:04:33 +0800 Subject: [PATCH 12/30] =?UTF-8?q?fix:=20dockSize=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit dockSize是从dbus获取的 ,这个值的范围是40~100,无论系统是否开缩放,也就是说这是个前端认为的值, 当前端计算时,直接用这个值即可,但是当需要获取任务栏的真实高度时,需要将这个值乘缩放比例,才能获取到任务栏的真实高度。 Log: 修复任务栏高度计算错误。 Change-Id: Ifd88ad1abb9d21fb84b30a2737adb77c30e1cb80 --- frame/util/multiscreenworker.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frame/util/multiscreenworker.cpp b/frame/util/multiscreenworker.cpp index 7113fc7c5..55e4a9d36 100644 --- a/frame/util/multiscreenworker.cpp +++ b/frame/util/multiscreenworker.cpp @@ -1562,7 +1562,7 @@ MainWindow *MultiScreenWorker::parent() * @param screenName 当前屏幕名字 * @param pos 任务栏位置 * @param displaymode 任务栏显示模式 - * @param withoutScale 是否不考虑缩放(true:不考虑缩放; false:考虑缩放(默认)) + * @param withoutScale 是否考虑缩放(true:获取的是真实值; false:获取的是前端认为的值(默认)) * @return QRect 任务栏参数 */ QRect MultiScreenWorker::getDockShowGeometry(const QString &screenName, const Position &pos, const DisplayMode &displaymode, bool withoutScale) @@ -1570,7 +1570,7 @@ QRect MultiScreenWorker::getDockShowGeometry(const QString &screenName, const Po QRect rect; const double ratio = withoutScale ? 1 : qApp->devicePixelRatio(); const int margin = (displaymode == DisplayMode::Fashion) ? 10 : 0; - const int dockSize = static_cast((displaymode == DisplayMode::Fashion ? m_dockInter->windowSizeFashion() : m_dockInter->windowSizeEfficient()) * (withoutScale ? ratio : 1)); + const int dockSize = static_cast((displaymode == DisplayMode::Fashion ? m_dockInter->windowSizeFashion() : m_dockInter->windowSizeEfficient()) * (withoutScale ? qApp->devicePixelRatio() : 1)); for (Monitor *monitor : m_mtrInfo.validMonitor()) { if (monitor->name() == screenName) { switch (pos) { @@ -1610,7 +1610,7 @@ QRect MultiScreenWorker::getDockShowGeometry(const QString &screenName, const Po * @param screenName 当前屏幕名字 * @param pos 任务栏位置 * @param displaymode 任务栏显示模式 - * @param withoutScale 是否不考虑缩放(true:不考虑缩放; false:考虑缩放(默认)) + * @param withoutScale 是否考虑缩放(true:获取的是真实值; false:获取的是前端认为的值(默认)) * @return QRect 任务栏参数 */ QRect MultiScreenWorker::getDockHideGeometry(const QString &screenName, const Position &pos, const DisplayMode &displaymode, bool withoutScale) From 0432a458bc2c60091c5ed190303f4d2583c2b0e8 Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Wed, 20 Jan 2021 15:33:15 +0800 Subject: [PATCH 13/30] =?UTF-8?q?fix:=20=E7=BD=91=E7=BB=9C=E4=B8=BA?= =?UTF-8?q?=E5=85=B3=E9=97=AD=E7=8A=B6=E6=80=81=E6=97=B6=E7=BD=91=E7=BB=9C?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=9C=AA=E9=9A=90=E8=97=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 网络为关闭状态时,隐藏有线网络列表。 Log: 修复网络为关闭状态时网络列表未隐藏的问题。 Bug: https://pms.uniontech.com/zentao/bug-view-61304.html Change-Id: Ie5963e4e136646f84fe2f8855b53ac14b3bc0001 --- plugins/network/networkitem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/network/networkitem.cpp b/plugins/network/networkitem.cpp index a9a3d8e64..b1c1d431f 100644 --- a/plugins/network/networkitem.cpp +++ b/plugins/network/networkitem.cpp @@ -477,9 +477,9 @@ void NetworkItem::wiredsEnable(bool enable) for (auto wiredItem : m_wiredItems) { if (wiredItem) { wiredItem->setDeviceEnabled(enable); + wiredItem->setVisible(enable); } } -// updateSelf(); } void NetworkItem::wirelessEnable(bool enable) From dc7fb6e8247bcc61d1bc9b79f3041499bc0bbdf5 Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Wed, 20 Jan 2021 17:53:52 +0800 Subject: [PATCH 14/30] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E7=82=B9?= =?UTF-8?q?=E5=87=BB=E5=9B=9E=E6=94=B6=E7=AB=99=E5=9B=BE=E6=A0=87=E8=A1=8C?= =?UTF-8?q?=E4=B8=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 之前是调用命令打开回收站,现改为调用dtk接口,多次点击只会弹出一个回收站窗口。 Log: 修改点击任务栏回收站图标行为。 Task: https://pms.uniontech.com/zentao/task-view-58313.html Change-Id: I6c686f60d466e51b763c7157fa2148ccb41fc0ee --- plugins/trash/trashplugin.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/trash/trashplugin.cpp b/plugins/trash/trashplugin.cpp index 7474f7ee4..1fd74fd00 100644 --- a/plugins/trash/trashplugin.cpp +++ b/plugins/trash/trashplugin.cpp @@ -28,6 +28,7 @@ #include "../../widgets/tipswidget.h" #include +#include #define PLUGIN_STATE_KEY "enable" @@ -110,9 +111,10 @@ QWidget *TrashPlugin::itemPopupApplet(const QString &itemKey) const QString TrashPlugin::itemCommand(const QString &itemKey) { Q_UNUSED(itemKey); + DDesktopServices::showFolder(QUrl("trash:///")); -// return QString(); - return "gio open trash:///"; + return QString(); + // return "gio open trash:///"; } const QString TrashPlugin::itemContextMenu(const QString &itemKey) From be8d82f255064f9b68d230e213cac9422a2a1a5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83=E6=9C=8B=E7=A8=8B?= Date: Tue, 26 Jan 2021 16:59:07 +0800 Subject: [PATCH 15/30] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9dde=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E4=B9=8B=E9=97=B4=E7=9A=84=E4=BE=9D=E8=B5=96=E5=85=B3?= =?UTF-8?q?=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit dde-dock依赖后端的指定版本,应在control中表明, Log: 修改dde应用之间的依赖关系 Task: https://pms.uniontech.com/zentao/task-view-58524.html Change-Id: I231a9053040c02fb5a3c7c2345446dd477f21e8a --- debian/control | 3 +++ 1 file changed, 3 insertions(+) diff --git a/debian/control b/debian/control index a68d578ca..203a78c1a 100644 --- a/debian/control +++ b/debian/control @@ -35,6 +35,9 @@ Depends: ${shlibs:Depends}, ${misc:Depends}, libdframeworkdbus2 (>=5.3.0.24), libdde-network-utils (>=5.3.0.5), dde-qt5xcb-plugin, + dde-daemon (>=5.12.0.31), + startdde (>=5.6.0.34), + lastore-daemon (>=5.1.0.21) Recommends: dde-disk-mount-plugin, dde-dock-onboard-plugin Conflicts: dde-workspace (<< 2.90.5), From 625f6ba2b9163bfedb12a4941b6a43d7166f39d2 Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Thu, 21 Jan 2021 15:31:25 +0800 Subject: [PATCH 16/30] =?UTF-8?q?feat:=20=E4=BB=BB=E5=8A=A1=E6=A0=8F?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E6=A8=A1=E5=BC=8F=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当任务栏9分钟内累计崩溃3次进入安全模式后,发出通知,用户点击通知中的退出安全模式,任务栏重新加载插件。 Log: 新增任务栏安全模式通知。 Task: https://pms.uniontech.com/zentao/task-view-58411.html Change-Id: I06b65ce4fdea29b635ff2af2dda0d0199035f4e8 --- frame/dbus/dbusdockadaptors.cpp | 6 ++++- frame/dbus/dbusdockadaptors.h | 2 ++ frame/main.cpp | 46 +++++++++++++++++++++++++-------- frame/window/mainwindow.cpp | 37 ++++++++++++++++++++++++++ frame/window/mainwindow.h | 2 ++ 5 files changed, 81 insertions(+), 12 deletions(-) diff --git a/frame/dbus/dbusdockadaptors.cpp b/frame/dbus/dbusdockadaptors.cpp index a2d7bb390..c6d8abeef 100644 --- a/frame/dbus/dbusdockadaptors.cpp +++ b/frame/dbus/dbusdockadaptors.cpp @@ -45,8 +45,12 @@ void DBusDockAdaptors::callShow() return parent()->callShow(); } +void DBusDockAdaptors::ReloadPlugins() +{ + return parent()->relaodPlugins(); +} + QRect DBusDockAdaptors::geometry() const { return parent()->geometry(); } - diff --git a/frame/dbus/dbusdockadaptors.h b/frame/dbus/dbusdockadaptors.h index 4c5f6d97b..e98af2f24 100644 --- a/frame/dbus/dbusdockadaptors.h +++ b/frame/dbus/dbusdockadaptors.h @@ -37,6 +37,7 @@ class DBusDockAdaptors: public QDBusAbstractAdaptor " \n" " \n" " " + " " " " "" "" @@ -51,6 +52,7 @@ public: public Q_SLOTS: // METHODS void callShow(); + void ReloadPlugins(); public: // PROPERTIES Q_PROPERTY(QRect geometry READ geometry NOTIFY geometryChanged) diff --git a/frame/main.cpp b/frame/main.cpp index b244884f0..278e8b849 100644 --- a/frame/main.cpp +++ b/frame/main.cpp @@ -64,15 +64,14 @@ bool IsSaveMode() QSettings settings(g_cfgPath, QSettings::IniFormat); settings.beginGroup(qApp->applicationName()); int collapseNum = settings.value("collapse").toInt(); - - // 自动进入安全模式 + /* 崩溃次数达到3次,进入安全模式(不加载插件) */ if (collapseNum >= 3) { + settings.remove(""); // 删除记录的数据 settings.setValue("collapse", 0); settings.endGroup(); settings.sync(); return true; } - return false; } @@ -95,16 +94,38 @@ bool IsSaveMode() QSettings settings(g_cfgPath, QSettings::IniFormat); settings.beginGroup("dde-dock"); - QDateTime lastDate = QDateTime::fromString(settings.value("lastDate").toString(), "yyyy-MM-dd hh:mm:ss:zzz"); int collapseNum = settings.value("collapse").toInt(); - - // 10秒以内发生崩溃则累加,记录到文件中 - if (qAbs(lastDate.secsTo(QDateTime::currentDateTime())) < 10) { - settings.setValue("collapse", collapseNum + 1); - } else { - settings.setValue("collapse", 0); + /* 第一次崩溃或进入安全模式后的第一次崩溃,将时间重置 */ + if (collapseNum == 0) { + settings.setValue("first_time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")); } - settings.setValue("lastDate", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")); + QDateTime lastDate = QDateTime::fromString(settings.value("first_time").toString(), "yyyy-MM-dd hh:mm:ss:zzz"); + /* 将当前崩溃时间与第一次崩溃时间比较,小于9分钟,记录一次崩溃;大于9分钟,覆盖之前的崩溃时间 */ + if (qAbs(lastDate.secsTo(QDateTime::currentDateTime())) < 9 * 60) { + settings.setValue("collapse", collapseNum + 1); + switch (collapseNum) { + case 0: + settings.setValue("first_time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")); + break; + case 1: + settings.setValue("second_time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")); + break; + case 2: + settings.setValue("third_time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")); + break; + default: + qDebug() << "Error, the collapse is wrong!"; + break; + } + } else { + if (collapseNum == 2){ + settings.setValue("first_time", settings.value("second_time").toString()); + settings.setValue("second_time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")); + } else { + settings.setValue("first_time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")); + } + } + settings.endGroup(); settings.sync(); @@ -243,6 +264,9 @@ int main(int argc, char *argv[]) if (!IsSaveMode() && !parser.isSet(disablePlugOption)) { DockItemManager::instance()->startLoadPlugins(); + qApp->setProperty("PLUGINSLOADED", true); + } else { + mw.sendNotifications(); } return app.exec(); diff --git a/frame/window/mainwindow.cpp b/frame/window/mainwindow.cpp index 9995e7126..65b7579b2 100755 --- a/frame/window/mainwindow.cpp +++ b/frame/window/mainwindow.cpp @@ -187,6 +187,16 @@ void MainWindow::callShow() }); } +void MainWindow::relaodPlugins() +{ + if (qApp->property("PLUGINSLOADED").toBool()) { + return; + } + + DockItemManager::instance()->startLoadPlugins(); + qApp->setProperty("PLUGINSLOADED", true); +} + void MainWindow::showEvent(QShowEvent *e) { QWidget::showEvent(e); @@ -566,4 +576,31 @@ void MainWindow::setGeometry(const QRect &rect) emit panelGeometryChanged(); } +/** + * @brief 当进入安全模式时,通过此方法发送通知告知用户 + */ +void MainWindow::sendNotifications() +{ + QStringList actionButton; + actionButton << "reload" << tr("Exit Safe Mode"); + QVariantMap hints; + hints["x-deepin-action-reload"] = QString("dbus-send,--session,--dest=com.deepin.dde.Dock,--print-reply,/com/deepin/dde/Dock,com.deepin.dde.Dock.ReloadPlugins"); + QTimer::singleShot(0, this, [=] { + DDBusSender() + .service("com.deepin.dde.Notification") + .path("/com/deepin/dde/Notification") + .interface("com.deepin.dde.Notification") + .method(QString("Notify")) + .arg(QCoreApplication::applicationName()) // appname + .arg(static_cast(0)) // id + .arg(QString("preferences-system")) // icon + .arg(QString(tr("Dock - Safe Mode"))) // summary + .arg(tr("The Dock is in safe mode, please exit to show it properly")) // content + .arg(actionButton) // actions + .arg(hints) // hints + .arg(15000) // timeout + .call(); + }); +} + #include "mainwindow.moc" diff --git a/frame/window/mainwindow.h b/frame/window/mainwindow.h index 0496f1f8a..a374582f6 100644 --- a/frame/window/mainwindow.h +++ b/frame/window/mainwindow.h @@ -122,6 +122,7 @@ public: void setEffectEnabled(const bool enabled); void setComposite(const bool hasComposite); void setGeometry(const QRect &rect); + void sendNotifications(); friend class MainPanel; friend class MainPanelControl; @@ -131,6 +132,7 @@ public: public slots: void launch(); void callShow(); + void relaodPlugins(); private: using QWidget::show; From a8dbbb7768976717850c2db379c642b6519a6b9a Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Wed, 27 Jan 2021 15:19:29 +0800 Subject: [PATCH 17/30] feat: Update translation files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新翻译。 Log: 更新翻译。 Change-Id: Ic26f9194f5b7e123b9a5ce9c4dbcf7741ddd9fb5 --- translations/dde-dock.ts | 21 ++- translations/dde-dock_ar.ts | 15 ++ translations/dde-dock_az.ts | 326 +++++++++++++++++++++++---------- translations/dde-dock_bo.ts | 17 +- translations/dde-dock_ca.ts | 15 ++ translations/dde-dock_cs.ts | 15 ++ translations/dde-dock_da.ts | 15 ++ translations/dde-dock_de.ts | 15 ++ translations/dde-dock_en_AU.ts | 15 ++ translations/dde-dock_es.ts | 17 +- translations/dde-dock_fa.ts | 15 ++ translations/dde-dock_fi.ts | 15 ++ translations/dde-dock_fr.ts | 19 +- translations/dde-dock_gl_ES.ts | 15 ++ translations/dde-dock_hi_IN.ts | 15 ++ translations/dde-dock_hr.ts | 15 ++ translations/dde-dock_hu.ts | 15 ++ translations/dde-dock_it.ts | 15 ++ translations/dde-dock_ja.ts | 15 ++ translations/dde-dock_ko.ts | 15 ++ translations/dde-dock_lt.ts | 15 ++ translations/dde-dock_ms.ts | 15 ++ translations/dde-dock_nl.ts | 15 ++ translations/dde-dock_pl.ts | 15 ++ translations/dde-dock_pt.ts | 17 +- translations/dde-dock_pt_BR.ts | 15 ++ translations/dde-dock_ro.ts | 15 ++ translations/dde-dock_ru.ts | 17 +- translations/dde-dock_si.ts | 15 ++ translations/dde-dock_sk.ts | 15 ++ translations/dde-dock_sl.ts | 19 +- translations/dde-dock_sq.ts | 15 ++ translations/dde-dock_sr.ts | 15 ++ translations/dde-dock_tr.ts | 15 ++ translations/dde-dock_ug.ts | 15 ++ translations/dde-dock_uk.ts | 15 ++ translations/dde-dock_vi.ts | 15 ++ translations/dde-dock_zh_CN.ts | 15 ++ translations/dde-dock_zh_HK.ts | 15 ++ translations/dde-dock_zh_TW.ts | 15 ++ 40 files changed, 824 insertions(+), 109 deletions(-) diff --git a/translations/dde-dock.ts b/translations/dde-dock.ts index 98aeabbea..382988a8d 100644 --- a/translations/dde-dock.ts +++ b/translations/dde-dock.ts @@ -1,4 +1,6 @@ - + + + AbstractPluginsController @@ -151,6 +153,21 @@ Launcher + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker @@ -488,4 +505,4 @@ Wireless Network %1 - \ No newline at end of file + diff --git a/translations/dde-dock_ar.ts b/translations/dde-dock_ar.ts index 853cfd770..8a4616e25 100644 --- a/translations/dde-dock_ar.ts +++ b/translations/dde-dock_ar.ts @@ -151,6 +151,21 @@ المُطلق + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_az.ts b/translations/dde-dock_az.ts index 9ffc5027a..6181cc7c5 100644 --- a/translations/dde-dock_az.ts +++ b/translations/dde-dock_az.ts @@ -3,55 +3,107 @@ AbstractPluginsController The plugin %1 is not compatible with the system. - + %1 qoşması sistem ilə uyğun deyil. + + + + AppDragWidget + + Remove + Silmək + + + + BluetoothApplet + + Bluetooth settings + Bluetooth ayarları + + + + BluetoothItem + + Turn off + Söndürmək + + + Turn on + Açmaq + + + Bluetooth settings + Bluetooth ayarları + + + %1 connected + %1 qoşuldu + + + Connecting... + Qoşulur... + + + Bluetooth + Bluetooth + + + Turned off + Söndürüldü + + + + BluetoothPlugin + + Bluetooth + Bluetooth DBusAdaptors Add keyboard layout - + Klaviatura qatı əlavə etmək DatetimePlugin Datetime - + Tarix və vaxt - 12 Hour Time - + 12-hour time + 12 saat vaxt formatı - 24 Hour Time - + 24-hour time + 24 saat vaxt formatı - Time Settings - + Time settings + Vaxt ayarları DeviceItem Enable network - + Şəbəkəni açmaq Disable network - + Şəbəkəni söndürmək Network settings - + Şəbəkə ayarları DialogManager Are you sure you want to empty %1 items? - + %1 elementi boşaltmaq istədiyinizə əminsiniz? Cancel @@ -59,22 +111,22 @@ Delete - Sil + Silmək This action cannot be restored - + Bu əməliyyat bərpa edilə bilməz DiskControlItem Unknown device - + Naməlum cihaz Unknown volume - + Naməlum həcm @@ -89,18 +141,40 @@ Unmount all + Hamısını çıxartmaq + + + + LauncherItem + + Launcher + Başladıcı + + + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly - DockSettings + MenuWorker Fashion Mode - + Müasir rejim Efficient Mode - + Səmərəli rejim Top @@ -120,19 +194,19 @@ Keep Shown - + Görünsün Keep Hidden - + Gizlədilsin Smart Hide - + Ağıllı gizlətmə Mode - + Rejim Location @@ -140,29 +214,93 @@ Status - + Vəziyyəti Plugins Qoşmalar - - LauncherItem - - Launcher - Başladıcı - - MultitaskingPlugin Multitasking View - + Çoxtapşırıqlı görünüş Undock - + Ayırmaq + + + + NetworkItem + + Disable wired connection + Simli bağlantını söndürmək + + + Enable wired connection + Simli bağlantını qoşmaq + + + Disable wireless connection + Simsiz bağlantını söndürmək + + + Enable wireless connection + Simsiz bağlantını qoşmaq + + + Disable network + Şəbəkəni söndürmək + + + Enable network + Şəbəkəni qoşmaq + + + Network settings + Şəbəkə ayarları + + + Device disabled + Cihaz söndürülüb + + + Wireless connection: %1 + Simsiz bağlantı: %1 + + + Wired connection: %1 + Simli bağlantı: %1 + + + Not connected + Qoşulmayıb + + + Connecting + Bağlanılır + + + Connected but no Internet access + Qoşulub, lakin internetə giriş yoxdur + + + Network cable unplugged + Şəbəkə kabeli çıxarılıb + + + Wireless Network + Simsiz şəbəkə + + + Wired Network + Simli şəbəkə + + + Connection failed + Qoşulma alınmadı @@ -171,12 +309,20 @@ Network Şəbəkə + + Wired Network + Simli şəbəkə + + + Wired Network %1 + %1 Simli şəbəkəsi + OnboardPlugin Onboard - + Ekran Klaviaturası Settings @@ -187,35 +333,47 @@ PowerPlugin Power - + Elektrik qidalanması Power settings - + Elektrik enerjisi ayarları Capacity %1, %2 min remaining - + Tutum %1, %2 dəq qalır Capacity %1, %2 hr %3 min remaining - - - - Charged %1 - + Tutum %1, %2 saat %3 dəq qalır Charging %1, %2 min until full - + Yüklənmə %1, dolmağa %2 dəq qalır Charging %1, %2 hr %3 min until full - + Yüklənmə %1, dolmağa %2 saat %3 dəq qalır - Charging %1 .... - + Charged + Yükləndi + + + Capacity %1 + Tutum %1 + + + Charging %1 + Yüklənmə %1 + + + Capacity %1 ... + Tutum %1... + + + Capacity %1, fully charged + Tutum %1, tam yükləndi @@ -226,46 +384,46 @@ Undock - + Ayırmaq ShutdownPlugin Power - + Elektrik qidalanması Shut down Sistemi söndür - - Restart - Yenidən başlat - Suspend Gözlət Hibernate - + Yuxu rejimi Lock - + Kilidləmək Log out - + Çıxış Switch account - + Hesabı dəyişmək Power settings - + Elektrik enerjisi ayarları + + + Reboot + Yenidən başlatmaq @@ -274,28 +432,24 @@ Device Avadanlıq - - Application - - SoundItem Unmute - + Susdurmaq Mute Səssiz - Audio Settings - + Sound settings + Səs ayarları - Current Volume %1 - + Volume %1 + Səs %1 @@ -313,11 +467,11 @@ Trash - %1 file - + Səbət - %1 fayl Trash - %1 files - + Səbət - %1 fayl @@ -328,51 +482,25 @@ Empty - + Boş TrayPlugin System Tray - - - - - WiredItem - - Unknown - Naməlum - - - Wired connection: %1 - - - - - WirelessItem - - No Network - - - - Wireless Connection: %1 - - - - Connected but no Internet access - + Sistem çubuğu WirelessList Wireless Network - + Simsiz şəbəkə Wireless Network %1 - + Simsiz şəbəkə %1 \ No newline at end of file diff --git a/translations/dde-dock_bo.ts b/translations/dde-dock_bo.ts index a58dbf309..dfc057fc8 100644 --- a/translations/dde-dock_bo.ts +++ b/translations/dde-dock_bo.ts @@ -151,6 +151,21 @@ འགོ་སློང་ཆས། + + MainWindow + + Exit Safe Mode + བདེ་འཇགས་དཔེ་རྣམ་ལས་ཕྱིར་དོན་པ། + + + Dock - Safe Mode + ལས་འགན་ཚན་བྱང་གི་བདེ་འཇགས་དཔེ་རྣམ། + + + The Dock is in safe mode, please exit to show it properly + ལས་འགན་ཚན་བྱང་བདེ་འཇགས་དཔེ་རྣམ་ནང་མཛུལ་ཟིན་པས། བདེ་འཇགས་དཔེ་རྣམ་ལས་ཕྱིར་དོན་རྗེས་རྒྱུན་ལྡན་ལྟར་ཤར་ཐུབ། + + MenuWorker @@ -285,7 +300,7 @@ Connection failed - + འབྲེལ་མཐུད་བྱེད་མ་ཐུབ། diff --git a/translations/dde-dock_ca.ts b/translations/dde-dock_ca.ts index f5d4c2770..ae5f3f589 100644 --- a/translations/dde-dock_ca.ts +++ b/translations/dde-dock_ca.ts @@ -151,6 +151,21 @@ Llançador + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_cs.ts b/translations/dde-dock_cs.ts index 83855082e..ca1603639 100644 --- a/translations/dde-dock_cs.ts +++ b/translations/dde-dock_cs.ts @@ -151,6 +151,21 @@ Spouštěč + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_da.ts b/translations/dde-dock_da.ts index 131edd9c4..e6595149b 100644 --- a/translations/dde-dock_da.ts +++ b/translations/dde-dock_da.ts @@ -151,6 +151,21 @@ Programstarter + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_de.ts b/translations/dde-dock_de.ts index ade0e3495..958752ea9 100644 --- a/translations/dde-dock_de.ts +++ b/translations/dde-dock_de.ts @@ -151,6 +151,21 @@ Starter + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_en_AU.ts b/translations/dde-dock_en_AU.ts index 1b1673d18..4e6d40f26 100644 --- a/translations/dde-dock_en_AU.ts +++ b/translations/dde-dock_en_AU.ts @@ -151,6 +151,21 @@ Launcher + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_es.ts b/translations/dde-dock_es.ts index f56411f9c..50bd6f857 100644 --- a/translations/dde-dock_es.ts +++ b/translations/dde-dock_es.ts @@ -151,6 +151,21 @@ Lanzador + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker @@ -285,7 +300,7 @@ Connection failed - + Conexión fallida diff --git a/translations/dde-dock_fa.ts b/translations/dde-dock_fa.ts index e03fce3ef..370da92e0 100644 --- a/translations/dde-dock_fa.ts +++ b/translations/dde-dock_fa.ts @@ -151,6 +151,21 @@ لانچر + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_fi.ts b/translations/dde-dock_fi.ts index 187c4e1e4..e3d342e08 100644 --- a/translations/dde-dock_fi.ts +++ b/translations/dde-dock_fi.ts @@ -151,6 +151,21 @@ Käynnistin + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_fr.ts b/translations/dde-dock_fr.ts index c9df92bd9..db1c34a88 100644 --- a/translations/dde-dock_fr.ts +++ b/translations/dde-dock_fr.ts @@ -151,6 +151,21 @@ Lanceur + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker @@ -253,11 +268,11 @@ Wireless connection: %1 - Connexion sans fil: %1 + Connexion sans fil : %1 Wired connection: %1 - Connexion filaire: %1 + Connexion filaire : %1 Not connected diff --git a/translations/dde-dock_gl_ES.ts b/translations/dde-dock_gl_ES.ts index 5302f8f44..7ed122a24 100644 --- a/translations/dde-dock_gl_ES.ts +++ b/translations/dde-dock_gl_ES.ts @@ -151,6 +151,21 @@ Lanzador + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_hi_IN.ts b/translations/dde-dock_hi_IN.ts index 54080fabf..154d4270a 100644 --- a/translations/dde-dock_hi_IN.ts +++ b/translations/dde-dock_hi_IN.ts @@ -151,6 +151,21 @@ लॉन्चर + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_hr.ts b/translations/dde-dock_hr.ts index e891a4928..96a07bed1 100644 --- a/translations/dde-dock_hr.ts +++ b/translations/dde-dock_hr.ts @@ -151,6 +151,21 @@ Pokretač + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_hu.ts b/translations/dde-dock_hu.ts index 7b0128d46..ae9807ad9 100644 --- a/translations/dde-dock_hu.ts +++ b/translations/dde-dock_hu.ts @@ -151,6 +151,21 @@ Indító + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_it.ts b/translations/dde-dock_it.ts index 6495d8838..12ce9e875 100644 --- a/translations/dde-dock_it.ts +++ b/translations/dde-dock_it.ts @@ -151,6 +151,21 @@ Launcher + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_ja.ts b/translations/dde-dock_ja.ts index 30b2324e9..d66833e06 100644 --- a/translations/dde-dock_ja.ts +++ b/translations/dde-dock_ja.ts @@ -151,6 +151,21 @@ ランチャー + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_ko.ts b/translations/dde-dock_ko.ts index 6a7e3f201..ca6c3589a 100644 --- a/translations/dde-dock_ko.ts +++ b/translations/dde-dock_ko.ts @@ -151,6 +151,21 @@ 실행도구 + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_lt.ts b/translations/dde-dock_lt.ts index 7dee3fb13..04384f9c4 100644 --- a/translations/dde-dock_lt.ts +++ b/translations/dde-dock_lt.ts @@ -151,6 +151,21 @@ Leistukas + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_ms.ts b/translations/dde-dock_ms.ts index ef364edaf..cdf8321d1 100644 --- a/translations/dde-dock_ms.ts +++ b/translations/dde-dock_ms.ts @@ -151,6 +151,21 @@ Pelancar + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_nl.ts b/translations/dde-dock_nl.ts index aa3714247..ceb6ca158 100644 --- a/translations/dde-dock_nl.ts +++ b/translations/dde-dock_nl.ts @@ -151,6 +151,21 @@ Programmastarter + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_pl.ts b/translations/dde-dock_pl.ts index 32d496a64..364301f89 100644 --- a/translations/dde-dock_pl.ts +++ b/translations/dde-dock_pl.ts @@ -151,6 +151,21 @@ Launcher + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_pt.ts b/translations/dde-dock_pt.ts index fe6296e7c..b8b610b92 100644 --- a/translations/dde-dock_pt.ts +++ b/translations/dde-dock_pt.ts @@ -17,7 +17,7 @@ BluetoothApplet Bluetooth settings - Definições bluetooth + Definições Bluetooth @@ -151,6 +151,21 @@ Lançador + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_pt_BR.ts b/translations/dde-dock_pt_BR.ts index b7c5229e6..9ad387241 100644 --- a/translations/dde-dock_pt_BR.ts +++ b/translations/dde-dock_pt_BR.ts @@ -151,6 +151,21 @@ Lançador + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_ro.ts b/translations/dde-dock_ro.ts index c62dc3bba..2642db4dd 100644 --- a/translations/dde-dock_ro.ts +++ b/translations/dde-dock_ro.ts @@ -151,6 +151,21 @@ Lansator + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_ru.ts b/translations/dde-dock_ru.ts index 989d84915..306ef5026 100644 --- a/translations/dde-dock_ru.ts +++ b/translations/dde-dock_ru.ts @@ -151,6 +151,21 @@ Выбор Программ + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker @@ -285,7 +300,7 @@ Connection failed - + Ошибка подключения diff --git a/translations/dde-dock_si.ts b/translations/dde-dock_si.ts index 38729ccb2..926765562 100644 --- a/translations/dde-dock_si.ts +++ b/translations/dde-dock_si.ts @@ -151,6 +151,21 @@ රදවනය + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_sk.ts b/translations/dde-dock_sk.ts index 527019707..86802cb0a 100644 --- a/translations/dde-dock_sk.ts +++ b/translations/dde-dock_sk.ts @@ -151,6 +151,21 @@ Spúšťač + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_sl.ts b/translations/dde-dock_sl.ts index fbdf262ec..67ed1a23b 100644 --- a/translations/dde-dock_sl.ts +++ b/translations/dde-dock_sl.ts @@ -10,7 +10,7 @@ AppDragWidget Remove - + Odstrani @@ -151,6 +151,21 @@ Zaganjalnik + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker @@ -285,7 +300,7 @@ Connection failed - + Povezava ni uspela diff --git a/translations/dde-dock_sq.ts b/translations/dde-dock_sq.ts index da091838d..b8bf62c3d 100644 --- a/translations/dde-dock_sq.ts +++ b/translations/dde-dock_sq.ts @@ -151,6 +151,21 @@ Nisës + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_sr.ts b/translations/dde-dock_sr.ts index 7fb75a3a9..6f9287b92 100644 --- a/translations/dde-dock_sr.ts +++ b/translations/dde-dock_sr.ts @@ -151,6 +151,21 @@ Покретач Програма + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_tr.ts b/translations/dde-dock_tr.ts index 8b3830c60..e363fad48 100644 --- a/translations/dde-dock_tr.ts +++ b/translations/dde-dock_tr.ts @@ -151,6 +151,21 @@ Başlatıcı + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_ug.ts b/translations/dde-dock_ug.ts index 7541f79af..e73d0be7c 100644 --- a/translations/dde-dock_ug.ts +++ b/translations/dde-dock_ug.ts @@ -151,6 +151,21 @@ ئۈستەليۈزى قوزغاتقۇچ + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_uk.ts b/translations/dde-dock_uk.ts index 92e40cd9e..b0a1cf63a 100644 --- a/translations/dde-dock_uk.ts +++ b/translations/dde-dock_uk.ts @@ -151,6 +151,21 @@ Запускач + + MainWindow + + Exit Safe Mode + Вийти з безпечного режиму + + + Dock - Safe Mode + Док-станція — безпечний режим + + + The Dock is in safe mode, please exit to show it properly + Док-станція перебуває у безпечному режимі — будь ласка, вийдіть з нього для належного показу + + MenuWorker diff --git a/translations/dde-dock_vi.ts b/translations/dde-dock_vi.ts index a34e34418..d398d39b4 100644 --- a/translations/dde-dock_vi.ts +++ b/translations/dde-dock_vi.ts @@ -151,6 +151,21 @@ Khởi chạy + + MainWindow + + Exit Safe Mode + + + + Dock - Safe Mode + + + + The Dock is in safe mode, please exit to show it properly + + + MenuWorker diff --git a/translations/dde-dock_zh_CN.ts b/translations/dde-dock_zh_CN.ts index d2ef5acb1..399b3eefe 100644 --- a/translations/dde-dock_zh_CN.ts +++ b/translations/dde-dock_zh_CN.ts @@ -151,6 +151,21 @@ 启动器 + + MainWindow + + Exit Safe Mode + 退出安全模式 + + + Dock - Safe Mode + 任务栏安全模式 + + + The Dock is in safe mode, please exit to show it properly + 任务栏已进入安全模式,退出安全模式后即可正常显示 + + MenuWorker diff --git a/translations/dde-dock_zh_HK.ts b/translations/dde-dock_zh_HK.ts index c67c98581..2d5b862fc 100644 --- a/translations/dde-dock_zh_HK.ts +++ b/translations/dde-dock_zh_HK.ts @@ -151,6 +151,21 @@ 啟動器 + + MainWindow + + Exit Safe Mode + 退出安全模式 + + + Dock - Safe Mode + 任務欄安全模式 + + + The Dock is in safe mode, please exit to show it properly + 任務欄已進入安全模式,退出安全模式後即可正常顯示 + + MenuWorker diff --git a/translations/dde-dock_zh_TW.ts b/translations/dde-dock_zh_TW.ts index 62002c67d..a42ff362d 100644 --- a/translations/dde-dock_zh_TW.ts +++ b/translations/dde-dock_zh_TW.ts @@ -151,6 +151,21 @@ 啟動器 + + MainWindow + + Exit Safe Mode + 退出安全模式 + + + Dock - Safe Mode + 任務欄安全模式 + + + The Dock is in safe mode, please exit to show it properly + 任務欄已進入安全模式,退出安全模式後即可正常顯示 + + MenuWorker From dd54b212f36a99c3ecaefbd261430edf30639709 Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Wed, 27 Jan 2021 17:08:44 +0800 Subject: [PATCH 18/30] =?UTF-8?q?fix:=20=E5=B1=8F=E5=B9=95=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit display 服务中获取的屏幕宽高在旋转屏幕的特殊场景下会出错(宽高写反了), 故通过这个方法直接从 x 获取正确的值。 Log: 修复任务栏高度异常的问题。 Bug: https://pms.uniontech.com/zentao/bug-view-60892.html Change-Id: I5a2030e32b41ce3c5f08d22f5750124feecda5c4 --- frame/util/multiscreenworker.cpp | 34 +++++++++++++++++++++++++++++++- frame/util/multiscreenworker.h | 1 + 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/frame/util/multiscreenworker.cpp b/frame/util/multiscreenworker.cpp index 55e4a9d36..5c04dbe51 100644 --- a/frame/util/multiscreenworker.cpp +++ b/frame/util/multiscreenworker.cpp @@ -207,6 +207,7 @@ void MultiScreenWorker::handleDbusSignal(QDBusMessage msg) m_screenRawWidth = m_displayInter->screenWidth(); } } + updateScreenSize(); } } @@ -742,6 +743,8 @@ void MultiScreenWorker::onRequestUpdateFrontendGeometry() void MultiScreenWorker::onRequestNotifyWindowManager() { static QRect lastRect = QRect(); + static int lastScreenWith = 0; + static int lastScreenHeight = 0; const auto ratio = qApp->devicePixelRatio(); QRect rect; @@ -752,9 +755,11 @@ void MultiScreenWorker::onRequestNotifyWindowManager() } // 已经设置过了,避免重复设置 - if (rect == lastRect) + if (rect == lastRect && lastScreenWith == m_screenRawWidth && lastScreenHeight == m_screenRawHeight) return; lastRect = rect; + lastScreenWith = m_screenRawWidth; + lastScreenHeight = m_screenRawHeight; qDebug() << "dock geometry:" << rect; // 先清除原先的窗管任务栏区域 @@ -1098,6 +1103,7 @@ void MultiScreenWorker::initDBus() m_screenRawWidth = m_displayInter->screenWidth(); m_ds = DockScreen(m_displayInter->primary()); m_mtrInfo.setPrimary(m_displayInter->primary()); + updateScreenSize(); } } @@ -1730,6 +1736,32 @@ const QPoint MultiScreenWorker::rawXPosition(const QPoint &scaledPos) : scaledPos; } +/** + * @brief 通过 xcb 获取屏幕的宽高。 + * display 服务中获取的屏幕宽高在旋转屏幕的特殊场景下会出错(宽高写反了),故通过这个方法修正, + * 后续 display 服务的数据正常后,这个方法可以用于异常处理时的备选方案。 + */ +void MultiScreenWorker::updateScreenSize() +{ + /* Open the connection to the X server. Use the DISPLAY environment variable */ + int screenNum; + xcb_connection_t *connection = xcb_connect(NULL, &screenNum); + + /* Get the screen whose number is screenNum */ + const xcb_setup_t *setup = xcb_get_setup(connection); + xcb_screen_iterator_t iter = xcb_setup_roots_iterator(setup); + + /* we want the screen at index screenNum of the iterator */ + for (int i = 0; i < screenNum; ++i) { + xcb_screen_next(&iter); + } + + xcb_screen_t *screen = iter.data; + + m_screenRawWidth = screen->width_in_pixels; + m_screenRawHeight = screen->height_in_pixels; +} + void MultiScreenWorker::onTouchPress(int type, int x, int y, const QString &key) { Q_UNUSED(type); diff --git a/frame/util/multiscreenworker.h b/frame/util/multiscreenworker.h index 470ab1376..543cb5232 100644 --- a/frame/util/multiscreenworker.h +++ b/frame/util/multiscreenworker.h @@ -433,6 +433,7 @@ private: bool contains(const MonitRect &rect, const QPoint &pos); bool contains(const QList &rectList, const QPoint &pos); const QPoint rawXPosition(const QPoint &scaledPos); + void updateScreenSize(); private: QWidget *m_parent; From 81053b31c90aad3577a5826f05b0420edd069d0b Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Fri, 29 Jan 2021 14:28:34 +0800 Subject: [PATCH 19/30] =?UTF-8?q?fix:=20=E8=B5=84=E6=BA=90=E6=9C=AA?= =?UTF-8?q?=E9=87=8A=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 多次快速旋转屏幕会多次调用这里,之前的资源未释放会导致后面的连接不成功,读不到正确的屏幕信息。 Log: 修复屏幕参数获取错误的问题。 Change-Id: I4bb1961a0e4786de1272a3897578be9c97cfa3cb --- frame/util/multiscreenworker.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/frame/util/multiscreenworker.cpp b/frame/util/multiscreenworker.cpp index 5c04dbe51..dd9d03dfb 100644 --- a/frame/util/multiscreenworker.cpp +++ b/frame/util/multiscreenworker.cpp @@ -1747,6 +1747,12 @@ void MultiScreenWorker::updateScreenSize() int screenNum; xcb_connection_t *connection = xcb_connect(NULL, &screenNum); + /* Check for failure */ + if (xcb_connection_has_error(connection)) { + xcb_disconnect(connection); + return; + } + /* Get the screen whose number is screenNum */ const xcb_setup_t *setup = xcb_get_setup(connection); xcb_screen_iterator_t iter = xcb_setup_roots_iterator(setup); @@ -1760,6 +1766,8 @@ void MultiScreenWorker::updateScreenSize() m_screenRawWidth = screen->width_in_pixels; m_screenRawHeight = screen->height_in_pixels; + + xcb_disconnect(connection); } void MultiScreenWorker::onTouchPress(int type, int x, int y, const QString &key) From 7a0d7332ae50d4958a819bce081df7ddba632005 Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Thu, 28 Jan 2021 10:40:25 +0800 Subject: [PATCH 20/30] =?UTF-8?q?fix:=20=E8=B0=83=E7=94=A8=E9=87=8E?= =?UTF-8?q?=E6=8C=87=E9=92=88=E5=AF=BC=E8=87=B4=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 拖动图标移除后,原来的item已经被析构了,这里指针就变成了野指针。 Log: 修复任务栏拖动图标导致崩溃的问题。 Bug: https://pms.uniontech.com/zentao/bug-view-62246.html Change-Id: I852ad6413a1d6b260723148b73bcab7f91f3ce47 --- frame/panel/mainpanelcontrol.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frame/panel/mainpanelcontrol.cpp b/frame/panel/mainpanelcontrol.cpp index b40bc3bcc..b583b9ce5 100755 --- a/frame/panel/mainpanelcontrol.cpp +++ b/frame/panel/mainpanelcontrol.cpp @@ -677,8 +677,9 @@ void MainPanelControl::mousePressEvent(QMouseEvent *e) QWidget::mousePressEvent(e); } -void MainPanelControl::startDrag(DockItem *item) +void MainPanelControl::startDrag(DockItem *dockItem) { + QPointer item = dockItem; const QPixmap pixmap = item->grab(); item->setDraging(true); @@ -692,7 +693,7 @@ void MainPanelControl::startDrag(DockItem *item) connect(m_appDragWidget, &AppDragWidget::destroyed, this, [ = ] { m_appDragWidget = nullptr; - if (qobject_cast(item)->isValid()) { + if (!item.isNull() && qobject_cast(item)->isValid()) { if (-1 == m_appAreaSonLayout->indexOf(item) && m_dragIndex != -1) { insertItem(m_dragIndex, item); m_dragIndex = -1; From 81faaaa060255fed1bf5708bf299d9a3a829afe4 Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Thu, 28 Jan 2021 11:00:54 +0800 Subject: [PATCH 21/30] =?UTF-8?q?fix:=20=E6=AD=A3=E5=B8=B8=E5=85=B3?= =?UTF-8?q?=E6=9C=BA=E8=AE=B0=E5=BD=95=E5=B4=A9=E6=BA=83=E6=AC=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 正常关机(程序正常退出)不应该记录崩溃次数。 Log: 修复任务栏异常进入安全模式的问题。 Change-Id: Ic4f96214ec6f097578d48fbe6e8e3de11aa279fd --- frame/main.cpp | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/frame/main.cpp b/frame/main.cpp index 278e8b849..0c63c038a 100644 --- a/frame/main.cpp +++ b/frame/main.cpp @@ -54,7 +54,6 @@ DCORE_USE_NAMESPACE DUTIL_USE_NAMESPACE #endif -const int MAX_STACK_FRAMES = 128; const QString g_cfgPath = QStandardPaths::standardLocations(QStandardPaths::ConfigLocation)[0] + "/dde-cfg.ini"; using namespace std; @@ -149,38 +148,6 @@ bool IsSaveMode() + QDateTime::currentDateTime().toString("[yyyy-MM-dd hh:mm:ss:zzz]") + "[crash signal number:" + QString::number(sig) + "]\n"; file->write(head.toUtf8()); - -#ifdef Q_OS_LINUX - void *array[MAX_STACK_FRAMES]; - size_t size = 0; - char **strings = nullptr; - size_t i; - signal(sig, SIG_DFL); - size = static_cast(backtrace(array, MAX_STACK_FRAMES)); - strings = backtrace_symbols(array, int(size)); - for (i = 0; i < size; ++i) { - QString line = QString::number(i) + " " + QString::fromStdString(strings[i]) + "\n"; - file->write(line.toUtf8()); - - std::string symbol(strings[i]); - QString strSymbol = QString::fromStdString(symbol); - int pos1 = strSymbol.indexOf("["); - int pos2 = strSymbol.lastIndexOf("]"); - QString address = strSymbol.mid(pos1 + 1,pos2 - pos1 - 1); - - // 按照内存地址找到对应代码的行号 - QString cmd = "addr2line -C -f -e " + qApp->applicationName() + " " + address; - QProcess *p = new QProcess; - p->setReadChannel(QProcess::StandardOutput); - p->start(cmd); - p->waitForFinished(); - p->waitForReadyRead(); - file->write(p->readAllStandardOutput()); - delete p; - p = nullptr; - } - free(strings); -#endif // __linux } catch (...) { // } @@ -201,7 +168,6 @@ int main(int argc, char *argv[]) DockApplication app(argc, argv); //崩溃信号 - signal(SIGTERM, sig_crash); signal(SIGSEGV, sig_crash); signal(SIGILL, sig_crash); signal(SIGINT, sig_crash); From fc4fdc455a8771a07e3c1e0a18e8f235c035f6bb Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Thu, 28 Jan 2021 16:09:16 +0800 Subject: [PATCH 22/30] =?UTF-8?q?fix:=20=E7=BD=91=E7=BB=9C=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E8=AE=BE=E5=A4=87=E5=88=97=E8=A1=A8=E4=B8=8D=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在任务栏网络插件关闭网络后,再在控制中心打开,设备列表显示状态设置错误。 Log: 修复网络插件不显示设备列表的问题。 Bug: https://pms.uniontech.com/zentao/bug-view-62142.html Change-Id: If8dfa6337e476047d3fd431b3b6ff16e1ff22319 --- plugins/network/networkitem.cpp | 91 +++++++++++++++++++-------------- 1 file changed, 53 insertions(+), 38 deletions(-) diff --git a/plugins/network/networkitem.cpp b/plugins/network/networkitem.cpp index b1c1d431f..722018213 100644 --- a/plugins/network/networkitem.cpp +++ b/plugins/network/networkitem.cpp @@ -492,7 +492,6 @@ void NetworkItem::wirelessEnable(bool enable) wirelessItem->itemApplet()->setVisible(enable); } } - updateSelf(); } void NetworkItem::onThemeTypeChanged(DGuiApplicationHelper::ColorType themeType) @@ -1113,49 +1112,65 @@ int NetworkItem::getStrongestAp() return retStrength; } +/** + * @brief 更新有线(无线)适配器的开关状态,并根据开关状态显示设备列表。 + */ void NetworkItem::updateMasterControlSwitch() { - bool deviceState = false; - for (auto wirelessItem : m_wirelessItems) { - if (wirelessItem) - if (wirelessItem->deviceEanbled()) { - deviceState = true; - break; - } - } - m_switchWirelessBtn->blockSignals(true); - m_switchWirelessBtn->setChecked(deviceState); - m_loadingIndicator->setVisible(deviceState); - m_switchWirelessBtn->blockSignals(false); - if (deviceState) { - for (auto wirelessItem : m_wirelessItems) { - if (wirelessItem) { - m_wirelessLayout->addWidget(wirelessItem->itemApplet()); - wirelessItem->itemApplet()->setVisible(true); - } - } - } else { - for (auto wirelessItem : m_wirelessItems) { - if (wirelessItem) { - m_wirelessLayout->removeWidget(wirelessItem->itemApplet()); - wirelessItem->itemApplet()->setVisible(false); - } - } - } - m_switchWirelessBtnState = deviceState; + m_switchWiredBtnState = false; + m_switchWirelessBtnState = false; - deviceState = false; - for (auto wiredItem : m_wiredItems) { - if (wiredItem) - if (wiredItem->deviceEabled()) { - deviceState = true; - break; - } + /* 获取有线适配器启用状态 */ + for (WiredItem *wiredItem : m_wiredItems) { + if (wiredItem && wiredItem->deviceEabled()) { + m_switchWiredBtnState = wiredItem->deviceEabled(); + break; + } } + /* 更新有线适配器总开关状态(阻塞信号是为了防止重复设置适配器启用状态)*/ m_switchWiredBtn->blockSignals(true); - m_switchWiredBtn->setChecked(deviceState); + m_switchWiredBtn->setChecked(m_switchWiredBtnState); m_switchWiredBtn->blockSignals(false); - m_switchWiredBtnState = deviceState; + /* 根据有线适配器启用状态增/删布局中的组件 */ + for (WiredItem *wiredItem : m_wiredItems) { + if (!wiredItem) { + continue; + } + if (m_switchWiredBtnState) { + m_wiredLayout->addWidget(wiredItem->itemApplet()); + } else { + m_wiredLayout->removeWidget(wiredItem->itemApplet()); + } + // wiredItem->itemApplet()->setVisible(m_switchWiredBtnState); // TODO + wiredItem->setVisible(m_switchWiredBtnState); + } + + /* 获取无线适配器启用状态 */ + for (auto wirelessItem : m_wirelessItems) { + if (wirelessItem && wirelessItem->deviceEanbled()) { + m_switchWirelessBtnState = wirelessItem->deviceEanbled(); + break; + } + } + /* 更新无线适配器总开关状态(阻塞信号是为了防止重复设置适配器启用状态) */ + m_switchWirelessBtn->blockSignals(true); + m_switchWirelessBtn->setChecked(m_switchWirelessBtnState); + m_switchWirelessBtn->blockSignals(false); + /* 根据无线适配器启用状态增/删布局中的组件 */ + for (WirelessItem *wirelessItem : m_wirelessItems) { + if (!wirelessItem) { + continue; + } + if (m_switchWirelessBtnState) { + m_wirelessLayout->addWidget(wirelessItem->itemApplet()); + } else { + m_wirelessLayout->removeWidget(wirelessItem->itemApplet()); + } + wirelessItem->itemApplet()->setVisible(m_switchWirelessBtnState); + wirelessItem->setVisible(m_switchWirelessBtnState); + } + + m_loadingIndicator->setVisible(m_switchWirelessBtnState || m_switchWiredBtnState); } void NetworkItem::refreshTips() From 10b36aed8aee140cc7bfa955857dfe7d7f67d4f3 Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Mon, 1 Feb 2021 10:28:22 +0800 Subject: [PATCH 23/30] =?UTF-8?q?fix:=20=E5=BA=94=E7=94=A8=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E7=8A=B6=E6=80=81=E6=98=BE=E7=A4=BA=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.应用图标状态不对; 2.打开wine应用时显示了几个多余的图标。 Log: 修复任务栏应用图标显示异常的问题。 Bug: https://pms.uniontech.com/zentao/bug-view-61394.html Change-Id: Ib3ad2b4115ce90d58e82809e6075a6e398a6af5a --- frame/item/appitem.cpp | 5 +++++ frame/item/appitem.h | 1 + frame/item/dockitem.h | 1 + frame/panel/mainpanelcontrol.cpp | 1 + 4 files changed, 8 insertions(+) diff --git a/frame/item/appitem.cpp b/frame/item/appitem.cpp index 0ea4e297b..32b930ae4 100644 --- a/frame/item/appitem.cpp +++ b/frame/item/appitem.cpp @@ -141,6 +141,11 @@ AppItem::~AppItem() m_appNameTips->deleteLater(); } +void AppItem::checkEntry() +{ + m_itemEntryInter->Check(); +} + const QString AppItem::appId() const { return m_id; diff --git a/frame/item/appitem.h b/frame/item/appitem.h index 104c11211..bc4422f04 100644 --- a/frame/item/appitem.h +++ b/frame/item/appitem.h @@ -46,6 +46,7 @@ public: explicit AppItem(const QDBusObjectPath &entry, QWidget *parent = nullptr); ~AppItem() override; + void checkEntry() override; const QString appId() const; bool isValid() const; void updateWindowIconGeometries(); diff --git a/frame/item/dockitem.h b/frame/item/dockitem.h index b54410439..a88740776 100644 --- a/frame/item/dockitem.h +++ b/frame/item/dockitem.h @@ -67,6 +67,7 @@ public slots: void showPopupApplet(QWidget *const applet); void hidePopup(); virtual void setDraging(bool bDrag); + virtual void checkEntry() {} bool isDragging(); signals: diff --git a/frame/panel/mainpanelcontrol.cpp b/frame/panel/mainpanelcontrol.cpp index b583b9ce5..5ae240c22 100755 --- a/frame/panel/mainpanelcontrol.cpp +++ b/frame/panel/mainpanelcontrol.cpp @@ -345,6 +345,7 @@ void MainPanelControl::insertItem(int index, DockItem *item) QTimer::singleShot(0, [ = ] { updatePluginsLayout(); }); + item->checkEntry(); } void MainPanelControl::removeItem(DockItem *item) From 8047715acb5fc2bc386f1aecbd0aa679e7d22767 Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Tue, 2 Feb 2021 16:21:01 +0800 Subject: [PATCH 24/30] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=A0=8F=E5=AE=89=E5=85=A8=E6=A8=A1=E5=BC=8F=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E5=88=86=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改任务栏安全模式通知分类为控制中心。 Log: 修改任务栏安全模式通知分类。 Task: https://pms.uniontech.com/zentao/task-view-58411.html Change-Id: Ifa69d035ccf748cba9fd0a2569cdc598417ac76c --- frame/window/mainwindow.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/frame/window/mainwindow.cpp b/frame/window/mainwindow.cpp index 65b7579b2..28b66fead 100755 --- a/frame/window/mainwindow.cpp +++ b/frame/window/mainwindow.cpp @@ -591,14 +591,14 @@ void MainWindow::sendNotifications() .path("/com/deepin/dde/Notification") .interface("com.deepin.dde.Notification") .method(QString("Notify")) - .arg(QCoreApplication::applicationName()) // appname - .arg(static_cast(0)) // id - .arg(QString("preferences-system")) // icon - .arg(QString(tr("Dock - Safe Mode"))) // summary - .arg(tr("The Dock is in safe mode, please exit to show it properly")) // content - .arg(actionButton) // actions - .arg(hints) // hints - .arg(15000) // timeout + .arg(QString("dde-control-center")) // appname + .arg(static_cast(0)) // id + .arg(QString("preferences-system")) // icon + .arg(QString(tr("Dock - Safe Mode"))) // summary + .arg(QString(tr("The Dock is in safe mode, please exit to show it properly"))) // content + .arg(actionButton) // actions + .arg(hints) // hints + .arg(15000) // timeout .call(); }); } From aa09f71ba23c3410f4425f2c903b30f073dde026 Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Tue, 2 Feb 2021 15:55:24 +0800 Subject: [PATCH 25/30] =?UTF-8?q?fix:=20=E6=97=A0=E7=BA=BF=E7=BD=91?= =?UTF-8?q?=E7=BB=9Ctips=E6=98=BE=E7=A4=BA=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 仅有一个无线适配器连接时,无线网络的tips显示的是多个无线适配器的样式。 原因:判断条件写错了。 Log: 修复无线网络tips显示错误的问题。 Bug: https://pms.uniontech.com/zentao/bug-view-62840.html Change-Id: I5adcb0b21d8024501900c5f9c213b9dfd0240986 --- plugins/network/networkitem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/network/networkitem.cpp b/plugins/network/networkitem.cpp index 722018213..eca406714 100644 --- a/plugins/network/networkitem.cpp +++ b/plugins/network/networkitem.cpp @@ -1235,7 +1235,7 @@ void NetworkItem::refreshTips() const QJsonObject ipv4 = info.value("Ip4").toObject(); if (!ipv4.contains("Address")) continue; - if (m_connectedWiredDevice.size() == 1) { + if (m_connectedWirelessDevice.size() == 1) { strTips = tr("Wireless connection: %1").arg(ipv4.value("Address").toString()) + '\n'; } else { strTips = tr("Wireless Network").append(QString("%1").arg(wirelessIndex++)).append(":"+ipv4.value("Address").toString()) + '\n'; From b51925c1cad997d7d9088750e417dacb3841626b Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Mon, 25 Jan 2021 16:07:32 +0800 Subject: [PATCH 26/30] =?UTF-8?q?fix:=20=E4=BB=BB=E5=8A=A1=E6=A0=8F?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在计算任务栏位置时,删除中间的转换操作,直接获取任务栏在不考虑缩放下的真实参数,处理后传给x。 Log: 修复任务栏位置异常的问题。 Bug: https://pms.uniontech.com/zentao/bug-view-57039.html Change-Id: I7c496909cec9702c09e45016b74d132cb74c5885 --- frame/util/multiscreenworker.cpp | 118 +++++++++++++------------------ 1 file changed, 51 insertions(+), 67 deletions(-) diff --git a/frame/util/multiscreenworker.cpp b/frame/util/multiscreenworker.cpp index dd9d03dfb..750557614 100644 --- a/frame/util/multiscreenworker.cpp +++ b/frame/util/multiscreenworker.cpp @@ -1,4 +1,4 @@ -/* +/* * Copyright (C) 2018 ~ 2028 Deepin Technology Co., Ltd. * * Author: fanpengcheng @@ -746,40 +746,24 @@ void MultiScreenWorker::onRequestNotifyWindowManager() static int lastScreenWith = 0; static int lastScreenHeight = 0; - const auto ratio = qApp->devicePixelRatio(); - QRect rect; - if (m_hideMode == HideMode::KeepShowing) { - rect = getDockShowGeometry(m_ds.current(), m_position, m_displayMode); - } else { - rect = getDockHideGeometry(m_ds.current(), m_position, m_displayMode); + /* 在非主屏或非一直显示状态时,清除任务栏区域,不挤占应用 */ + if (m_ds.current() != m_ds.primary() || m_hideMode != HideMode::KeepShowing) { + lastRect = QRect(); + XcbMisc::instance()->clear_strut_partial(xcb_window_t(parent()->winId())); + return; } - // 已经设置过了,避免重复设置 - if (rect == lastRect && lastScreenWith == m_screenRawWidth && lastScreenHeight == m_screenRawHeight) + QRect dockGeometry = getDockShowGeometry(m_ds.current(), m_position, m_displayMode, true); + if (lastRect == dockGeometry && lastScreenWith == m_screenRawWidth && lastScreenHeight == m_screenRawHeight) { return; - lastRect = rect; + } + lastRect = dockGeometry; lastScreenWith = m_screenRawWidth; lastScreenHeight = m_screenRawHeight; - qDebug() << "dock geometry:" << rect; + qDebug() << "dock real geometry:" << dockGeometry; + qDebug() << "screen width:" << m_screenRawWidth << ", height:" << m_screenRawHeight; - // 先清除原先的窗管任务栏区域 - XcbMisc::instance()->clear_strut_partial(xcb_window_t(parent()->winId())); - - // 在副屏时,且为一直显示时,不要挤占应用,这是sp3的新需求 - if (m_ds.current() != m_ds.primary() && m_hideMode == HideMode::KeepShowing) { - lastRect = QRect(); - qDebug() << "don`t set dock area"; - return; - } - - // 除了"一直显示"模式,其他的都不要设置任务栏区域 - if (m_hideMode != Dock::KeepShowing) { - lastRect = QRect(); - return; - } - - const QPoint &p = rawXPosition(rect.topLeft()); - qDebug() << "dock topLeft position:" << p; + const qreal ratio = qApp->devicePixelRatio(); XcbMisc::Orientation orientation = XcbMisc::OrientationTop; double strut = 0; @@ -789,27 +773,27 @@ void MultiScreenWorker::onRequestNotifyWindowManager() switch (m_position) { case Position::Top: orientation = XcbMisc::OrientationTop; - strut = p.y() + rect.height() * ratio; - strutStart = p.x(); - strutEnd = qMin(qRound(p.x() + rect.width() * ratio), rect.right()); + strut = dockGeometry.y() + dockGeometry.height(); + strutStart = dockGeometry.x(); + strutEnd = qMin(dockGeometry.x() + dockGeometry.width(), dockGeometry.right()); break; case Position::Bottom: orientation = XcbMisc::OrientationBottom; - strut = m_screenRawHeight - p.y(); - strutStart = p.x(); - strutEnd = qMin(qRound(p.x() + rect.width() * ratio), rect.right()); + strut = m_screenRawHeight - dockGeometry.y(); + strutStart = dockGeometry.x(); + strutEnd = qMin(dockGeometry.x() + dockGeometry.width(), dockGeometry.right()); break; case Position::Left: orientation = XcbMisc::OrientationLeft; - strut = p.x() + rect.width() * ratio; - strutStart = p.y(); - strutEnd = qMin(qRound(p.y() + rect.height() * ratio), rect.bottom()); + strut = dockGeometry.x() + dockGeometry.width(); + strutStart = dockGeometry.y(); + strutEnd = qMin(dockGeometry.y() + dockGeometry.height(), dockGeometry.bottom()); break; case Position::Right: orientation = XcbMisc::OrientationRight; - strut = m_screenRawWidth - p.x(); - strutStart = p.y(); - strutEnd = qMin(qRound(p.y() + rect.height() * ratio), rect.bottom()); + strut = m_screenRawWidth - dockGeometry.x(); + strutStart = dockGeometry.y(); + strutEnd = qMin(dockGeometry.y() + dockGeometry.height(), dockGeometry.bottom()); break; } @@ -1575,34 +1559,34 @@ QRect MultiScreenWorker::getDockShowGeometry(const QString &screenName, const Po { QRect rect; const double ratio = withoutScale ? 1 : qApp->devicePixelRatio(); - const int margin = (displaymode == DisplayMode::Fashion) ? 10 : 0; + const int margin = static_cast((displaymode == DisplayMode::Fashion ? 10 : 0) * (withoutScale ? qApp->devicePixelRatio() : 1)); const int dockSize = static_cast((displaymode == DisplayMode::Fashion ? m_dockInter->windowSizeFashion() : m_dockInter->windowSizeEfficient()) * (withoutScale ? qApp->devicePixelRatio() : 1)); for (Monitor *monitor : m_mtrInfo.validMonitor()) { if (monitor->name() == screenName) { switch (pos) { case Position::Top: - rect.setX(static_cast(monitor->x() + margin * ratio)); - rect.setY(static_cast(monitor->y() + margin * ratio)); - rect.setWidth(static_cast(monitor->w() / ratio - 2 * margin * ratio)); + rect.setX(static_cast(monitor->x() + margin)); + rect.setY(static_cast(monitor->y() + margin)); + rect.setWidth(static_cast(monitor->w() / ratio - 2 * margin)); rect.setHeight(dockSize); break; case Position::Bottom: - rect.setX(static_cast(monitor->x() + margin * ratio)); - rect.setY(static_cast(monitor->y() + monitor->h() / ratio - margin * ratio - dockSize)); - rect.setWidth(static_cast(monitor->w() / ratio - 2 * margin * ratio)); + rect.setX(static_cast(monitor->x() + margin)); + rect.setY(static_cast(monitor->y() + monitor->h() / ratio - margin - dockSize)); + rect.setWidth(static_cast(monitor->w() / ratio - 2 * margin)); rect.setHeight(dockSize); break; case Position::Left: - rect.setX(static_cast(monitor->x() + margin * ratio)); - rect.setY(static_cast(monitor->y() + margin * ratio)); + rect.setX(static_cast(monitor->x() + margin)); + rect.setY(static_cast(monitor->y() + margin)); rect.setWidth(dockSize); - rect.setHeight(static_cast(monitor->h() / ratio - 2 * margin * ratio)); + rect.setHeight(static_cast(monitor->h() / ratio - 2 * margin)); break; case Position::Right: - rect.setX(static_cast(monitor->x() + monitor->w() / ratio - margin * ratio - dockSize)); - rect.setY(static_cast(monitor->y() + margin * ratio)); + rect.setX(static_cast(monitor->x() + monitor->w() / ratio - margin - dockSize)); + rect.setY(static_cast(monitor->y() + margin)); rect.setWidth(dockSize); - rect.setHeight(static_cast(monitor->h() / ratio - 2 * margin * ratio)); + rect.setHeight(static_cast(monitor->h() / ratio - 2 * margin)); break; } } @@ -1623,33 +1607,33 @@ QRect MultiScreenWorker::getDockHideGeometry(const QString &screenName, const Po { QRect rect; const double ratio = withoutScale ? 1 : qApp->devicePixelRatio(); - const int margin = (displaymode == DisplayMode::Fashion) ? 10 : 0; + const int margin = static_cast((displaymode == DisplayMode::Fashion ? 10 : 0) * (withoutScale ? qApp->devicePixelRatio() : 1)); for (Monitor *monitor : m_mtrInfo.validMonitor()) { if (monitor->name() == screenName) { switch (pos) { case Position::Top: - rect.setX(static_cast(monitor->x() + margin * ratio)); - rect.setY(static_cast(monitor->y() + margin * ratio)); - rect.setWidth(static_cast(monitor->w() / ratio - 2 * margin * ratio)); + rect.setX(static_cast(monitor->x() + margin)); + rect.setY(static_cast(monitor->y() + margin)); + rect.setWidth(static_cast(monitor->w() / ratio - 2 * margin)); rect.setHeight(0); break; case Position::Bottom: - rect.setX(static_cast(monitor->x() + margin * ratio)); - rect.setY(static_cast(monitor->y() + monitor->h() / ratio - margin * ratio)); - rect.setWidth(static_cast(monitor->w() / ratio - 2 * margin * ratio)); + rect.setX(static_cast(monitor->x() + margin)); + rect.setY(static_cast(monitor->y() + monitor->h() / ratio - margin)); + rect.setWidth(static_cast(monitor->w() / ratio - 2 * margin)); rect.setHeight(0); break; case Position::Left: - rect.setX(static_cast(monitor->x() + margin * ratio)); - rect.setY(static_cast(monitor->y() + margin * ratio)); + rect.setX(static_cast(monitor->x() + margin)); + rect.setY(static_cast(monitor->y() + margin)); rect.setWidth(0); - rect.setHeight(static_cast(monitor->h() / ratio - 2 * margin * ratio)); + rect.setHeight(static_cast(monitor->h() / ratio - 2 * margin)); break; case Position::Right: - rect.setX(static_cast(monitor->x() + monitor->w() / ratio - margin * ratio)); - rect.setY(static_cast(monitor->y() + margin * ratio)); + rect.setX(static_cast(monitor->x() + monitor->w() / ratio - margin)); + rect.setY(static_cast(monitor->y() + margin)); rect.setWidth(0); - rect.setHeight(static_cast(monitor->h() / ratio - 2 * margin * ratio)); + rect.setHeight(static_cast(monitor->h() / ratio - 2 * margin)); break; } } From 88edefc1f266178cfd922af880698c17c72161b9 Mon Sep 17 00:00:00 2001 From: myj Date: Sun, 7 Feb 2021 17:38:19 +0800 Subject: [PATCH 27/30] =?UTF-8?q?fix(PreviewContainer):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D2D=E6=A8=A1=E5=BC=8F=E4=B8=8B=EF=BC=8C=E7=82=B9?= =?UTF-8?q?=E5=87=BB=E9=A2=84=E8=A7=88=E7=AA=97=E5=8F=A3=E7=9A=84=E5=85=B3?= =?UTF-8?q?=E9=97=AD=E6=8C=89=E9=92=AE=EF=BC=8C=E4=BC=9A=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=A0=8F=E5=B4=A9=E6=BA=83=E7=9A=84=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化调整预览窗口的标题居中显示,使其不会出现与关闭按钮稍微重叠的现象 优化当关闭按钮在标题右侧之上时,鼠标移动至该区域偶尔出现无法生效点击事件的现象 Log: 修复2D模式下,点击预览窗口的关闭按钮,会导致任务栏崩溃的异常问题 Change-Id: I2a69e3ccdfc5c002c1761e9317b48016e9680f1a --- frame/item/components/appsnapshot.cpp | 20 +++--- frame/item/components/appsnapshot.h | 3 + frame/item/components/previewcontainer.cpp | 81 +++++++++++----------- 3 files changed, 52 insertions(+), 52 deletions(-) diff --git a/frame/item/components/appsnapshot.cpp b/frame/item/components/appsnapshot.cpp index e5d235df2..346c95f72 100644 --- a/frame/item/components/appsnapshot.cpp +++ b/frame/item/components/appsnapshot.cpp @@ -58,14 +58,14 @@ AppSnapshot::AppSnapshot(const WId wid, QWidget *parent) : QWidget(parent) , m_wid(wid) , m_isWidowHidden(false) - , m_title(new TipsWidget) + , m_title(new TipsWidget(this)) , m_waitLeaveTimer(new QTimer(this)) , m_closeBtn2D(new DIconButton(this)) , m_wmHelper(DWindowManagerHelper::instance()) , m_dockDaemonInter(new DockDaemonInter("com.deepin.dde.daemon.Dock", "/com/deepin/dde/daemon/Dock", QDBusConnection::sessionBus(), this)) { - m_closeBtn2D->setFixedSize(24, 24); - m_closeBtn2D->setIconSize(QSize(24, 24)); + m_closeBtn2D->setFixedSize(SNAP_CLOSE_BTN_WIDTH, SNAP_CLOSE_BTN_WIDTH); + m_closeBtn2D->setIconSize(QSize(SNAP_CLOSE_BTN_WIDTH, SNAP_CLOSE_BTN_WIDTH)); m_closeBtn2D->setObjectName("closebutton-2d"); m_closeBtn2D->setIcon(QIcon(":/icons/resources/close_round_normal.svg")); m_closeBtn2D->setVisible(false); @@ -210,7 +210,7 @@ void AppSnapshot::enterEvent(QEvent *e) QWidget::enterEvent(e); if (!m_wmHelper->hasComposite()) { - m_closeBtn2D->move(width() - m_closeBtn2D->width() - 5, (height() - m_closeBtn2D->height()) / 2); + m_closeBtn2D->move(width() - m_closeBtn2D->width() - SNAP_CLOSE_BTN_MARGIN, (height() - m_closeBtn2D->height()) / 2); m_closeBtn2D->setVisible(true); } else { emit entered(wid()); @@ -284,14 +284,12 @@ void AppSnapshot::mousePressEvent(QMouseEvent *e) bool AppSnapshot::eventFilter(QObject *watched, QEvent *e) { - if(watched == m_closeBtn2D) { - if(watched == m_closeBtn2D && (e->type() == QEvent::HoverEnter || e->type() == QEvent::HoverMove)) { + if (watched == m_closeBtn2D) { + if (watched == m_closeBtn2D && (e->type() == QEvent::HoverEnter || e->type() == QEvent::HoverMove)) { m_closeBtn2D->setIcon(QIcon(":/icons/resources/close_round_hover.svg")); - } - else if (watched == m_closeBtn2D && e->type() == QEvent::HoverLeave) { + } else if (watched == m_closeBtn2D && e->type() == QEvent::HoverLeave) { m_closeBtn2D->setIcon(QIcon(":/icons/resources/close_round_normal.svg")); - } - else if (watched == m_closeBtn2D && e->type() == QEvent::MouseButtonPress) { + } else if (watched == m_closeBtn2D && e->type() == QEvent::MouseButtonPress) { m_closeBtn2D->setIcon(QIcon(":/icons/resources/close_round_press.svg")); } } @@ -383,7 +381,7 @@ void AppSnapshot::getWindowState() } Atom *atoms = reinterpret_cast(properties); - for(i = 0; i < num_items; ++i) { + for (i = 0; i < num_items; ++i) { const char *atomName = XGetAtomName(display, atoms[i]); if (strcmp(atomName, "_NET_WM_STATE_HIDDEN") == 0) { diff --git a/frame/item/components/appsnapshot.h b/frame/item/components/appsnapshot.h index ee1de0da4..a8dd7a847 100644 --- a/frame/item/components/appsnapshot.h +++ b/frame/item/components/appsnapshot.h @@ -38,6 +38,9 @@ DGUI_USE_NAMESPACE #define SNAP_WIDTH 200 #define SNAP_HEIGHT 130 +#define SNAP_CLOSE_BTN_WIDTH (24) +#define SNAP_CLOSE_BTN_MARGIN (5) + struct SHMInfo; struct _XImage; typedef _XImage XImage; diff --git a/frame/item/components/previewcontainer.cpp b/frame/item/components/previewcontainer.cpp index e4d6166ed..61e7608ba 100644 --- a/frame/item/components/previewcontainer.cpp +++ b/frame/item/components/previewcontainer.cpp @@ -38,7 +38,7 @@ PreviewContainer::PreviewContainer(QWidget *parent) m_mouseLeaveTimer(new QTimer(this)), m_wmHelper(DWindowManagerHelper::instance()) { - m_windowListLayout = new QBoxLayout(QBoxLayout::LeftToRight); + m_windowListLayout = new QBoxLayout(QBoxLayout::LeftToRight, this); m_windowListLayout->setSpacing(SPACING); m_windowListLayout->setContentsMargins(MARGIN, MARGIN, MARGIN, MARGIN); @@ -52,7 +52,6 @@ PreviewContainer::PreviewContainer(QWidget *parent) m_waitForShowPreviewTimer->setInterval(200); setAcceptDrops(true); - setLayout(m_windowListLayout); setFixedSize(SNAP_WIDTH, SNAP_HEIGHT); connect(m_mouseLeaveTimer, &QTimer::timeout, this, &PreviewContainer::checkMouseLeave, Qt::QueuedConnection); @@ -62,13 +61,11 @@ PreviewContainer::PreviewContainer(QWidget *parent) void PreviewContainer::setWindowInfos(const WindowInfoMap &infos, const WindowList &allowClose) { // check removed window - for (auto it(m_snapshots.begin()); it != m_snapshots.end();) - { + for (auto it(m_snapshots.begin()); it != m_snapshots.end();) { //初始化预览界面边距 it.value()->setContentsMargins(0, 0, 0, 0); - if (!infos.contains(it.key())) - { + if (!infos.contains(it.key())) { m_windowListLayout->removeWidget(it.value()); it.value()->deleteLater(); it = m_snapshots.erase(it); @@ -77,8 +74,7 @@ void PreviewContainer::setWindowInfos(const WindowInfoMap &infos, const WindowLi } } - for (auto it(infos.cbegin()); it != infos.cend(); ++it) - { + for (auto it(infos.cbegin()); it != infos.cend(); ++it) { const WId key = it.key(); if (!m_snapshots.contains(key)) appendSnapWidget(key); @@ -86,9 +82,10 @@ void PreviewContainer::setWindowInfos(const WindowInfoMap &infos, const WindowLi m_snapshots[key]->setCloseAble(allowClose.contains(key)); } - if (m_snapshots.isEmpty()) + if (m_snapshots.isEmpty()) { emit requestCancelPreviewWindow(); emit requestHidePopup(); + } adjustSize(); } @@ -140,41 +137,43 @@ void PreviewContainer::adjustSize() { const int count = m_snapshots.size(); const bool composite = m_wmHelper->hasComposite(); - if (!composite) - { + + if (composite) { + // 3D + const QRect r = qApp->primaryScreen()->geometry(); + const int padding = 20; + + const bool horizontal = m_windowListLayout->direction() == QBoxLayout::LeftToRight; + if (horizontal) { + const int h = SNAP_HEIGHT + MARGIN * 2; + const int w = SNAP_WIDTH * count + MARGIN * 2 + SPACING * (count - 1); + + setFixedHeight(h); + setFixedWidth(std::min(w, r.width() - padding)); + } else { + const int w = SNAP_WIDTH + MARGIN * 2; + const int h = SNAP_HEIGHT * count + MARGIN * 2 + SPACING * (count - 1); + + setFixedWidth(w); + setFixedHeight(std::min(h, r.height() - padding)); + } + } else if (m_windowListLayout->count()) { + // 2D const int h = SNAP_HEIGHT_WITHOUT_COMPOSITE * count + MARGIN * 2 + SPACING * (count - 1); - //根据appitem title 设置自适应宽度 - auto appSnapshot = static_cast(this->layout()->itemAt(0)->widget()); + // 根据appitem title 设置自适应宽度 + auto appSnapshot = static_cast(m_windowListLayout->itemAt(0)->widget()); + auto font = appSnapshot->layout()->itemAt(0)->widget()->font(); QFontMetrics fontMetrics(font); - const int fontSize = fontMetrics.boundingRect(appSnapshot->title()).width(); - //预留字体到边缘的间距,边缘距离10px,关闭按钮24px - if (fontSize < SNAP_WIDTH - 44) - setFixedSize(fontSize + 44, h); - else + const int titleWidth = fontMetrics.boundingRect(appSnapshot->title()).width(); + // 关闭按键的宽度和边缘间距的和,调整标题居中 + const int closeBtnMargin = 2 * (SNAP_CLOSE_BTN_WIDTH + SNAP_CLOSE_BTN_MARGIN); + if (titleWidth < SNAP_WIDTH - closeBtnMargin) { + setFixedSize(titleWidth + closeBtnMargin, h); + } else { setFixedSize(SNAP_WIDTH, h); - - return; - } - - const QRect r = qApp->primaryScreen()->geometry(); - const int padding = 20; - - const bool horizontal = m_windowListLayout->direction() == QBoxLayout::LeftToRight; - if (horizontal) - { - const int h = SNAP_HEIGHT + MARGIN * 2; - const int w = SNAP_WIDTH * count + MARGIN * 2 + SPACING * (count - 1); - - setFixedHeight(h); - setFixedWidth(std::min(w, r.width() - padding)); - } else { - const int w = SNAP_WIDTH + MARGIN * 2; - const int h = SNAP_HEIGHT * count + MARGIN * 2 + SPACING * (count - 1); - - setFixedWidth(w); - setFixedHeight(std::min(h, r.height() - padding)); + } } } @@ -185,7 +184,7 @@ void PreviewContainer::appendSnapWidget(const WId wid) connect(snap, &AppSnapshot::clicked, this, &PreviewContainer::onSnapshotClicked, Qt::QueuedConnection); connect(snap, &AppSnapshot::entered, this, &PreviewContainer::previewEntered, Qt::QueuedConnection); connect(snap, &AppSnapshot::requestCheckWindow, this, &PreviewContainer::requestCheckWindows, Qt::QueuedConnection); - connect(snap, &AppSnapshot::requestCloseAppSnapshot, this, [this](){ + connect(snap, &AppSnapshot::requestCloseAppSnapshot, this, [this]() { if (!m_wmHelper->hasComposite()) return ; @@ -281,7 +280,7 @@ void PreviewContainer::previewEntered(const WId wid) void PreviewContainer::previewFloating() { - if(!m_waitForShowPreviewTimer->isActive()){ + if (!m_waitForShowPreviewTimer->isActive()) { m_floatingPreview->setVisible(true); m_floatingPreview->raise(); From 35b1f971302ccde965a8206c731cdb530a454932 Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Sat, 20 Feb 2021 14:22:00 +0800 Subject: [PATCH 28/30] =?UTF-8?q?fix:=20=E8=AE=BE=E7=BD=AE=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit setGeometry需要根据当前屏幕左上角的坐标将传入的rect转换为真实的坐标, 在屏幕个数变化后,有一段时间qt中保存的屏幕坐标还未刷新正确,导致这里设置失败。 故在设置前先与qt中保存的窗口参数比较一下,而不是与上一次设置的参数比较。 Log: 修复任务栏位置错误的问题。 Bug: https://pms.uniontech.com/zentao/bug-view-57039.html Change-Id: I77fe40583a9ce1b96727bc55d0c264c6c13598c4 --- frame/window/mainwindow.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/frame/window/mainwindow.cpp b/frame/window/mainwindow.cpp index 28b66fead..aa398e124 100755 --- a/frame/window/mainwindow.cpp +++ b/frame/window/mainwindow.cpp @@ -567,11 +567,9 @@ void MainWindow::touchRequestResizeDock() void MainWindow::setGeometry(const QRect &rect) { - static QRect lastRect; - if (lastRect == rect) { + if (rect == this->geometry()) { return; } - lastRect = rect; DBlurEffectWidget::setGeometry(rect); emit panelGeometryChanged(); } From 963ba77e02e5d09dc7fa074ad78640d8b7d1bc76 Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Mon, 22 Feb 2021 22:43:17 +0800 Subject: [PATCH 29/30] =?UTF-8?q?fix:=20=E6=97=B6=E9=97=B4=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E5=AD=97=E4=BD=93=E6=98=BE=E7=A4=BA=E8=BF=87=E5=A4=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当插件区域高度大于任务栏高度时,会显示过大。 Log: 修复时间插件显示异常的问题。 Bug: https://pms.uniontech.com/zentao/bug-view-60340.html Change-Id: I74be2624b55361c51e028026b0ef46cd0db1523d --- frame/panel/mainpanelcontrol.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/frame/panel/mainpanelcontrol.cpp b/frame/panel/mainpanelcontrol.cpp index 5ae240c22..bc72961f8 100755 --- a/frame/panel/mainpanelcontrol.cpp +++ b/frame/panel/mainpanelcontrol.cpp @@ -1084,8 +1084,10 @@ void MainPanelControl::calcuDockIconSize(int w, int h, PluginsItem *trashPlugin, if (layout) { PluginsItem *pItem = static_cast(layout->itemAt(0)->widget()); if (pItem) { - if (pItem->sizeHint().width() == -1) { + if (pItem->sizeHint().height() == -1) { pItem->setFixedSize(tray_item_size, tray_item_size); + } else if (pItem->sizeHint().height() > height()) { + pItem->resize(pItem->width(), height()); } } } @@ -1099,6 +1101,8 @@ void MainPanelControl::calcuDockIconSize(int w, int h, PluginsItem *trashPlugin, if (pItem) { if (pItem->sizeHint().width() == -1) { pItem->setFixedSize(tray_item_size, tray_item_size); + } else if (pItem->sizeHint().width() > width()) { + pItem->resize(width(), pItem->height()); } } } From 1721db7f028aa53a23accc39d7df98bd976e1b23 Mon Sep 17 00:00:00 2001 From: Zhang Qipeng Date: Tue, 23 Feb 2021 14:56:30 +0800 Subject: [PATCH 30/30] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E4=BB=BB=E5=8A=A1=E6=A0=8F=E6=89=93=E5=BC=80=E5=9B=9E?= =?UTF-8?q?=E6=94=B6=E7=AB=99=E8=A1=8C=E4=B8=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 之前右键菜单是调用命令打开回收站,现改为调用dtk接口,通过回收站右键菜单多次打开回收站仅会弹出一个回收站窗口。 Log: 修改通过任务栏打开回收站行为。 Task: https://pms.uniontech.com/zentao/task-view-58313.html Change-Id: I75e82d2183d550913654bffdbf7b172b6e62faf2 --- plugins/trash/popupcontrolwidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/trash/popupcontrolwidget.cpp b/plugins/trash/popupcontrolwidget.cpp index 12573d236..1fa2aac9f 100644 --- a/plugins/trash/popupcontrolwidget.cpp +++ b/plugins/trash/popupcontrolwidget.cpp @@ -80,7 +80,7 @@ QSize PopupControlWidget::sizeHint() const void PopupControlWidget::openTrashFloder() { - QProcess::startDetached("gio", QStringList() << "open" << "trash:///"); + DDesktopServices::showFolder(QUrl("trash:///")); } void PopupControlWidget::clearTrashFloder()