From 95cb84bf4d07b6322d7240f86b7b8d9c647d2ee7 Mon Sep 17 00:00:00 2001 From: Martin Pitt Date: Tue, 24 Aug 2010 10:33:59 +0200 Subject: [PATCH] Speed up xfce4-keyboard-settings startup The construction of the keyboard model combo box takes half of the startup time (1 second out of 2 in total on a slow embedded system). Since it is not even shown by default, move it into an idle handler to take it out of the startup path. http://bugzilla.xfce.org/show_bug.cgi?id=6661 --- dialogs/keyboard-settings/xfce-keyboard-settings.c | 38 ++++++++++++++------ 1 files changed, 27 insertions(+), 11 deletions(-) diff --git a/dialogs/keyboard-settings/xfce-keyboard-settings.c b/dialogs/keyboard-settings/xfce-keyboard-settings.c index c8ff615..05d1c9d 100644 --- a/dialogs/keyboard-settings/xfce-keyboard-settings.c +++ b/dialogs/keyboard-settings/xfce-keyboard-settings.c @@ -224,6 +224,30 @@ xfce_keyboard_settings_init (XfceKeyboardSettings *settings) } +static gboolean +xfce_keyboard_settings_fill_models (gpointer data) +{ + XfceKeyboardSettings *settings = XFCE_KEYBOARD_SETTINGS (data); + GObject *xkb_model_combo; + GtkListStore *list_store; + + xkb_model_combo = gtk_builder_get_object (GTK_BUILDER (settings), "xkb_model_combo"); + list_store = gtk_list_store_new (XKB_COMBO_NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING); + gtk_combo_box_set_model (GTK_COMBO_BOX (xkb_model_combo), GTK_TREE_MODEL (list_store)); + + xkl_config_registry_foreach_model (settings->priv->xkl_registry, + (ConfigItemProcessFunc) xfce_keyboard_settings_add_model_to_combo, + settings); + + gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (list_store), 0, GTK_SORT_ASCENDING); + xfce_keyboard_settings_init_model (settings); + g_signal_connect (G_OBJECT (xkb_model_combo), + "changed", + G_CALLBACK (xfce_keyboard_settings_model_changed_cb), + settings); + + return FALSE; +} static void xfce_keyboard_settings_constructed (GObject *object) @@ -342,17 +366,9 @@ xfce_keyboard_settings_constructed (GObject *object) renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (xkb_model_combo), renderer, TRUE); gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (xkb_model_combo), renderer, "text", 0); - list_store = gtk_list_store_new (XKB_COMBO_NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING); - gtk_combo_box_set_model (GTK_COMBO_BOX (xkb_model_combo), GTK_TREE_MODEL (list_store)); - xkl_config_registry_foreach_model (settings->priv->xkl_registry, - (ConfigItemProcessFunc) xfce_keyboard_settings_add_model_to_combo, - settings); - gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (list_store), 0, GTK_SORT_ASCENDING); - xfce_keyboard_settings_init_model (settings); - g_signal_connect (G_OBJECT (xkb_model_combo), - "changed", - G_CALLBACK (xfce_keyboard_settings_model_changed_cb), - settings); + + /* This takes very long, so move it out of the startup path */ + g_idle_add (xfce_keyboard_settings_fill_models, settings); /* Keyboard layout/variant treeview */ settings->priv->layout_selection_treestore = NULL; -- 1.7.1