diff --git a/src/libply-splash-graphics/ply-capslock-icon.c b/src/libply-splash-graphics/ply-capslock-icon.c index 7d19a187..e60457f5 100644 --- a/src/libply-splash-graphics/ply-capslock-icon.c +++ b/src/libply-splash-graphics/ply-capslock-icon.c @@ -52,6 +52,8 @@ struct _ply_capslock_icon bool is_on; }; +static void ply_capslock_stop_polling (ply_capslock_icon_t *capslock_icon); + ply_capslock_icon_t * ply_capslock_icon_new (const char *image_dir) { @@ -74,7 +76,7 @@ ply_capslock_icon_free (ply_capslock_icon_t *capslock_icon) return; if (!capslock_icon->is_hidden) - ply_capslock_icon_hide (capslock_icon); + ply_capslock_stop_polling (capslock_icon); if (capslock_icon->buffer != NULL) ply_pixel_buffer_free (capslock_icon->buffer); @@ -121,6 +123,14 @@ on_timeout (void *user_data, on_timeout, capslock_icon); } +static void +ply_capslock_stop_polling (ply_capslock_icon_t *capslock_icon) +{ + ply_event_loop_stop_watching_for_timeout (capslock_icon->loop, + (ply_event_loop_timeout_handler_t) + on_timeout, capslock_icon); +} + bool ply_capslock_icon_load (ply_capslock_icon_t *capslock_icon) { @@ -183,10 +193,8 @@ ply_capslock_icon_hide (ply_capslock_icon_t *capslock_icon) capslock_icon->is_hidden = true; ply_capslock_icon_draw (capslock_icon); + ply_capslock_stop_polling (capslock_icon); - ply_event_loop_stop_watching_for_timeout (capslock_icon->loop, - (ply_event_loop_timeout_handler_t) - on_timeout, capslock_icon); capslock_icon->loop = NULL; capslock_icon->display = NULL; } diff --git a/src/libply-splash-graphics/ply-keymap-icon.c b/src/libply-splash-graphics/ply-keymap-icon.c index f9ec614f..d5375271 100644 --- a/src/libply-splash-graphics/ply-keymap-icon.c +++ b/src/libply-splash-graphics/ply-keymap-icon.c @@ -130,9 +130,6 @@ ply_keymap_icon_free (ply_keymap_icon_t *keymap_icon) if (keymap_icon == NULL) return; - if (!keymap_icon->is_hidden) - ply_keymap_icon_hide (keymap_icon); - ply_pixel_buffer_free (keymap_icon->icon_buffer); ply_pixel_buffer_free (keymap_icon->keymap_buffer); diff --git a/src/libply-splash-graphics/ply-throbber.c b/src/libply-splash-graphics/ply-throbber.c index a4311fda..bf0855ea 100644 --- a/src/libply-splash-graphics/ply-throbber.c +++ b/src/libply-splash-graphics/ply-throbber.c @@ -78,7 +78,7 @@ struct _ply_throbber uint32_t is_stopped : 1; }; -static void ply_throbber_stop_now (ply_throbber_t *throbber); +static void ply_throbber_stop_now (ply_throbber_t *throbber, bool redraw); ply_throbber_t * ply_throbber_new (const char *image_dir, @@ -126,7 +126,7 @@ ply_throbber_free (ply_throbber_t *throbber) return; if (!throbber->is_stopped) - ply_throbber_stop_now (throbber); + ply_throbber_stop_now (throbber, false); ply_throbber_remove_frames (throbber); ply_array_free (throbber->frames); @@ -324,15 +324,18 @@ ply_throbber_start (ply_throbber_t *throbber, } static void -ply_throbber_stop_now (ply_throbber_t *throbber) +ply_throbber_stop_now (ply_throbber_t *throbber, bool redraw) { throbber->is_stopped = true; - ply_pixel_display_draw_area (throbber->display, - throbber->x, - throbber->y, - throbber->frame_area.width, - throbber->frame_area.height); + if (redraw) { + ply_pixel_display_draw_area (throbber->display, + throbber->x, + throbber->y, + throbber->frame_area.width, + throbber->frame_area.height); + } + if (throbber->loop != NULL) { ply_event_loop_stop_watching_for_timeout (throbber->loop, (ply_event_loop_timeout_handler_t) @@ -356,7 +359,7 @@ ply_throbber_stop (ply_throbber_t *throbber, } if (stop_trigger == NULL) { - ply_throbber_stop_now (throbber); + ply_throbber_stop_now (throbber, true); return; }