SF.net SVN: geany: [2518] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Tue Apr 22 15:14:31 UTC 2008


Revision: 2518
          http://geany.svn.sourceforge.net/geany/?rev=2518&view=rev
Author:   eht16
Date:     2008-04-22 08:14:30 -0700 (Tue, 22 Apr 2008)

Log Message:
-----------
Add file filter text entry (patch by Robert McGinley, thanks).

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

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2008-04-22 15:04:50 UTC (rev 2517)
+++ trunk/ChangeLog	2008-04-22 15:14:30 UTC (rev 2518)
@@ -9,6 +9,8 @@
    Make use of ngettext() for strings with plural forms.
  * Makefile.am:
    Add target "sign" to sign generated tarballs with gpg.
+ * plugins/filebrowser.c:
+   Add file filter text entry (patch by Robert McGinley, thanks).
 
 
 2008-04-20  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>

Modified: trunk/plugins/filebrowser.c
===================================================================
--- trunk/plugins/filebrowser.c	2008-04-22 15:04:50 UTC (rev 2517)
+++ trunk/plugins/filebrowser.c	2008-04-22 15:14:30 UTC (rev 2518)
@@ -83,10 +83,12 @@
 static GtkTreeIter			*last_dir_iter = NULL;
 static GtkEntryCompletion	*entry_completion = NULL;
 
+static GtkWidget	*filter_entry;
 static GtkWidget	*path_entry;
 static gchar		*current_dir = NULL;	/* in locale-encoding */
 static gchar		*open_cmd;				/* in locale-encoding */
 static gchar		*config_file;
+static gchar 		*filter = NULL;
 
 static struct
 {
@@ -128,6 +130,21 @@
 }
 
 
+/* Returns: whether name has been removed by filter. */
+static gboolean check_filtered(const gchar *base_name)
+{
+	if (filter == NULL)
+		return FALSE;
+
+	if (! p_utils->str_equal(base_name, "*") && ! g_pattern_match_simple(filter, base_name))
+	{
+		return TRUE;
+	}
+
+	return FALSE;
+}
+
+
 /* name is in locale encoding */
 static void add_item(const gchar *name)
 {
@@ -138,6 +155,9 @@
 	if (! show_hidden_files && check_hidden(name))
 		return;
 
+	if (check_filtered(name))
+		return;
+
 	fname = g_strconcat(current_dir, G_DIR_SEPARATOR_S, name, NULL);
 	dir = g_file_test(fname, G_FILE_TEST_IS_DIR);
 	g_free(fname);
@@ -623,6 +643,16 @@
 }
 
 
+static void on_clear_filter(GtkEntry *entry, gpointer user_data)
+{
+	setptr(filter, NULL);
+
+	gtk_entry_set_text(GTK_ENTRY(filter_entry), "");
+
+	refresh();
+}
+
+
 static void on_path_entry_activate(GtkEntry *entry, gpointer user_data)
 {
 	gchar *new_dir = (gchar*) gtk_entry_get_text(entry);
@@ -640,6 +670,20 @@
 		new_dir = g_strdup(g_get_home_dir());
 
 	setptr(current_dir, new_dir);
+
+	on_clear_filter(NULL, NULL);
+}
+
+
+static void on_filter_activate(GtkEntry *entry, gpointer user_data)
+{
+	setptr(filter, g_strdup(gtk_entry_get_text(entry)));
+
+	if (! NZV(filter))
+	{
+		setptr(filter, g_strdup("*"));
+	}
+
 	refresh();
 }
 
@@ -720,10 +764,33 @@
 	g_signal_connect(G_OBJECT(wid), "clicked", G_CALLBACK(on_current_path), NULL);
 	gtk_container_add(GTK_CONTAINER(toolbar), wid);
 
+	wid = (GtkWidget *) gtk_tool_button_new_from_stock(GTK_STOCK_CLEAR);
+	gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(wid), tooltips, _("Clear the filter"), NULL);
+	g_signal_connect(G_OBJECT(wid), "clicked", G_CALLBACK(on_clear_filter), NULL);
+	gtk_container_add(GTK_CONTAINER(toolbar), wid);
+
 	return toolbar;
 }
 
 
+static GtkWidget *make_filterbar(void)
+{
+	GtkWidget *label, *filterbar;
+
+	filterbar = gtk_hbox_new(FALSE, 1);
+
+	label = gtk_label_new(_("Filter:"));
+
+	filter_entry = gtk_entry_new();
+	g_signal_connect(G_OBJECT(filter_entry), "activate", G_CALLBACK(on_filter_activate), NULL);
+
+	gtk_box_pack_start(GTK_BOX(filterbar), label, FALSE, FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(filterbar), filter_entry, TRUE, TRUE, 0);
+
+	return filterbar;
+}
+
+
 static gboolean completion_match_func(GtkEntryCompletion *completion, const gchar *key,
 									  GtkTreeIter *iter, gpointer user_data)
 {
@@ -837,12 +904,17 @@
 
 void init(GeanyData *data)
 {
-	GtkWidget *scrollwin, *toolbar;
+	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);
 
+	filterbar = make_filterbar();
+	gtk_box_pack_start(GTK_BOX(file_view_vbox), filterbar, FALSE, FALSE, 0);
+
 	path_entry = gtk_entry_new();
 	gtk_box_pack_start(GTK_BOX(file_view_vbox), path_entry, FALSE, FALSE, 2);
 	g_signal_connect(G_OBJECT(path_entry), "activate", G_CALLBACK(on_path_entry_activate), NULL);
@@ -961,6 +1033,7 @@
 {
 	g_free(config_file);
 	g_free(open_cmd);
+	g_free(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