diff --git a/src/fbd-dev-leds.c b/src/fbd-dev-leds.c index f0eb1df..ae9c278 100644 --- a/src/fbd-dev-leds.c +++ b/src/fbd-dev-leds.c @@ -48,7 +48,7 @@ find_led_by_color (FbdDevLeds *self, FbdFeedbackLedColor color) g_return_val_if_fail (self->leds, NULL); for (GSList *l = self->leds; l != NULL; l = l->next) { - FbdDevLed *led = l->data; + FbdDevLed *led = FBD_DEV_LED (l->data); if (fbd_dev_led_supports_color (led, color)) return led; } @@ -199,7 +199,10 @@ fbd_dev_leds_start_periodic (FbdDevLeds *self, g_return_val_if_fail (FBD_IS_DEV_LEDS (self), FALSE); g_return_val_if_fail (max_brightness_percentage <= 100.0, FALSE); led = find_led_by_color (self, color); - g_return_val_if_fail (led, FALSE); + if (!led) { + g_warning_once ("No usable led found"); + return FALSE; + } fbd_dev_led_set_color (led, color, rgb); @@ -214,7 +217,27 @@ fbd_dev_leds_stop (FbdDevLeds *self, FbdFeedbackLedColor color) g_return_val_if_fail (FBD_IS_DEV_LEDS (self), FALSE); led = find_led_by_color (self, color); - g_return_val_if_fail (led, FALSE); + if (!led) { + g_warning_once ("No usable led found"); + return FALSE; + } return fbd_dev_led_set_brightness (led, 0); } + +/** + * fbd_dev_leds_has_led: + * @self: The FbdDevLeds + * @color: The color type to check + * + * Whether there's a usable LED of the given type + * + * Returns: `TRUE` if there's a at least one usable LED, otherwise `FALSE` + */ +gboolean +fbd_dev_leds_has_led (FbdDevLeds *self, FbdFeedbackLedColor color) +{ + g_return_val_if_fail (FBD_IS_DEV_LEDS (self), FALSE); + + return !!find_led_by_color (self, color); +} diff --git a/src/fbd-dev-leds.h b/src/fbd-dev-leds.h index 6387882..368ec2c 100644 --- a/src/fbd-dev-leds.h +++ b/src/fbd-dev-leds.h @@ -22,7 +22,7 @@ gboolean fbd_dev_leds_start_periodic (FbdDevLeds *self, FbdLedRgbColor *rgb, guint max_brighness, guint freq); -gboolean fbd_dev_leds_stop (FbdDevLeds *self, - FbdFeedbackLedColor color); +gboolean fbd_dev_leds_stop (FbdDevLeds *self, FbdFeedbackLedColor color); +gboolean fbd_dev_leds_has_led (FbdDevLeds *self, FbdFeedbackLedColor color); G_END_DECLS diff --git a/src/fbd-feedback-led.c b/src/fbd-feedback-led.c index dc297b7..f9fd408 100644 --- a/src/fbd-feedback-led.c +++ b/src/fbd-feedback-led.c @@ -250,7 +250,10 @@ fbd_feedback_led_is_available (FbdFeedbackBase *base) FbdFeedbackManager *manager = fbd_feedback_manager_get_default (); FbdDevLeds *dev = fbd_feedback_manager_get_dev_leds (manager); - return FBD_IS_DEV_LEDS (dev); + if (!FBD_IS_DEV_LEDS (dev)) + return FALSE; + + return fbd_dev_leds_has_led (dev, FBD_FEEDBACK_LED_COLOR_WHITE); }