[gedit] open-document-selector : use a substring filter.
- From: Sebastien Lafargue <slafargue src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit] open-document-selector : use a substring filter.
- Date: Sun, 20 Jul 2014 15:28:56 +0000 (UTC)
commit 27efa5353c3bcb2bee2d9af222b36c282ddb412d
Author: Sebastien Lafargue <slafargue gnome org>
Date: Sun Jul 20 17:16:58 2014 +0200
open-document-selector : use a substring filter.
gedit/gedit-open-document-selector.c | 63 ++++++++++++++++++---------------
1 files changed, 34 insertions(+), 29 deletions(-)
---
diff --git a/gedit/gedit-open-document-selector.c b/gedit/gedit-open-document-selector.c
index 510f66f..4535b37 100644
--- a/gedit/gedit-open-document-selector.c
+++ b/gedit/gedit-open-document-selector.c
@@ -47,6 +47,7 @@ struct _GeditOpenDocumentSelectorPrivate
GtkRecentFilter *current_filter;
GtkRecentFilter *gedit_app_filter;
+ gchar *substring_filter;
guint populate_listbox_id;
gulong recent_manager_changed_id;
@@ -96,27 +97,6 @@ G_DEFINE_TYPE_WITH_CODE (GeditOpenDocumentSelector,
G_IMPLEMENT_INTERFACE (GTK_TYPE_RECENT_CHOOSER,
gtk_recent_chooser_iface_init))
-static void
-on_entry_changed (GtkEntry *entry,
- GeditOpenDocumentSelector *open_document_selector)
-{
- GtkRecentFilter *filter;
- gchar *pattern;
-
- pattern = g_strdup (gtk_entry_get_text (entry));
-
- if (*pattern == '\0')
- {
- g_free (pattern);
- pattern = g_strdup ("*");
- }
-
- filter = gtk_recent_filter_new ();
- gtk_recent_filter_add_pattern (filter, pattern);
-
- gtk_recent_chooser_set_filter (GTK_RECENT_CHOOSER (open_document_selector), filter);
-}
-
static GtkWidget *
create_row (GeditOpenDocumentSelector *open_document_selector,
GtkRecentInfo *info)
@@ -240,6 +220,21 @@ populate_listbox (GeditOpenDocumentSelector *open_document_selector)
NULL);
}
+static void
+on_entry_changed (GtkEntry *entry,
+ GeditOpenDocumentSelector *open_document_selector)
+{
+ GeditOpenDocumentSelectorPrivate *priv = open_document_selector->priv;
+ const gchar *entry_text;
+
+ entry_text = gtk_entry_get_text (entry);
+
+ g_free (priv->substring_filter);
+ priv->substring_filter = g_utf8_strdown (entry_text, -1);
+
+ populate_listbox (open_document_selector);
+}
+
static GtkRecentManager *
gedit_open_document_selector_get_recent_manager (GtkRecentChooser *chooser)
{
@@ -404,27 +399,33 @@ gedit_open_document_selector_get_items (GtkRecentChooser *chooser)
GtkRecentInfo *info = l->data;
gboolean remove_item = FALSE;
- if (priv->current_filter && get_is_recent_filtered (priv->current_filter, info))
+ if (*priv->substring_filter != '\0')
{
- remove_item = TRUE;
+ gchar *uri_lower;
+
+ uri_lower = g_utf8_strdown (gtk_recent_info_get_uri (info), -1);
+
+ if (g_strrstr (uri_lower, priv->substring_filter) == NULL)
+ {
+ remove_item = TRUE;
+ }
+
+ g_free (uri_lower);
}
if (get_is_recent_filtered (priv->gedit_app_filter, info))
{
remove_item = TRUE;
}
-
- if (local_only && !gtk_recent_info_is_local (info))
+ else if (local_only && !gtk_recent_info_is_local (info))
{
remove_item = TRUE;
}
-
- if (!show_private && gtk_recent_info_get_private_hint (info))
+ else if (!show_private && gtk_recent_info_get_private_hint (info))
{
remove_item = TRUE;
}
-
- if (!show_not_found && !gtk_recent_info_exists (info))
+ else if (!show_not_found && !gtk_recent_info_exists (info))
{
remove_item = TRUE;
}
@@ -663,6 +664,8 @@ gedit_open_document_selector_dispose (GObject *object)
priv->sort_data_destroy = NULL;
}
+ g_free (priv->substring_filter);
+
priv->sort_data = NULL;
priv->sort_func = NULL;
@@ -930,6 +933,8 @@ gedit_open_document_selector_init (GeditOpenDocumentSelector *open_document_sele
priv->sort_func = NULL;
priv->sort_data = NULL;
+ priv->substring_filter = g_strdup ("\0");
+
/* Setting gedit application filter */
priv->gedit_app_filter = gtk_recent_filter_new ();
gtk_recent_filter_add_application (priv->gedit_app_filter, "gedit");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]