From c24ca68d633ed69718c9ab4e8b91c23300c28a02 Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Tue, 29 Sep 2015 16:34:32 +0200 Subject: [PATCH] ratbagd: expose 'DefaultProfile' Add a new property that exposes the default profile. Signed-off-by: David Herrmann --- src/ratbagd-device.c | 28 ++++++++++++++++++++++++++++ src/ratbagd-profile.c | 6 ++++++ src/ratbagd.h | 1 + 3 files changed, 35 insertions(+) diff --git a/src/ratbagd-device.c b/src/ratbagd-device.c index 0702e312..0f8a4420 100644 --- a/src/ratbagd-device.c +++ b/src/ratbagd-device.c @@ -194,12 +194,40 @@ static int ratbagd_device_get_active_profile(sd_bus *bus, return sd_bus_message_append(reply, "o", "/"); } +static int ratbagd_device_get_default_profile(sd_bus *bus, + const char *path, + const char *interface, + const char *property, + sd_bus_message *reply, + void *userdata, + sd_bus_error *error) +{ + struct ratbagd_device *device = userdata; + struct ratbagd_profile *profile; + unsigned int i; + + for (i = 0; i < device->n_profiles; ++i) { + profile = device->profiles[i]; + if (!profile) + continue; + if (!ratbagd_profile_is_default(profile)) + continue; + + return sd_bus_message_append(reply, "o", + ratbagd_profile_get_path(profile)); + } + + /* Eww, we want 'maybe' types here! */ + return sd_bus_message_append(reply, "o", "/"); +} + const sd_bus_vtable ratbagd_device_vtable[] = { SD_BUS_VTABLE_START(0), SD_BUS_PROPERTY("Id", "s", NULL, offsetof(struct ratbagd_device, name), SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("Description", "s", ratbagd_device_get_description, 0, SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("Profiles", "ao", ratbagd_device_get_profiles, 0, SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("ActiveProfile", "o", ratbagd_device_get_active_profile, 0, 0), + SD_BUS_PROPERTY("DefaultProfile", "o", ratbagd_device_get_default_profile, 0, 0), SD_BUS_VTABLE_END, }; diff --git a/src/ratbagd-profile.c b/src/ratbagd-profile.c index 69b5370c..7b557b27 100644 --- a/src/ratbagd-profile.c +++ b/src/ratbagd-profile.c @@ -103,3 +103,9 @@ bool ratbagd_profile_is_active(struct ratbagd_profile *profile) assert(profile); return ratbag_profile_is_active(profile->lib_profile) != 0; } + +bool ratbagd_profile_is_default(struct ratbagd_profile *profile) +{ + assert(profile); + return ratbag_profile_is_default(profile->lib_profile) != 0; +} diff --git a/src/ratbagd.h b/src/ratbagd.h index 4039cad6..e804d336 100644 --- a/src/ratbagd.h +++ b/src/ratbagd.h @@ -53,6 +53,7 @@ int ratbagd_profile_new(struct ratbagd_profile **out, struct ratbagd_profile *ratbagd_profile_free(struct ratbagd_profile *profile); const char *ratbagd_profile_get_path(struct ratbagd_profile *profile); bool ratbagd_profile_is_active(struct ratbagd_profile *profile); +bool ratbagd_profile_is_default(struct ratbagd_profile *profile); DEFINE_TRIVIAL_CLEANUP_FUNC(struct ratbagd_profile *, ratbagd_profile_free);