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) {