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