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",
"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"
}
}
}

View File

@ -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
*

View File

@ -8,12 +8,14 @@
#include <QWidget>
#include <QPaintEvent>
#include <QEnterEvent>
#include <QTimer>
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

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)
{
item->updateGeometry();

View File

@ -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);

View File

@ -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);
}
});
}