diff options
-rw-r--r-- | src/power/power.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/power/power.c b/src/power/power.c index 49d4ec2..5e82685 100644 --- a/src/power/power.c +++ b/src/power/power.c @@ -139,6 +139,14 @@ Proxy *power_create_logind() error("Unable to connect to logind via DBus: %s", err->message); g_error_free(err); + return NULL; + } + // Logind always has some properties, if no property is cached, + // the proxied object doesn't exist => don't use logind + if (g_dbus_proxy_get_cached_property_names(logind_proxy) == NULL) { + g_object_unref(logind_proxy); + debug("Logind DBus interface is not available"); + return NULL; } return logind_proxy; #else @@ -164,6 +172,7 @@ bool power_call_logind(Proxy *proxy, const char *method) return true; } } + return false; #endif return false; } @@ -385,15 +394,7 @@ unsigned short *power_available_requested_power_states(Power *power, int *count) int i = 0; #ifdef HAS_GDBUS - GError *err = NULL; - GDBusProxy *logind_proxy; - if ((logind_proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_NONE, NULL, LOGIND_NAME, LOGIND_PATH, - LOGIND_INTERFACE, NULL, &err)) == NULL) { - - error("Unable to connect to logind via DBus: %s", err->message); - g_error_free(err); - } + GDBusProxy *logind_proxy = power_create_logind(); #else void *logind_proxy = NULL; #endif |