Revision: 3881 http://geany.svn.sourceforge.net/geany/?rev=3881&view=rev Author: eht16 Date: 2009-06-20 16:53:12 +0000 (Sat, 20 Jun 2009)
Log Message: ----------- Refactor the keybindings code for the preferences dialog, prefix all related functions.
Modified Paths: -------------- trunk/ChangeLog trunk/src/prefs.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2009-06-20 16:52:58 UTC (rev 3880) +++ trunk/ChangeLog 2009-06-20 16:53:12 UTC (rev 3881) @@ -21,6 +21,8 @@ * src/prefs.c: Add a popup menu for the keybinding list in the preferences dialog to easily expand and collapse all groups. + Refactor the keybindings code for the preferences dialog, prefix all + related functions.
2009-06-18 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
Modified: trunk/src/prefs.c =================================================================== --- trunk/src/prefs.c 2009-06-20 16:52:58 UTC (rev 3880) +++ trunk/src/prefs.c 2009-06-20 16:53:12 UTC (rev 3881) @@ -77,12 +77,10 @@ static GtkWidget *dialog_label; static gboolean edited = FALSE;
-static gboolean on_tree_view_button_press_event( - GtkWidget *widget, GdkEventButton *event, gpointer user_data); -static void on_cell_edited(GtkCellRendererText *cellrenderertext, gchar *path, gchar *new_text, gpointer user_data); -static gboolean on_keytype_dialog_response(GtkWidget *dialog, GdkEventKey *event, gpointer user_data); -static void on_dialog_response(GtkWidget *dialog, gint response, gpointer user_data); -static gboolean find_duplicate(GeanyKeyBinding *search_kb, +static void kb_cell_edited_cb(GtkCellRendererText *cellrenderertext, gchar *path, gchar *new_text, gpointer user_data); +static gboolean kb_keytype_dialog_response_cb(GtkWidget *dialog, GdkEventKey *event, gpointer user_data); +static void kb_dialog_response_cb(GtkWidget *dialog, gint response, gpointer user_data); +static gboolean kb_find_duplicate(GeanyKeyBinding *search_kb, guint key, GdkModifierType mods, const gchar *action); static void on_toolbar_show_toggled(GtkToggleButton *togglebutton, gpointer user_data); static void on_show_notebook_tabs_toggled(GtkToggleButton *togglebutton, gpointer user_data); @@ -130,8 +128,67 @@ };
-static void on_expand_collapse(GtkWidget *item, gpointer user_data) +static void kb_tree_view_change_button_clicked_cb(GtkWidget *button, gpointer data) { + GtkTreeModel *model; + GtkTreeSelection *selection; + gchar *name; + + selection = gtk_tree_view_get_selection(tree); + if (gtk_tree_selection_get_selected(selection, &model, &g_iter)) + { + if (gtk_tree_model_iter_has_child(model, &g_iter)) + { /* double click on a section to expand or collapse it */ + GtkTreePath *path = gtk_tree_model_get_path(model, &g_iter); + + if (gtk_tree_view_row_expanded(tree, path)) + gtk_tree_view_collapse_row(tree, path); + else + gtk_tree_view_expand_row(tree, path, FALSE); + + gtk_tree_path_free(path); + return; + } + + gtk_tree_model_get(model, &g_iter, KB_TREE_ACTION, &name, -1); + if (name != NULL) + { + GtkWidget *dialog; + GtkWidget *label; + gchar *str; + + dialog = gtk_dialog_new_with_buttons(_("Grab Key"), GTK_WINDOW(ui_widgets.prefs_dialog), + GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); + + str = g_strdup_printf( + _("Press the combination of the keys you want to use for "%s"."), name); + label = gtk_label_new(str); + gtk_misc_set_padding(GTK_MISC(label), 5, 10); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), label); + + dialog_label = gtk_label_new(""); + gtk_misc_set_padding(GTK_MISC(dialog_label), 5, 10); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), dialog_label); + + g_signal_connect(dialog, "key-press-event", + G_CALLBACK(kb_keytype_dialog_response_cb), NULL); + g_signal_connect(dialog, "response", G_CALLBACK(kb_dialog_response_cb), NULL); + + /* copy name to global variable to hold it, will be freed in on_dialog_response() */ + dialog_key_name = g_strdup(name); + + gtk_widget_show_all(dialog); + g_free(str); + g_free(name); + } + } +} + + +static void kb_expand_collapse_cb(GtkWidget *item, gpointer user_data) +{ if (user_data != NULL) gtk_tree_view_expand_all(tree); else @@ -152,12 +209,12 @@ item = ui_image_menu_item_new(GTK_STOCK_ADD, _("_Expand All")); gtk_widget_show(item); gtk_container_add(GTK_CONTAINER(menu), item); - g_signal_connect(item, "activate", G_CALLBACK(on_expand_collapse), GINT_TO_POINTER(TRUE)); + g_signal_connect(item, "activate", G_CALLBACK(kb_expand_collapse_cb), GINT_TO_POINTER(TRUE));
item = ui_image_menu_item_new(GTK_STOCK_REMOVE, _("_Collapse All")); gtk_widget_show(item); gtk_container_add(GTK_CONTAINER(menu), item); - g_signal_connect(item, "activate", G_CALLBACK(on_expand_collapse), NULL); + g_signal_connect(item, "activate", G_CALLBACK(kb_expand_collapse_cb), NULL);
gtk_menu_attach_to_widget(GTK_MENU(menu), widget, NULL); } @@ -184,8 +241,25 @@ }
-static void init_kb_tree(void) +static gboolean kb_tree_view_button_press_event_cb(GtkWidget *widget, GdkEventButton *event, + gpointer user_data) { + if (event->button == 3 && event->type == GDK_BUTTON_PRESS) + { + kb_show_popup_menu(widget, event); + return TRUE; + } + else if (event->type == GDK_2BUTTON_PRESS) + { + kb_tree_view_change_button_clicked_cb(NULL, NULL); + return TRUE; + } + return FALSE; +} + + +static void kb_init_tree(void) +{ GtkCellRenderer *renderer; GtkTreeViewColumn *column;
@@ -210,15 +284,15 @@ GTK_SCROLLED_WINDOW(ui_lookup_widget(ui_widgets.prefs_dialog, "scrolledwindow8")), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
- g_signal_connect(renderer, "edited", G_CALLBACK(on_cell_edited), NULL); - g_signal_connect(tree, "button-press-event", G_CALLBACK(on_tree_view_button_press_event), NULL); + g_signal_connect(renderer, "edited", G_CALLBACK(kb_cell_edited_cb), NULL); + g_signal_connect(tree, "button-press-event", G_CALLBACK(kb_tree_view_button_press_event_cb), NULL); g_signal_connect(tree, "popup-menu", G_CALLBACK(kb_popup_menu_cb), NULL); g_signal_connect(ui_lookup_widget(ui_widgets.prefs_dialog, "button2"), "clicked", - G_CALLBACK(on_tree_view_button_press_event), NULL); + G_CALLBACK(kb_tree_view_change_button_clicked_cb), NULL); }
-static void init_keybindings(void) +static void kb_init(void) { GtkTreeIter parent, iter; gsize g, i; @@ -227,7 +301,7 @@ GeanyKeyBinding *kb;
if (store == NULL) - init_kb_tree(); + kb_init_tree();
for (g = 0; g < keybinding_groups->len; g++) { @@ -553,7 +627,7 @@
/* Keybindings */ - init_keybindings(); + kb_init();
/* Printing */ { @@ -1158,79 +1232,8 @@ }
-static gboolean on_tree_view_button_press_event( - GtkWidget *widget, GdkEventButton *event, gpointer user_data) +static GeanyKeyBinding *kb_lookup_kb_from_iter(G_GNUC_UNUSED GtkTreeModel *model, GtkTreeIter *iter) { - GtkTreeModel *model; - GtkTreeSelection *selection; - gchar *name; - - if (event->button == 3 && event->type == GDK_BUTTON_PRESS) - { - kb_show_popup_menu(widget, event); - return TRUE; - } - else if (event->type == GDK_2BUTTON_PRESS) - { - - selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)); - if (gtk_tree_selection_get_selected(selection, &model, &g_iter)) - { - if (gtk_tree_model_iter_has_child(model, &g_iter)) - { /* double click on a section to expand or collapse it */ - GtkTreePath *path = gtk_tree_model_get_path(model, &g_iter); - - if (gtk_tree_view_row_expanded(tree, path)) - gtk_tree_view_collapse_row(tree, path); - else - gtk_tree_view_expand_row(tree, path, FALSE); - - gtk_tree_path_free(path); - return TRUE; - } - - gtk_tree_model_get(model, &g_iter, KB_TREE_ACTION, &name, -1); - if (name != NULL) - { - GtkWidget *dialog; - GtkWidget *label; - gchar *str; - - dialog = gtk_dialog_new_with_buttons(_("Grab Key"), GTK_WINDOW(ui_widgets.prefs_dialog), - GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); - - str = g_strdup_printf( - _("Press the combination of the keys you want to use for "%s"."), name); - label = gtk_label_new(str); - gtk_misc_set_padding(GTK_MISC(label), 5, 10); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), label); - - dialog_label = gtk_label_new(""); - gtk_misc_set_padding(GTK_MISC(dialog_label), 5, 10); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), dialog_label); - - g_signal_connect(dialog, "key-press-event", - G_CALLBACK(on_keytype_dialog_response), NULL); - g_signal_connect(dialog, "response", G_CALLBACK(on_dialog_response), NULL); - - /* copy name to global variable to hold it, will be freed in on_dialog_response() */ - dialog_key_name = g_strdup(name); - - gtk_widget_show_all(dialog); - g_free(str); - g_free(name); - } - } - return TRUE; - } - return FALSE; -} - - -static GeanyKeyBinding *lookup_kb_from_iter(G_GNUC_UNUSED GtkTreeModel *model, GtkTreeIter *iter) -{ guint group_idx, keybinding_idx; GtkTreeIter parent;
@@ -1245,7 +1248,7 @@ }
-static void on_cell_edited(GtkCellRendererText *cellrenderertext, gchar *path, gchar *new_text, gpointer user_data) +static void kb_cell_edited_cb(GtkCellRendererText *cellrenderertext, gchar *path, gchar *new_text, gpointer user_data) { if (path != NULL && new_text != NULL) { @@ -1260,9 +1263,9 @@
gtk_accelerator_parse(new_text, &lkey, &lmods);
- kb = lookup_kb_from_iter(GTK_TREE_MODEL(store), &iter); + kb = kb_lookup_kb_from_iter(GTK_TREE_MODEL(store), &iter);
- if (find_duplicate(kb, lkey, lmods, new_text)) + if (kb_find_duplicate(kb, lkey, lmods, new_text)) return;
/* set the values here, because of the above check, setting it in @@ -1277,7 +1280,7 @@ }
-static gboolean on_keytype_dialog_response(GtkWidget *dialog, GdkEventKey *event, gpointer user_data) +static gboolean kb_keytype_dialog_response_cb(GtkWidget *dialog, GdkEventKey *event, gpointer user_data) { gchar *str; gint state; @@ -1296,7 +1299,7 @@ }
-static void on_dialog_response(GtkWidget *dialog, gint response, G_GNUC_UNUSED gpointer iter) +static void kb_dialog_response_cb(GtkWidget *dialog, gint response, G_GNUC_UNUSED gpointer iter) { if (response == GTK_RESPONSE_ACCEPT) { @@ -1304,11 +1307,11 @@ GdkModifierType lmods; GeanyKeyBinding *kb;
- kb = lookup_kb_from_iter(GTK_TREE_MODEL(store), &g_iter); + kb = kb_lookup_kb_from_iter(GTK_TREE_MODEL(store), &g_iter);
gtk_accelerator_parse(gtk_label_get_text(GTK_LABEL(dialog_label)), &lkey, &lmods);
- if (find_duplicate(kb, lkey, lmods, gtk_label_get_text(GTK_LABEL(dialog_label)))) + if (kb_find_duplicate(kb, lkey, lmods, gtk_label_get_text(GTK_LABEL(dialog_label)))) return;
/* set the values here, because of the above check, setting it in @@ -1331,7 +1334,7 @@ /* Look for a (1st-level) child of parent whose KB_TREE_INDEX matches i, * setting iter to point to the node if found. * If parent is NULL, look for a parent node whose KB_TREE_INDEX matches i. */ -static gboolean find_child_iter(GtkTreeIter *parent, guint i, GtkTreeIter *iter) +static gboolean kb_find_child_iter(GtkTreeIter *parent, guint i, GtkTreeIter *iter) { GtkTreeModel *model = GTK_TREE_MODEL(store); guint idx; @@ -1351,17 +1354,17 @@ }
-static void clear_tree_shortcut(gsize group_id, gsize keybinding_id) +static void kb_clear_tree_shortcut(gsize group_id, gsize keybinding_id) { GtkTreeIter parent; GtkTreeIter child;
/* find parent kb group */ - if (! find_child_iter(NULL, group_id, &parent)) + if (! kb_find_child_iter(NULL, group_id, &parent)) return;
/* find child kb node*/ - if (! find_child_iter(&parent, keybinding_id, &child)) + if (! kb_find_child_iter(&parent, keybinding_id, &child)) return;
gtk_tree_store_set(store, &child, KB_TREE_SHORTCUT, NULL, -1); /* clear shortcut */ @@ -1369,7 +1372,7 @@
/* test if the entered key combination is already used */ -static gboolean find_duplicate(GeanyKeyBinding *search_kb, +static gboolean kb_find_duplicate(GeanyKeyBinding *search_kb, guint key, GdkModifierType mods, const gchar *action) { gsize g, i; @@ -1399,7 +1402,7 @@ { kb->key = 0; kb->mods = 0; - clear_tree_shortcut(g, i); + kb_clear_tree_shortcut(g, i); continue; } return TRUE;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.