From: Charlie Brej Date: Thu, 1 Apr 2010 14:47:29 +0000 (+0100) Subject: [script] Connect and disconnect the keyboard on start and stop X-Git-Tag: 0.8.2~9 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ff77bbfdda1a0167cafe4c635dddf89edcdd5cc0;p=thirdparty%2Fplymouth.git [script] Connect and disconnect the keyboard on start and stop Previously we were connecting to the keyboard but not disconnecting from it as unset_keyboard was not called before the plugin being destroyed. Now we connect when on splash start and destroy which makes sure we disconnect before being destroyed. --- diff --git a/src/plugins/splash/script/plugin.c b/src/plugins/splash/script/plugin.c index 4930677e..e304fdfe 100644 --- a/src/plugins/splash/script/plugin.c +++ b/src/plugins/splash/script/plugin.c @@ -74,6 +74,7 @@ struct _ply_boot_splash_plugin ply_event_loop_t *loop; ply_boot_splash_mode_t mode; ply_list_t *displays; + ply_keyboard_t *keyboard; char *script_filename; char *image_dir; @@ -93,7 +94,9 @@ struct _ply_boot_splash_plugin static void detach_from_event_loop (ply_boot_splash_plugin_t *plugin); static void stop_animation (ply_boot_splash_plugin_t *plugin); ply_boot_splash_plugin_interface_t *ply_boot_splash_plugin_get_interface (void); - +static void on_keyboard_input (ply_boot_splash_plugin_t *plugin, + const char *keyboard_input, + size_t character_size); static void pause_displays (ply_boot_splash_plugin_t *plugin) @@ -221,6 +224,9 @@ start_script_animation (ply_boot_splash_plugin_t *plugin) script_return_t ret = script_execute (plugin->script_state, plugin->script_main_op); script_obj_unref (ret.object); + ply_keyboard_add_input_handler (plugin->keyboard, + (ply_keyboard_input_handler_t) + on_keyboard_input, plugin); on_timeout (plugin); return true; @@ -256,6 +262,14 @@ stop_script_animation (ply_boot_splash_plugin_t *plugin) (ply_event_loop_timeout_handler_t) on_timeout, plugin); + if (plugin->keyboard != NULL) + { + ply_keyboard_remove_input_handler (plugin->keyboard, + (ply_keyboard_input_handler_t) + on_keyboard_input); + plugin->keyboard = NULL; + } + script_state_destroy (plugin->script_state); script_lib_sprite_destroy (plugin->script_sprite_lib); script_lib_image_destroy (plugin->script_image_lib); @@ -311,19 +325,14 @@ static void set_keyboard (ply_boot_splash_plugin_t *plugin, ply_keyboard_t *keyboard) { - - ply_keyboard_add_input_handler (keyboard, - (ply_keyboard_input_handler_t) - on_keyboard_input, plugin); + plugin->keyboard = keyboard; } static void unset_keyboard (ply_boot_splash_plugin_t *plugin, ply_keyboard_t *keyboard) { - ply_keyboard_remove_input_handler (keyboard, - (ply_keyboard_input_handler_t) - on_keyboard_input); + plugin->keyboard = NULL; } static void