diff --git a/src/widgets/inhibitwarnview.cpp b/src/widgets/inhibitwarnview.cpp index 73455c49..16396e42 100644 --- a/src/widgets/inhibitwarnview.cpp +++ b/src/widgets/inhibitwarnview.cpp @@ -10,10 +10,22 @@ #include #include +#ifdef ENABLE_DSS_SNIPE +#include +#include +#include +#endif + #include DWIDGET_USE_NAMESPACE +#ifdef ENABLE_DSS_SNIPE +#define AMDBUS_SERVICE "org.desktopspec.ApplicationManager1" +#define AMDBUS_PATH_APP_PREFIX "/org/desktopspec/ApplicationManager1" +#define AMDBUS_APP_INTERFACE "org.desktopspec.ApplicationManager1.Application" +#endif + const int ButtonWidth = 200; const int ButtonHeight = 64; const int FIXED_INHIBITOR_WIDTH = 328; @@ -86,16 +98,41 @@ void InhibitWarnView::setInhibitorList(const QList &list) for (const InhibitorData &inhibitor : list) { QIcon icon; - if (inhibitor.icon.isEmpty() && inhibitor.pid) { + if (inhibitor.icon.isEmpty()) { + QString iconName; +#ifdef ENABLE_DSS_SNIPE + do { + const auto appId = Dtk::Core::DSGApplication::getId(inhibitor.pid); + if (appId.isEmpty()) + break; + const auto amDBusAppPath = QString("%1/%2").arg(AMDBUS_PATH_APP_PREFIX, DUtil::escapeToObjectPath(appId)); + QDBusReply reply = DDBusSender() + .service(AMDBUS_SERVICE) + .path(amDBusAppPath) + .interface(AMDBUS_APP_INTERFACE) + .property("Icons") + .get(); + if (reply.isValid()) { + auto ret = qdbus_cast>(reply.value().variant()); + iconName = ret.value("Desktop Entry"); + } else { + qCWarning(DDE_SHELL) << "Get icon error:" << reply.error().message(); + break; + } + } while(0); +#endif + + if (iconName.isEmpty() && inhibitor.pid) { #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - QFileInfo executable_info(QFile::symLinkTarget(QString("/proc/%1/exe").arg(inhibitor.pid))); + QFileInfo executable_info(QFile::symLinkTarget(QString("/proc/%1/exe").arg(inhibitor.pid))); #else - QFileInfo executable_info(QFile::readLink(QString("/proc/%1/exe").arg(inhibitor.pid))); + QFileInfo executable_info(QFile::readLink(QString("/proc/%1/exe").arg(inhibitor.pid))); #endif - - if (executable_info.exists()) { - icon = QIcon::fromTheme(executable_info.fileName()); + // 玲珑应用的exe指向的路径是容器内的路径,在容器外无法访问,因此不能判断文件是否存在 + QString iconName = executable_info.fileName(); } + + icon = QIcon::fromTheme(iconName); } else { icon = QIcon::fromTheme(inhibitor.icon, QIcon::fromTheme("application-x-desktop")); } diff --git a/src/widgets/shutdownwidget.cpp b/src/widgets/shutdownwidget.cpp index 0dc5583f..e25b41fd 100644 --- a/src/widgets/shutdownwidget.cpp +++ b/src/widgets/shutdownwidget.cpp @@ -17,7 +17,12 @@ QT_TRANSLATE_NOOP("ShutdownWidget", "Suspend"), QT_TRANSLATE_NOOP("ShutdownWidget", "Hibernate") #endif +#ifdef ENABLE_DSS_SNIPE +const QString LASTORE_DCONFIG_NAME = "org.deepin.dde.lastore"; +#else const QString LASTORE_DCONFIG_NAME = "org.deepin.lastore"; +#endif + const QString LASTORE_DAEMON_STATUS = "lastore-daemon-status"; const int IS_UPDATE_READY = 1 << 0; const int IS_UPDATE_DISABLED = 1 << 1;