diff --git a/src/ratbagd-profile.c b/src/ratbagd-profile.c index 740e24c2..1bbd3039 100644 --- a/src/ratbagd-profile.c +++ b/src/ratbagd-profile.c @@ -117,24 +117,22 @@ static int ratbagd_profile_get_active_resolution(sd_bus *bus, sd_bus_error *error) { struct ratbagd_profile *profile = userdata; - unsigned int i, n_resolutions, k = 0; + struct ratbagd_resolution *resolution; + unsigned int i; - n_resolutions = ratbag_profile_get_num_resolutions(profile->lib_profile); - for (i = 0; i < n_resolutions; ++i) { - struct ratbag_resolution *resolution; - - resolution = ratbag_profile_get_resolution(profile->lib_profile, i); + for (i = 0; i < profile->n_resolutions; ++i) { + resolution = profile->resolutions[i]; if (!resolution) continue; - if (!ratbag_resolution_is_active(resolution)) { - ++k; + if (!ratbagd_resolution_is_active(resolution)) continue; - } - return sd_bus_message_append(reply, "u", k); + return sd_bus_message_append(reply, "o", + ratbagd_resolution_get_path(resolution)); } - return sd_bus_message_append(reply, "u", (unsigned int)-1); + /* Eww, we want 'maybe' types here! */ + return sd_bus_message_append(reply, "o", "/"); } static int ratbagd_profile_get_default_resolution(sd_bus *bus, @@ -146,24 +144,22 @@ static int ratbagd_profile_get_default_resolution(sd_bus *bus, sd_bus_error *error) { struct ratbagd_profile *profile = userdata; - unsigned int i, n_resolutions, k = 0; + struct ratbagd_resolution *resolution; + unsigned int i; - n_resolutions = ratbag_profile_get_num_resolutions(profile->lib_profile); - for (i = 0; i < n_resolutions; ++i) { - struct ratbag_resolution *resolution; - - resolution = ratbag_profile_get_resolution(profile->lib_profile, i); + for (i = 0; i < profile->n_resolutions; ++i) { + resolution = profile->resolutions[i]; if (!resolution) continue; - if (!ratbag_resolution_is_default(resolution)) { - ++k; + if (!ratbagd_resolution_is_default(resolution)) continue; - } - return sd_bus_message_append(reply, "u", k); + return sd_bus_message_append(reply, "o", + ratbagd_resolution_get_path(resolution)); } - return sd_bus_message_append(reply, "u", (unsigned int)-1); + /* Eww, we want 'maybe' types here! */ + return sd_bus_message_append(reply, "o", "/"); } static int ratbagd_profile_set_active(sd_bus_message *m, @@ -206,8 +202,8 @@ const sd_bus_vtable ratbagd_profile_vtable[] = { SD_BUS_VTABLE_START(0), SD_BUS_PROPERTY("Index", "u", NULL, offsetof(struct ratbagd_profile, index), SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("Resolutions", "ao", ratbagd_profile_get_resolutions, 0, 0), - SD_BUS_PROPERTY("ActiveResolution", "u", ratbagd_profile_get_active_resolution, 0, 0), - SD_BUS_PROPERTY("DefaultResolution", "u", ratbagd_profile_get_default_resolution, 0, 0), + SD_BUS_PROPERTY("ActiveResolution", "o", ratbagd_profile_get_active_resolution, 0, 0), + SD_BUS_PROPERTY("DefaultResolution", "o", ratbagd_profile_get_default_resolution, 0, 0), SD_BUS_METHOD("SetActive", "", "u", ratbagd_profile_set_active, SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_METHOD("GetResolutionByIndex", "u", "o", ratbagd_profile_get_resolution_by_index, SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_VTABLE_END, diff --git a/src/ratbagd-resolution.c b/src/ratbagd-resolution.c index c60bad34..0dc9b4e5 100644 --- a/src/ratbagd-resolution.c +++ b/src/ratbagd-resolution.c @@ -112,3 +112,15 @@ struct ratbagd_resolution *ratbagd_resolution_free(struct ratbagd_resolution *re return mfree(resolution); } + +bool ratbagd_resolution_is_active(struct ratbagd_resolution *resolution) +{ + assert(resolution); + return ratbag_resolution_is_active(resolution->lib_resolution) != 0; +} + +bool ratbagd_resolution_is_default(struct ratbagd_resolution *resolution) +{ + assert(resolution); + return ratbag_resolution_is_default(resolution->lib_resolution) != 0; +} diff --git a/src/ratbagd.h b/src/ratbagd.h index d29bf5d6..c4ccb08b 100644 --- a/src/ratbagd.h +++ b/src/ratbagd.h @@ -74,6 +74,8 @@ int ratbagd_resolution_new(struct ratbagd_resolution **out, unsigned int index); struct ratbagd_resolution *ratbagd_resolution_free(struct ratbagd_resolution *resolution); const char *ratbagd_resolution_get_path(struct ratbagd_resolution *resolution); +bool ratbagd_resolution_is_active(struct ratbagd_resolution *resolution); +bool ratbagd_resolution_is_default(struct ratbagd_resolution *resolution); DEFINE_TRIVIAL_CLEANUP_FUNC(struct ratbagd_resolution *, ratbagd_resolution_free);