[geany/geany] 8f9f9c: Simplify and cleanup encoding menu building

Colomban Wendling git-noreply at xxxxx
Fri Nov 27 22:05:17 UTC 2015


Branch:      refs/heads/master
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Colomban Wendling <ban at herbesfolles.org>
Date:        Fri, 27 Nov 2015 22:05:17 UTC
Commit:      8f9f9c5cf363e4b14a72211755b6e01c7bd6862d
             https://github.com/geany/geany/commit/8f9f9c5cf363e4b14a72211755b6e01c7bd6862d

Log Message:
-----------
Simplify and cleanup encoding menu building

Rewrite a part of `encodings_init()` to remove duplication and some
hard-coded values.

This gives us the item for UHC back, that was lost when adding CP932 in
9d9f40cd15ad121ff3e3fffd40073706c297f2dd, due to a missing update of
the hard-coded group elements count.


Modified Paths:
--------------
    src/encodings.c

Modified: src/encodings.c
98 lines changed, 38 insertions(+), 60 deletions(-)
===================================================================
@@ -404,14 +404,19 @@ void encodings_finalize(void)
 
 void encodings_init(void)
 {
-	GtkWidget *item, *menu[2], *submenu, *menu_westeuro, *menu_easteuro, *menu_eastasian, *menu_asian,
-			  *menu_utf8, *menu_middleeast, *item_westeuro, *item_easteuro, *item_eastasian,
-			  *item_asian, *item_utf8, *item_middleeast;
+	GtkWidget *menu[2];
 	GCallback cb_func[2];
-	GSList *group = NULL;
-	gchar *label;
-	gint order, group_size;
-	guint i, j, k;
+	gint group_sizes[GEANY_ENCODING_GROUPS_MAX] = { 0 };
+	const gchar *const groups[GEANY_ENCODING_GROUPS_MAX] =
+	{
+		[NONE]			= NULL,
+		[WESTEUROPEAN]	= N_("_West European"),
+		[EASTEUROPEAN]	= N_("_East European"),
+		[EASTASIAN]		= N_("East _Asian"),
+		[ASIAN]			= N_("_SE & SW Asian"),
+		[MIDDLEEASTERN]	= N_("_Middle Eastern"),
+		[UNICODE]		= N_("_Unicode"),
+	};
 
 	init_encodings();
 
@@ -428,67 +433,41 @@ void encodings_init(void)
 	cb_func[0] = G_CALLBACK(encodings_radio_item_change_cb);
 	cb_func[1] = G_CALLBACK(encodings_reload_radio_item_change_cb);
 
-	for (k = 0; k < 2; k++)
+	for (guint i = 0; i < G_N_ELEMENTS(encodings); i++)
+		group_sizes[encodings[i].group]++;
+
+	for (guint k = 0; k < 2; k++)
 	{
-		menu_westeuro = gtk_menu_new();
-		item_westeuro = gtk_menu_item_new_with_mnemonic(_("_West European"));
-		gtk_menu_item_set_submenu(GTK_MENU_ITEM(item_westeuro), menu_westeuro);
-		gtk_container_add(GTK_CONTAINER(menu[k]), item_westeuro);
-		gtk_widget_show_all(item_westeuro);
-
-		menu_easteuro = gtk_menu_new();
-		item_easteuro = gtk_menu_item_new_with_mnemonic(_("_East European"));
-		gtk_menu_item_set_submenu(GTK_MENU_ITEM(item_easteuro), menu_easteuro);
-		gtk_container_add(GTK_CONTAINER(menu[k]), item_easteuro);
-		gtk_widget_show_all(item_easteuro);
-
-		menu_eastasian = gtk_menu_new();
-		item_eastasian = gtk_menu_item_new_with_mnemonic(_("East _Asian"));
-		gtk_menu_item_set_submenu(GTK_MENU_ITEM(item_eastasian), menu_eastasian);
-		gtk_container_add(GTK_CONTAINER(menu[k]), item_eastasian);
-		gtk_widget_show_all(item_eastasian);
-
-		menu_asian = gtk_menu_new();
-		item_asian = gtk_menu_item_new_with_mnemonic(_("_SE & SW Asian"));
-		gtk_menu_item_set_submenu(GTK_MENU_ITEM(item_asian), menu_asian);
-		gtk_container_add(GTK_CONTAINER(menu[k]), item_asian);
-		gtk_widget_show_all(item_asian);
-
-		menu_middleeast = gtk_menu_new();
-		item_middleeast = gtk_menu_item_new_with_mnemonic(_("_Middle Eastern"));
-		gtk_menu_item_set_submenu(GTK_MENU_ITEM(item_middleeast), menu_middleeast);
-		gtk_container_add(GTK_CONTAINER(menu[k]), item_middleeast);
-		gtk_widget_show_all(item_middleeast);
-
-		menu_utf8 = gtk_menu_new();
-		item_utf8 = gtk_menu_item_new_with_mnemonic(_("_Unicode"));
-		gtk_menu_item_set_submenu(GTK_MENU_ITEM(item_utf8), menu_utf8);
-		gtk_container_add(GTK_CONTAINER(menu[k]), item_utf8);
-		gtk_widget_show_all(item_utf8);
+		GSList *group = NULL;
+		GtkWidget *submenus[GEANY_ENCODING_GROUPS_MAX];
 
-		/** TODO can it be optimized? ATM 3782 runs at line "if (encodings[j].group ...)" */
-		for (i = 0; i < GEANY_ENCODING_GROUPS_MAX; i++)
+		for (guint i = 0; i < GEANY_ENCODING_GROUPS_MAX; i++)
 		{
-			order = 0;
-			switch (i)
+			if (! groups[i]) /* NONE */
+				submenus[i] = menu[k];
+			else
 			{
-				case WESTEUROPEAN: submenu = menu_westeuro; group_size = 9; break;
-				case EASTEUROPEAN: submenu = menu_easteuro; group_size = 14; break;
-				case EASTASIAN: submenu = menu_eastasian; group_size = 14; break;
-				case ASIAN: submenu = menu_asian; group_size = 9; break;
-				case MIDDLEEASTERN: submenu = menu_middleeast; group_size = 7; break;
-				case UNICODE: submenu = menu_utf8; group_size = 8; break;
-				default: submenu = menu[k]; group_size = 1;
+				GtkWidget *item = gtk_menu_item_new_with_mnemonic(_(groups[i]));
+				submenus[i] = gtk_menu_new();
+				gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenus[i]);
+				gtk_container_add(GTK_CONTAINER(menu[k]), item);
+				gtk_widget_show_all(item);
 			}
+		}
 
-			while (order < group_size)	/* the biggest group has 13 elements */
+		/** TODO can it be optimized? ATM 3782 runs at line "if (encodings[j].group ...)" */
+		for (guint i = 0; i < GEANY_ENCODING_GROUPS_MAX; i++)
+		{
+			for (gint order = 0; order < group_sizes[i]; order++)
 			{
-				for (j = 0; j < GEANY_ENCODINGS_MAX; j++)
+				for (guint j = 0; j < GEANY_ENCODINGS_MAX; j++)
 				{
 					if (encodings[j].group == i && encodings[j].order == order)
 					{
-						label = encodings_to_string(&encodings[j]);
-						if (k == 0)
+						GtkWidget *item;
+						gchar *label = encodings_to_string(&encodings[j]);
+
+						if (k == 0) /* Set Encoding menu */
 						{
 							item = gtk_radio_menu_item_new_with_label(group, label);
 							group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(item));
@@ -497,14 +476,13 @@ void encodings_init(void)
 						else
 							item = gtk_menu_item_new_with_label(label);
 						gtk_widget_show(item);
-						gtk_container_add(GTK_CONTAINER(submenu), item);
+						gtk_container_add(GTK_CONTAINER(submenus[i]), item);
 						g_signal_connect(item, "activate", cb_func[k],
 								(gpointer) encodings[j].charset);
 						g_free(label);
 						break;
 					}
 				}
-				order++;
 			}
 		}
 	}



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list