diff options
author | Ray Strode <rstrode@redhat.com> | 2009-03-09 12:18:56 -0400 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2009-03-09 12:28:27 -0400 |
commit | 546fbdc0b8bff126066778ef789e00ddb47dfd49 (patch) | |
tree | 87f0075593b7e16d1832cfc5d0c5d85548191d7e | |
parent | 2b0d1855464469853dbb1d09182a3c4bea6dd198 (diff) |
Remove event handlers on destroy in plugins
This is because we can end up in scenarios
where a plugin gets destroyed, and readded
without getting hidden in between.
-rw-r--r-- | src/plugins/splash/details/plugin.c | 12 | ||||
-rw-r--r-- | src/plugins/splash/fade-in/plugin.c | 2 | ||||
-rw-r--r-- | src/plugins/splash/glow/plugin.c | 2 | ||||
-rw-r--r-- | src/plugins/splash/pulser/plugin.c | 2 | ||||
-rw-r--r-- | src/plugins/splash/solar/plugin.c | 1 | ||||
-rw-r--r-- | src/plugins/splash/spinfinity/plugin.c | 2 | ||||
-rw-r--r-- | src/plugins/splash/text/plugin.c | 2 |
7 files changed, 23 insertions, 0 deletions
diff --git a/src/plugins/splash/details/plugin.c b/src/plugins/splash/details/plugin.c index c25b75ac..2eed3418 100644 --- a/src/plugins/splash/details/plugin.c +++ b/src/plugins/splash/details/plugin.c @@ -64,6 +64,14 @@ typedef enum { typedef void (* ply_boot_splash_plugin_window_handler_t) (ply_window_t *window, ply_boot_splash_plugin_t *, void *user_data, void *other_user_data); +static void uninitialize_window (ply_window_t *window, + ply_boot_splash_plugin_t *plugin); + +static void for_each_window (ply_boot_splash_plugin_t *plugin, + ply_boot_splash_plugin_window_handler_t handler, + void *user_data, + void *other_user_data); + ply_boot_splash_plugin_interface_t *ply_boot_splash_plugin_get_interface (void); struct _ply_boot_splash_plugin { @@ -94,6 +102,10 @@ destroy_plugin (ply_boot_splash_plugin_t *plugin) if (plugin == NULL) return; + for_each_window (plugin, + (ply_boot_splash_plugin_window_handler_t) + uninitialize_window, NULL, NULL); + ply_list_free (plugin->windows); free (plugin); diff --git a/src/plugins/splash/fade-in/plugin.c b/src/plugins/splash/fade-in/plugin.c index 598bc08a..f06f4988 100644 --- a/src/plugins/splash/fade-in/plugin.c +++ b/src/plugins/splash/fade-in/plugin.c @@ -167,6 +167,8 @@ destroy_plugin (ply_boot_splash_plugin_t *plugin) if (plugin == NULL) return; + remove_handlers (plugin); + if (plugin->loop != NULL) { ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t) diff --git a/src/plugins/splash/glow/plugin.c b/src/plugins/splash/glow/plugin.c index c81c9215..25f7ba6b 100644 --- a/src/plugins/splash/glow/plugin.c +++ b/src/plugins/splash/glow/plugin.c @@ -125,6 +125,8 @@ destroy_plugin (ply_boot_splash_plugin_t *plugin) if (plugin == NULL) return; + remove_handlers (plugin); + if (plugin->loop != NULL) { ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t) diff --git a/src/plugins/splash/pulser/plugin.c b/src/plugins/splash/pulser/plugin.c index 122139ed..adfb7128 100644 --- a/src/plugins/splash/pulser/plugin.c +++ b/src/plugins/splash/pulser/plugin.c @@ -102,6 +102,8 @@ destroy_plugin (ply_boot_splash_plugin_t *plugin) if (plugin == NULL) return; + remove_handlers (plugin); + /* It doesn't ever make sense to keep this plugin on screen * after exit */ diff --git a/src/plugins/splash/solar/plugin.c b/src/plugins/splash/solar/plugin.c index d80d97f9..8ca3beb0 100644 --- a/src/plugins/splash/solar/plugin.c +++ b/src/plugins/splash/solar/plugin.c @@ -245,6 +245,7 @@ destroy_plugin (ply_boot_splash_plugin_t *plugin) if (plugin == NULL) return; + remove_handlers (plugin); if (plugin->loop != NULL) { diff --git a/src/plugins/splash/spinfinity/plugin.c b/src/plugins/splash/spinfinity/plugin.c index 07460f1b..604a7daf 100644 --- a/src/plugins/splash/spinfinity/plugin.c +++ b/src/plugins/splash/spinfinity/plugin.c @@ -126,6 +126,8 @@ destroy_plugin (ply_boot_splash_plugin_t *plugin) if (plugin == NULL) return; + remove_handlers (plugin); + if (plugin->loop != NULL) { ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t) diff --git a/src/plugins/splash/text/plugin.c b/src/plugins/splash/text/plugin.c index bbc5a3b7..f58474e0 100644 --- a/src/plugins/splash/text/plugin.c +++ b/src/plugins/splash/text/plugin.c @@ -107,6 +107,8 @@ destroy_plugin (ply_boot_splash_plugin_t *plugin) if (plugin == NULL) return; + remove_handlers (plugin); + /* It doesn't ever make sense to keep this plugin on screen * after exit */ |