SF.net SVN: geany:[5044] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Thu Jun 17 17:28:28 UTC 2010


Revision: 5044
          http://geany.svn.sourceforge.net/geany/?rev=5044&view=rev
Author:   ntrel
Date:     2010-06-17 17:28:28 +0000 (Thu, 17 Jun 2010)

Log Message:
-----------
Remove any duplicate on adding to combo box histories.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/ui_utils.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2010-06-17 14:58:57 UTC (rev 5043)
+++ trunk/ChangeLog	2010-06-17 17:28:28 UTC (rev 5044)
@@ -9,6 +9,8 @@
  * src/ui_utils.c:
    Display 'new instance' on title bar (patch by Eugene Arshinov,
    thanks).
+ * src/ui_utils.c:
+   Remove any duplicate on adding to combo box histories.
 
 
 2010-06-16  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>

Modified: trunk/src/ui_utils.c
===================================================================
--- trunk/src/ui_utils.c	2010-06-17 14:58:57 UTC (rev 5043)
+++ trunk/src/ui_utils.c	2010-06-17 17:28:28 UTC (rev 5044)
@@ -1384,26 +1384,44 @@
 }
 
 
-/* Prepends the active text to the drop down list, unless the first element in
- * the list is identical, ensuring there are <= history_len elements. */
+static gboolean tree_model_find_text(GtkTreeModel *model,
+		GtkTreeIter *iter, gint column, const gchar *text)
+{
+	gchar *combo_text;
+	gboolean found = FALSE;
+
+	if (gtk_tree_model_get_iter_first(model, iter))
+	{
+		do
+		{
+			gtk_tree_model_get(model, iter, 0, &combo_text, -1);
+			found = utils_str_equal(combo_text, text);
+			g_free(combo_text);
+
+			if (found)
+				return TRUE;
+		}
+		while (gtk_tree_model_iter_next(model, iter));
+	}
+	return FALSE;
+}
+
+
+/* Prepends the active text to the drop down list, removing a duplicate element in
+ * the list if found. Ensures there are <= history_len elements. */
 void ui_combo_box_add_to_history(GtkComboBox *combo, const gchar *text)
 {
-	const gint history_len = 30;
+	const gint history_len = 10;
 	GtkTreeModel *model;
 	GtkTreeIter iter;
-	gchar *combo_text;
-	gboolean equal = FALSE;
 	GtkTreePath *path;
 
 	model = gtk_combo_box_get_model(combo);
-	if (gtk_tree_model_get_iter_first(model, &iter))
+
+	if (tree_model_find_text(model, &iter, 0, text))
 	{
-		gtk_tree_model_get(model, &iter, 0, &combo_text, -1);
-		equal = utils_str_equal(combo_text, text);
-		g_free(combo_text);
+		gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
 	}
-	if (equal) return;	/* don't prepend duplicate */
-
 	gtk_combo_box_prepend_text(combo, text);
 
 	/* limit history */
@@ -1422,21 +1440,9 @@
 {
 	GtkTreeModel *model;
 	GtkTreeIter iter;
-	gchar *combo_text;
-	gboolean found = FALSE;
 
 	model = gtk_combo_box_get_model(combo);
-	if (gtk_tree_model_get_iter_first(model, &iter))
-	{
-		do
-		{
-			gtk_tree_model_get(model, &iter, 0, &combo_text, -1);
-			found = utils_str_equal(combo_text, text);
-			g_free(combo_text);
-		}
-		while (!found && gtk_tree_model_iter_next(model, &iter));
-	}
-	if (found)
+	if (!tree_model_find_text(model, &iter, 0, text))
 		return;	/* don't prepend duplicate */
 
 	gtk_combo_box_prepend_text(combo, text);


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