From a2be08acf0fa71b3a349951d29a301667bf19b3a Mon Sep 17 00:00:00 2001 From: ck Date: Mon, 17 Oct 2022 09:36:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E9=85=8D=E7=BD=AE=20?= =?UTF-8?q?hover=20=E6=98=BE=E7=A4=BA=E6=A1=8C=E9=9D=A2=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 不影响默认行为,默认该配置为 0 即立刻显示或恢复 如果需要可以进行 dconfig 配置 Log: 添加配置显示桌面的悬浮时间 Change-Id: I0b394bf02717b6ba1abe1e5c86fab82d314f39fc --- configs/org.deepin.dde.dock.json | 13 ++++++++++- frame/window/components/desktop_widget.cpp | 27 +++++++++++++++++++--- frame/window/components/desktop_widget.h | 4 ++++ frame/window/mainpanelcontrol.cpp | 6 +++++ frame/window/mainpanelcontrol.h | 1 + frame/window/mainwindow.cpp | 8 ++++++- 6 files changed, 54 insertions(+), 5 deletions(-) diff --git a/configs/org.deepin.dde.dock.json b/configs/org.deepin.dde.dock.json index dff258105..28ff8711c 100644 --- a/configs/org.deepin.dde.dock.json +++ b/configs/org.deepin.dde.dock.json @@ -26,6 +26,17 @@ "description":"ture: Dock is hidden all the time, false: Depend on other settings of dock", "permissions":"readwrite", "visibility":"private" + }, + "toggleDesktopInterval":{ + "value": 0, + "serial": 0, + "flags":[], + "name":"toggleDesktopInterval", + "name[zh_CN]":"显示(或恢复)桌面的悬浮时间间隔", + "description[zh_CN]":"显示(或恢复)桌面将在悬停间隔后切换(以毫秒为单位)", + "description":"show(or restore) desktop will toggle after the hover interval (in milliseconds)", + "permissions":"readwrite", + "visibility":"private" } } -} \ No newline at end of file +} diff --git a/frame/window/components/desktop_widget.cpp b/frame/window/components/desktop_widget.cpp index 84e737bcb..d41bac911 100644 --- a/frame/window/components/desktop_widget.cpp +++ b/frame/window/components/desktop_widget.cpp @@ -13,8 +13,12 @@ DesktopWidget::DesktopWidget(QWidget *parent) : QWidget (parent) , m_isHover(false) , m_needRecoveryWin(false) + ,m_timer(new QTimer(this)) { setMouseTracking(true); + m_timer->setInterval(0); + m_timer->setSingleShot(true); + connect(m_timer, &QTimer::timeout, this, &DesktopWidget::toggleDesktop); } void DesktopWidget::paintEvent(QPaintEvent *event) @@ -41,7 +45,9 @@ void DesktopWidget::enterEvent(QEvent *event) { if (checkNeedShowDesktop()) { m_needRecoveryWin = true; - QProcess::startDetached("/usr/lib/deepin-daemon/desktop-toggle"); +// QProcess::startDetached("/usr/lib/deepin-daemon/desktop-toggle"); + if (m_timer) + m_timer->start(); } m_isHover = true; @@ -54,7 +60,10 @@ void DesktopWidget::leaveEvent(QEvent *event) { // 鼠标移入时隐藏了窗口,移出时恢复 if (m_needRecoveryWin) { - QProcess::startDetached("/usr/lib/deepin-daemon/desktop-toggle"); + if (m_timer->isActive()) + m_timer->stop(); + else + toggleDesktop(); } m_isHover = false; @@ -71,13 +80,25 @@ void DesktopWidget::mousePressEvent(QMouseEvent *event) m_needRecoveryWin = false; } else { // 需求调整,鼠标移入,预览桌面时再点击显示桌面保持显示桌面状态,再点击才切换桌面显、隐状态 - QProcess::startDetached("/usr/lib/deepin-daemon/desktop-toggle"); + toggleDesktop(); } } QWidget::mousePressEvent(event); } +void DesktopWidget::toggleDesktop() +{ + QProcess::startDetached("/usr/lib/deepin-daemon/desktop-toggle"); +} + +void DesktopWidget::setToggleDesktopInterval(int ms) +{ + if (m_timer) { + m_timer->setInterval(ms); + } +} + /** * @brief ShowDesktopWidget::checkNeedShowDesktop 根据窗管提供接口(当前是否显示的桌面),提供鼠标 * 移入 显示桌面窗口 区域时,是否需要显示桌面判断依据 diff --git a/frame/window/components/desktop_widget.h b/frame/window/components/desktop_widget.h index c00b75f4e..e8e03c4e3 100644 --- a/frame/window/components/desktop_widget.h +++ b/frame/window/components/desktop_widget.h @@ -8,12 +8,14 @@ #include #include #include +#include class DesktopWidget : public QWidget { public: explicit DesktopWidget(QWidget *parent = nullptr); + void setToggleDesktopInterval(int ms); private: bool checkNeedShowDesktop(); @@ -22,10 +24,12 @@ protected: void enterEvent(QEvent *event) override; void leaveEvent(QEvent *event) override; void mousePressEvent(QMouseEvent *event) override; + void toggleDesktop(); private: bool m_isHover; // 判断鼠标是否移到desktop区域 bool m_needRecoveryWin; + QTimer *m_timer; }; #endif // DESKTOP_WIDGET_H diff --git a/frame/window/mainpanelcontrol.cpp b/frame/window/mainpanelcontrol.cpp index 777800955..58379f0b4 100755 --- a/frame/window/mainpanelcontrol.cpp +++ b/frame/window/mainpanelcontrol.cpp @@ -944,6 +944,12 @@ void MainPanelControl::updatePluginsLayout() } } +void MainPanelControl::setToggleDesktopInterval(int ms) +{ + if (m_desktopWidget) + m_desktopWidget->setToggleDesktopInterval(ms); +} + void MainPanelControl::itemUpdated(DockItem *item) { item->updateGeometry(); diff --git a/frame/window/mainpanelcontrol.h b/frame/window/mainpanelcontrol.h index 56d569490..5eb5830f0 100755 --- a/frame/window/mainpanelcontrol.h +++ b/frame/window/mainpanelcontrol.h @@ -31,6 +31,7 @@ public: void setDisplayMode(DisplayMode dislayMode); void resizeDockIcon(); void updatePluginsLayout(); + void setToggleDesktopInterval(int ms); public slots: void insertItem(const int index, DockItem *item); diff --git a/frame/window/mainwindow.cpp b/frame/window/mainwindow.cpp index def4aaa00..2f1564ad2 100755 --- a/frame/window/mainwindow.cpp +++ b/frame/window/mainwindow.cpp @@ -141,8 +141,11 @@ void MainWindow::launch() m_shadowMaskOptimizeTimer->start(); QTimer::singleShot(0, this, [ this ] { bool showDock = true; - if (m_dconfig.data()->isValid()) + if (m_dconfig.data()->isValid()) { showDock = !m_dconfig.data()->value("alwaysHideDock", false).toBool(); + const int ms = m_dconfig.data()->value("toggleDesktopInterval", 0).toInt(); + m_mainPanel->setToggleDesktopInterval(ms); + } qApp->setProperty("ALWAYS_HIDE_DOCK", !showDock); setVisible(showDock); if (!showDock && m_multiScreenWorker->dockInter()) { @@ -304,6 +307,9 @@ void MainWindow::initComponents() if (!showDock && m_multiScreenWorker->dockInter()) { m_multiScreenWorker->dockInter()->setHideMode(KeepHidden); } + } else if ("toggleDesktopInterval") { + const int ms = m_dconfig.data()->value(key, 0).toInt(); + m_mainPanel->setToggleDesktopInterval(ms); } }); }