feedback-led: Check if at least one LED is available
So far we didn't create any FbdDevLeds if there wasn't at least one usable LED. Once we introduce flash LEDs we might probe the LED but the LED might not be usable as the user hasn't enabled using it. Prepare for that scenario.
This commit is contained in:
+26
-3
@@ -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);
|
||||
}
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user