feat: 参照dde-weather重构插件,修复显示与弹窗定位

- QML 根元素使用 AppletItem,参照 dde-weather 插件实现
- 使用 Panel.rootObject.dockItemMaxSize 适配任务栏图标尺寸
- dockOrder 设为 21,定位在系统托盘左侧
- 使用 PanelPopup + PanelToolTip + TapHandler 实现点击弹窗和悬停提示
- 弹窗打开前设置 DockPanelPositioner.bounding 修正弹窗定位
- C++ 后端新增 dbusAvailable 属性,D-Bus 不可用时优雅降级
- 使用 isServiceRegistered 正确检测 D-Bus 服务可用性
- install.sh 改用 SCRIPT_DIR 自动定位项目根目录
This commit is contained in:
2026-07-13 20:21:39 +08:00
parent 6654d0d102
commit 9fb80cdfc8
4 changed files with 179 additions and 93 deletions
+22 -4
View File
@@ -6,6 +6,7 @@
#include <pluginfactory.h>
#include <QDBusConnection>
#include <QDBusConnectionInterface>
#include <QDBusPendingReply>
#include <QDebug>
#include <QJsonDocument>
@@ -26,6 +27,7 @@ GraphicsDriverApplet::GraphicsDriverApplet(QObject *parent)
, m_progressTimer(new QTimer(this))
, m_installProgress(0)
, m_isInstalling(false)
, m_dbusAvailable(false)
{
}
@@ -36,15 +38,14 @@ GraphicsDriverApplet::~GraphicsDriverApplet()
bool GraphicsDriverApplet::load()
{
initDBusConnection();
connect(m_progressTimer, &QTimer::timeout, [this]() {
// Poll progress
});
return DApplet::load();
}
bool GraphicsDriverApplet::init()
{
refreshDeviceInfo();
if (m_dbusAvailable) {
refreshDeviceInfo();
}
return DApplet::init();
}
@@ -68,6 +69,11 @@ bool GraphicsDriverApplet::isInstalling() const
return m_isInstalling;
}
bool GraphicsDriverApplet::dbusAvailable() const
{
return m_dbusAvailable;
}
void GraphicsDriverApplet::refreshDeviceInfo()
{
if (!m_dbusInterface || !m_dbusInterface->isValid()) {
@@ -215,6 +221,13 @@ void GraphicsDriverApplet::initDBusConnection()
return;
}
// 检查服务是否已注册
bool registered = bus.interface()->isServiceRegistered(DBUS_SERVICE);
if (!registered) {
qWarning() << "GraphicsDriver D-Bus service is not registered";
return;
}
m_dbusInterface = new QDBusInterface(
DBUS_SERVICE,
DBUS_PATH,
@@ -228,8 +241,13 @@ void GraphicsDriverApplet::initDBusConnection()
return;
}
m_dbusAvailable = true;
emit dbusAvailableChanged();
connect(m_dbusInterface, SIGNAL(ReportProgress(QString)),
this, SLOT(onReportProgress(QString)));
qDebug() << "GraphicsDriver D-Bus connected successfully";
}
void GraphicsDriverApplet::setInstalling(bool installing)