SF.net SVN: geany:[3881] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Sat Jun 20 16:53:12 UTC 2009


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.



More information about the Commits mailing list