From 5e3fdc6c335d934006c156fe0912424af4a19ae5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Wed, 17 Apr 2024 19:00:45 +0800 Subject: [PATCH] DE (Linux): better Gnome version detection --- src/common/dbus.c | 10 ++++++---- src/common/dbus.h | 2 +- src/detection/de/de_linux.c | 13 ++++++++++++- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/common/dbus.c b/src/common/dbus.c index cf94128c7..f5b40aee2 100644 --- a/src/common/dbus.c +++ b/src/common/dbus.c @@ -181,22 +181,24 @@ DBusMessage* ffDBusGetProperty(FFDBusData* dbus, const char* busName, const char return reply; } -void ffDBusGetPropertyString(FFDBusData* dbus, const char* busName, const char* objectPath, const char* interface, const char* property, FFstrbuf* result) +bool ffDBusGetPropertyString(FFDBusData* dbus, const char* busName, const char* objectPath, const char* interface, const char* property, FFstrbuf* result) { DBusMessage* reply = ffDBusGetProperty(dbus, busName, objectPath, interface, property); if(reply == NULL) - return; + return false; DBusMessageIter rootIterator; if(!dbus->lib->ffdbus_message_iter_init(reply, &rootIterator)) { dbus->lib->ffdbus_message_unref(reply); - return; + return false; } - ffDBusGetValue(dbus, &rootIterator, result); + bool ret = ffDBusGetValue(dbus, &rootIterator, result); dbus->lib->ffdbus_message_unref(reply); + + return ret; } #endif //FF_HAVE_DBUS diff --git a/src/common/dbus.h b/src/common/dbus.h index 8c9be36c2..a327884d4 100644 --- a/src/common/dbus.h +++ b/src/common/dbus.h @@ -48,6 +48,6 @@ bool ffDBusGetBool(FFDBusData* dbus, DBusMessageIter* iter, bool* result); bool ffDBusGetByte(FFDBusData* dbus, DBusMessageIter* iter, uint8_t* result); DBusMessage* ffDBusGetMethodReply(FFDBusData* dbus, const char* busName, const char* objectPath, const char* interface, const char* method); DBusMessage* ffDBusGetProperty(FFDBusData* dbus, const char* busName, const char* objectPath, const char* interface, const char* property); -void ffDBusGetPropertyString(FFDBusData* dbus, const char* busName, const char* objectPath, const char* interface, const char* property, FFstrbuf* result); +bool ffDBusGetPropertyString(FFDBusData* dbus, const char* busName, const char* objectPath, const char* interface, const char* property, FFstrbuf* result); #endif // FF_HAVE_DBUS diff --git a/src/detection/de/de_linux.c b/src/detection/de/de_linux.c index 5f7fd8839..59a1b17a3 100644 --- a/src/detection/de/de_linux.c +++ b/src/detection/de/de_linux.c @@ -1,5 +1,6 @@ #include "de.h" +#include "common/dbus.h" #include "common/io/io.h" #include "common/library.h" #include "common/parsing.h" @@ -41,9 +42,19 @@ static void getKDE(FFstrbuf* result, FFDEOptions* options) } } +static const char* getGnomeBySo(FFstrbuf* result) +{ + FFDBusData dbus; + if (ffDBusLoadData(DBUS_BUS_SESSION, &dbus) != NULL) + return "ffDBusLoadData() failed"; + + ffDBusGetPropertyString(&dbus, "org.gnome.Shell", "/org/gnome/Shell", "org.gnome.Shell", "ShellVersion", result); + return NULL; +} + static void getGnome(FFstrbuf* result, FF_MAYBE_UNUSED FFDEOptions* options) { - ffParsePropFileData("gnome-shell/org.gnome.Extensions", "version :", result); + getGnomeBySo(result); if (result->length == 0) {