feat: 添加配置 hover 显示桌面的时间

不影响默认行为,默认该配置为 0 即立刻显示或恢复
如果需要可以进行 dconfig 配置

Log: 添加配置显示桌面的悬浮时间
Change-Id: I0b394bf02717b6ba1abe1e5c86fab82d314f39fc
This commit is contained in:
ck 2022-10-17 09:36:49 +08:00 committed by mike
parent 81e6eb87d3
commit a2be08acf0
6 changed files with 54 additions and 5 deletions

View File

@ -26,6 +26,17 @@
"description":"ture: Dock is hidden all the time, false: Depend on other settings of dock", "description":"ture: Dock is hidden all the time, false: Depend on other settings of dock",
"permissions":"readwrite", "permissions":"readwrite",
"visibility":"private" "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"
} }
} }
} }

View File

@ -13,8 +13,12 @@ DesktopWidget::DesktopWidget(QWidget *parent)
: QWidget (parent) : QWidget (parent)
, m_isHover(false) , m_isHover(false)
, m_needRecoveryWin(false) , m_needRecoveryWin(false)
,m_timer(new QTimer(this))
{ {
setMouseTracking(true); setMouseTracking(true);
m_timer->setInterval(0);
m_timer->setSingleShot(true);
connect(m_timer, &QTimer::timeout, this, &DesktopWidget::toggleDesktop);
} }
void DesktopWidget::paintEvent(QPaintEvent *event) void DesktopWidget::paintEvent(QPaintEvent *event)
@ -41,7 +45,9 @@ void DesktopWidget::enterEvent(QEvent *event)
{ {
if (checkNeedShowDesktop()) { if (checkNeedShowDesktop()) {
m_needRecoveryWin = true; 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; m_isHover = true;
@ -54,7 +60,10 @@ void DesktopWidget::leaveEvent(QEvent *event)
{ {
// 鼠标移入时隐藏了窗口,移出时恢复 // 鼠标移入时隐藏了窗口,移出时恢复
if (m_needRecoveryWin) { if (m_needRecoveryWin) {
QProcess::startDetached("/usr/lib/deepin-daemon/desktop-toggle"); if (m_timer->isActive())
m_timer->stop();
else
toggleDesktop();
} }
m_isHover = false; m_isHover = false;
@ -71,13 +80,25 @@ void DesktopWidget::mousePressEvent(QMouseEvent *event)
m_needRecoveryWin = false; m_needRecoveryWin = false;
} else { } else {
// 需求调整,鼠标移入,预览桌面时再点击显示桌面保持显示桌面状态,再点击才切换桌面显、隐状态 // 需求调整,鼠标移入,预览桌面时再点击显示桌面保持显示桌面状态,再点击才切换桌面显、隐状态
QProcess::startDetached("/usr/lib/deepin-daemon/desktop-toggle"); toggleDesktop();
} }
} }
QWidget::mousePressEvent(event); 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 * @brief ShowDesktopWidget::checkNeedShowDesktop
* *

View File

@ -8,12 +8,14 @@
#include <QWidget> #include <QWidget>
#include <QPaintEvent> #include <QPaintEvent>
#include <QEnterEvent> #include <QEnterEvent>
#include <QTimer>
class DesktopWidget : public QWidget class DesktopWidget : public QWidget
{ {
public: public:
explicit DesktopWidget(QWidget *parent = nullptr); explicit DesktopWidget(QWidget *parent = nullptr);
void setToggleDesktopInterval(int ms);
private: private:
bool checkNeedShowDesktop(); bool checkNeedShowDesktop();
@ -22,10 +24,12 @@ protected:
void enterEvent(QEvent *event) override; void enterEvent(QEvent *event) override;
void leaveEvent(QEvent *event) override; void leaveEvent(QEvent *event) override;
void mousePressEvent(QMouseEvent *event) override; void mousePressEvent(QMouseEvent *event) override;
void toggleDesktop();
private: private:
bool m_isHover; // 判断鼠标是否移到desktop区域 bool m_isHover; // 判断鼠标是否移到desktop区域
bool m_needRecoveryWin; bool m_needRecoveryWin;
QTimer *m_timer;
}; };
#endif // DESKTOP_WIDGET_H #endif // DESKTOP_WIDGET_H

View File

@ -944,6 +944,12 @@ void MainPanelControl::updatePluginsLayout()
} }
} }
void MainPanelControl::setToggleDesktopInterval(int ms)
{
if (m_desktopWidget)
m_desktopWidget->setToggleDesktopInterval(ms);
}
void MainPanelControl::itemUpdated(DockItem *item) void MainPanelControl::itemUpdated(DockItem *item)
{ {
item->updateGeometry(); item->updateGeometry();

View File

@ -31,6 +31,7 @@ public:
void setDisplayMode(DisplayMode dislayMode); void setDisplayMode(DisplayMode dislayMode);
void resizeDockIcon(); void resizeDockIcon();
void updatePluginsLayout(); void updatePluginsLayout();
void setToggleDesktopInterval(int ms);
public slots: public slots:
void insertItem(const int index, DockItem *item); void insertItem(const int index, DockItem *item);

View File

@ -141,8 +141,11 @@ void MainWindow::launch()
m_shadowMaskOptimizeTimer->start(); m_shadowMaskOptimizeTimer->start();
QTimer::singleShot(0, this, [ this ] { QTimer::singleShot(0, this, [ this ] {
bool showDock = true; bool showDock = true;
if (m_dconfig.data()->isValid()) if (m_dconfig.data()->isValid()) {
showDock = !m_dconfig.data()->value("alwaysHideDock", false).toBool(); 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); qApp->setProperty("ALWAYS_HIDE_DOCK", !showDock);
setVisible(showDock); setVisible(showDock);
if (!showDock && m_multiScreenWorker->dockInter()) { if (!showDock && m_multiScreenWorker->dockInter()) {
@ -304,6 +307,9 @@ void MainWindow::initComponents()
if (!showDock && m_multiScreenWorker->dockInter()) { if (!showDock && m_multiScreenWorker->dockInter()) {
m_multiScreenWorker->dockInter()->setHideMode(KeepHidden); m_multiScreenWorker->dockInter()->setHideMode(KeepHidden);
} }
} else if ("toggleDesktopInterval") {
const int ms = m_dconfig.data()->value(key, 0).toInt();
m_mainPanel->setToggleDesktopInterval(ms);
} }
}); });
} }