SF.net SVN: geany:[5543] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Mon Feb 21 19:09:34 UTC 2011


Revision: 5543
          http://geany.svn.sourceforge.net/geany/?rev=5543&view=rev
Author:   eht16
Date:     2011-02-21 19:09:34 +0000 (Mon, 21 Feb 2011)

Log Message:
-----------
Add support for multiple file filters, separated by semicolon (based on a patch by Grigory Javadyan, thanks).

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/plugins/filebrowser.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2011-02-07 17:23:41 UTC (rev 5542)
+++ trunk/ChangeLog	2011-02-21 19:09:34 UTC (rev 5543)
@@ -1,3 +1,10 @@
+2011-02-21  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
+
+ * plugins/filebrowser.c:
+   Add support for multiple file filters, separated by semicolon
+   (based on a patch by Grigory Javadyan, thanks).
+
+
 2011-02-07  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
 
  * data/filetype_extensions.conf:

Modified: trunk/plugins/filebrowser.c
===================================================================
--- trunk/plugins/filebrowser.c	2011-02-07 17:23:41 UTC (rev 5542)
+++ trunk/plugins/filebrowser.c	2011-02-21 19:09:34 UTC (rev 5543)
@@ -80,7 +80,7 @@
 static gchar *current_dir = NULL; /* in locale-encoding */
 static gchar *open_cmd; /* in locale-encoding */
 static gchar *config_file;
-static gchar *filter = NULL;
+static gchar **filter = NULL;
 
 static gint page_number = 0;
 
@@ -158,14 +158,21 @@
 /* Returns: whether filename should be removed. */
 static gboolean check_filtered(const gchar *base_name)
 {
+	gchar **filter_item;
+	guint len;
+	
 	if (filter == NULL)
 		return FALSE;
-
-	if (! utils_str_equal(base_name, "*") && ! g_pattern_match_simple(filter, base_name))
+	
+	len = g_strv_length(filter);
+	foreach_c_array(filter_item, filter, len)
 	{
-		return TRUE;
+		if (utils_str_equal(base_name, "*") || g_pattern_match_simple(*filter_item, base_name))
+		{
+			return FALSE;
+		}
 	}
-	return FALSE;
+	return TRUE;
 }
 
 
@@ -728,9 +735,19 @@
 }
 
 
+static void clear_filter(void)
+{
+	if (filter != NULL)
+	{
+		g_strfreev(filter);
+		filter = NULL;
+	}
+}
+
+
 static void on_clear_filter(GtkEntry *entry, gpointer user_data)
 {
-	setptr(filter, NULL);
+	clear_filter();
 
 	gtk_entry_set_text(GTK_ENTRY(filter_entry), "");
 
@@ -777,13 +794,11 @@
 
 static void on_filter_activate(GtkEntry *entry, gpointer user_data)
 {
-	setptr(filter, g_strdup(gtk_entry_get_text(entry)));
-
-	if (! NZV(filter))
+	filter = g_strsplit(gtk_entry_get_text(entry), ";", -1);
+	if (filter == NULL || g_strv_length(filter) == 0)
 	{
-		setptr(filter, g_strdup("*"));
+		clear_filter();
 	}
-
 	refresh();
 }
 
@@ -791,8 +806,7 @@
 static void on_filter_clear(GtkEntry *entry, gint icon_pos,
 							GdkEvent *event, gpointer data)
 {
-	setptr(filter, g_strdup("*"));
-
+	clear_filter();
 	refresh();
 }
 
@@ -896,7 +910,7 @@
 		g_signal_connect(filter_entry, "icon-release", G_CALLBACK(on_filter_clear), NULL);
 	}
 	ui_widget_set_tooltip_text(filter_entry,
-		_("Filter your files with usual wildcards"));
+		_("Filter your files with usual wildcards, separate multiple filters with \";\""));
 	g_signal_connect(filter_entry, "activate", G_CALLBACK(on_filter_activate), NULL);
 
 	gtk_box_pack_start(GTK_BOX(filterbar), label, FALSE, FALSE, 0);
@@ -1080,7 +1094,7 @@
 	GtkWidget *scrollwin, *toolbar, *filterbar;
 
 	filter = NULL;
-
+	
 	file_view_vbox = gtk_vbox_new(FALSE, 0);
 	toolbar = make_toolbar();
 	gtk_box_pack_start(GTK_BOX(file_view_vbox), toolbar, FALSE, FALSE, 0);
@@ -1252,7 +1266,7 @@
 
 	g_free(config_file);
 	g_free(open_cmd);
-	g_free(filter);
+	clear_filter();
 	gtk_widget_destroy(file_view_vbox);
 	g_object_unref(G_OBJECT(entry_completion));
 }


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