dde-dock/frame/window/components/desktop_widget.cpp
chenhongtao cfa53d0b1e chore: remove some deprecated function
Log: remove deprecated function
2023-03-13 16:18:12 +08:00

98 lines
2.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "desktop_widget.h"
#include <QDBusInterface>
#include <QDebug>
#include <QPainter>
#include <QProcess>
DesktopWidget::DesktopWidget(QWidget *parent)
: QWidget (parent)
, m_isHover(false)
, m_needRecoveryWin(false)
{
setMouseTracking(true);
}
void DesktopWidget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter painter(this);
//描绘桌面区域的颜色
painter.setOpacity(1);
QPen pen;
QColor penColor(0, 0, 0, 25);
pen.setWidth(2);
pen.setColor(penColor);
painter.setPen(pen);
painter.drawRect(rect());
if (m_isHover) {
painter.fillRect(rect(), QColor(255, 255, 255, 51));
} else {
painter.fillRect(rect(), QColor(255, 255, 255, 25));
}
}
void DesktopWidget::enterEvent(QEvent *event)
{
if (checkNeedShowDesktop()) {
m_needRecoveryWin = true;
QProcess::startDetached("/usr/lib/deepin-daemon/desktop-toggle", QStringList());
}
m_isHover = true;
update();
return QWidget::enterEvent(event);
}
void DesktopWidget::leaveEvent(QEvent *event)
{
// 鼠标移入时隐藏了窗口,移出时恢复
if (m_needRecoveryWin) {
QProcess::startDetached("/usr/lib/deepin-daemon/desktop-toggle", {});
}
m_isHover = false;
update();
return QWidget::leaveEvent(event);
}
void DesktopWidget::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
if (m_needRecoveryWin) {
// 手动点击 显示桌面窗口 后,鼠标移出时不再调用显/隐窗口进程,以手动点击设置为准
m_needRecoveryWin = false;
} else {
// 需求调整,鼠标移入,预览桌面时再点击显示桌面保持显示桌面状态,再点击才切换桌面显、隐状态
QProcess::startDetached("/usr/lib/deepin-daemon/desktop-toggle", {});
}
}
QWidget::mousePressEvent(event);
}
/**
* @brief ShowDesktopWidget::checkNeedShowDesktop 根据窗管提供接口(当前是否显示的桌面),提供鼠标
* 移入 显示桌面窗口 区域时,是否需要显示桌面判断依据
* @return 窗管返回 当前是桌面 或 窗管接口查询失败 返回false否则true
*/
bool DesktopWidget::checkNeedShowDesktop()
{
QDBusInterface wmInter("com.deepin.wm", "/com/deepin/wm", "com.deepin.wm");
QList<QVariant> argumentList;
QDBusMessage reply = wmInter.callWithArgumentList(QDBus::Block, QStringLiteral("GetIsShowDesktop"), argumentList);
if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 1) {
return !reply.arguments().at(0).toBool();
}
qDebug() << "wm call GetIsShowDesktop fail, res:" << reply.type();
return false;
}