diff --git a/ChangeLog b/ChangeLog index 94d48c68ba..a9c80715fa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2009-06-25 Enrico Tröger + + * data/ui_toolbar.xml, doc/geany.txt, doc/geany.html, src/ui_utils.c, + src/toolbar.c, src/toolbar.h: + Remove ui_toolbar.xml Configuration Files menu item. + Add a real toolbar editor dialog. + + 2009-06-25 Nick Treleaven * src/dialogs.c: diff --git a/data/ui_toolbar.xml b/data/ui_toolbar.xml index 1d2dade3c8..2907d4e18b 100644 --- a/data/ui_toolbar.xml +++ b/data/ui_toolbar.xml @@ -1,12 +1,15 @@ \n\ +\t\n"; + GString *str = g_string_new(template); + + gtk_tree_model_foreach(GTK_TREE_MODEL(tbw->store_used), tb_editor_foreach_used, str); + + g_string_append(str, "\n\t\n\n"); + + return g_string_free(str, FALSE); +} + + +void toolbar_configure(void) +{ + gchar *markup; + const gchar *name; + const gchar *filename = utils_build_path(app->configdir, "ui_toolbar.xml", NULL); + GSList *sl, *used_items; + GList *l, *all_items; + GtkTreePath *path; + gint response; + TBEditorWidget *tbw; + + /* read the current active toolbar items */ + markup = gtk_ui_manager_get_ui(uim); + used_items = tb_editor_parse_ui(markup, strlen(markup), NULL); + g_free(markup); + + /* get all available actions */ + all_items = gtk_action_group_list_actions(group); + + /* create the GUI */ + tbw = tb_editor_create_dialog(); + + /* fill the stores */ + gtk_list_store_insert_with_values(tbw->store_available, NULL, -1, 0, TB_EDITOR_SEPARATOR, -1); + foreach_list(l, all_items) + { + name = gtk_action_get_name(l->data); + if (g_slist_find_custom(used_items, name, (GCompareFunc) strcmp) == NULL) + gtk_list_store_insert_with_values(tbw->store_available, NULL, -1, 0, name, -1); + } + foreach_slist(sl, used_items) + { + gtk_list_store_insert_with_values(tbw->store_used, NULL, -1, 0, sl->data, -1); + } + /* select first item */ + path = gtk_tree_path_new_from_string("0"); + gtk_tree_selection_select_path(gtk_tree_view_get_selection(tbw->tree_used), path); + gtk_tree_path_free(path); + + /* run it */ + while ((response = gtk_dialog_run(GTK_DIALOG(tbw->dialog)))) + { + markup = tb_editor_write_markup(tbw); + toolbar_reload(markup); + utils_write_file(filename, markup); + g_free(markup); + + if (response == GTK_RESPONSE_CLOSE) + break; + } + gtk_widget_destroy(tbw->dialog); + + g_slist_foreach(used_items, (GFunc) g_free, NULL); + g_slist_free(used_items); + g_list_free(all_items); + tb_editor_free_path(tbw); + g_free(tbw); +} + + diff --git a/src/toolbar.h b/src/toolbar.h index 630238231d..25c2ebcc92 100644 --- a/src/toolbar.h +++ b/src/toolbar.h @@ -45,8 +45,6 @@ GtkAction *toolbar_get_action_by_name(const gchar *name); gint toolbar_get_insert_position(void); -void toolbar_add_config_file_menu_item(void); - void toolbar_update_ui(void); void toolbar_apply_settings(void); @@ -57,4 +55,6 @@ GtkWidget *toolbar_init(void); void toolbar_finalize(void); +void toolbar_configure(void); + #endif diff --git a/src/ui_utils.c b/src/ui_utils.c index 3dfefc8ff4..1ece665e43 100644 --- a/src/ui_utils.c +++ b/src/ui_utils.c @@ -1862,7 +1862,6 @@ void ui_init(void) ui_init_toolbar_widgets(); init_document_widgets(); create_config_files_menu(); - toolbar_add_config_file_menu_item(); }