[gedit] Bug 697428 - Add binary-patterns setting to the file browser
- From: Garrett Regier <gregier src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit] Bug 697428 - Add binary-patterns setting to the file browser
- Date: Sun, 16 Jun 2013 12:44:19 +0000 (UTC)
commit 6db05b6ec7be94302ec839456db71f238a65925c
Author: Garrett Regier <garrettregier gmail com>
Date: Sun Jun 16 04:48:27 2013 -0700
Bug 697428 - Add binary-patterns setting to the file browser
This is a list of extra glob patterns to consider as binary files.
plugins/filebrowser/gedit-file-browser-plugin.c | 11 ++-
plugins/filebrowser/gedit-file-browser-store.c | 108 ++++++++++++++++++-
plugins/filebrowser/gedit-file-browser-store.h | 8 ++-
...ome.gedit.plugins.filebrowser.gschema.xml.in.in | 5 +
4 files changed, 123 insertions(+), 9 deletions(-)
---
diff --git a/plugins/filebrowser/gedit-file-browser-plugin.c b/plugins/filebrowser/gedit-file-browser-plugin.c
index e779c73..8220c26 100644
--- a/plugins/filebrowser/gedit-file-browser-plugin.c
+++ b/plugins/filebrowser/gedit-file-browser-plugin.c
@@ -48,6 +48,7 @@
#define FILEBROWSER_OPEN_AT_FIRST_DOC "open-at-first-doc"
#define FILEBROWSER_FILTER_MODE "filter-mode"
#define FILEBROWSER_FILTER_PATTERN "filter-pattern"
+#define FILEBROWSER_BINARY_PATTERNS "binary-patterns"
#define NAUTILUS_BASE_SETTINGS "org.gnome.nautilus.preferences"
#define NAUTILUS_FALLBACK_SETTINGS "org.gnome.gedit.plugins.filebrowser.nautilus"
@@ -562,9 +563,15 @@ gedit_file_browser_plugin_activate (GeditWindowActivatable *activatable)
store = gedit_file_browser_widget_get_browser_store (priv->tree_widget);
g_settings_bind (priv->settings,
- "filter-mode",
+ FILEBROWSER_FILTER_MODE,
store,
- "filter-mode",
+ FILEBROWSER_FILTER_MODE,
+ G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
+
+ g_settings_bind (priv->settings,
+ FILEBROWSER_BINARY_PATTERNS,
+ store,
+ FILEBROWSER_BINARY_PATTERNS,
G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
g_signal_connect (store,
diff --git a/plugins/filebrowser/gedit-file-browser-store.c b/plugins/filebrowser/gedit-file-browser-store.c
index f845b5f..0b6fc8b 100644
--- a/plugins/filebrowser/gedit-file-browser-store.c
+++ b/plugins/filebrowser/gedit-file-browser-store.c
@@ -122,6 +122,9 @@ struct _GeditFileBrowserStorePrivate
GeditFileBrowserStoreFilterFunc filter_func;
gpointer filter_user_data;
+ gchar **binary_patterns;
+ GPtrArray *binary_pattern_specs;
+
SortFunc sort_func;
GSList *async_handles;
@@ -212,7 +215,8 @@ enum {
PROP_ROOT,
PROP_VIRTUAL_ROOT,
- PROP_FILTER_MODE
+ PROP_FILTER_MODE,
+ PROP_BINARY_PATTERNS
};
/* Signals */
@@ -251,6 +255,12 @@ gedit_file_browser_store_finalize (GObject *object)
/* Free all the nodes */
file_browser_node_free (obj, obj->priv->root);
+ if (obj->priv->binary_patterns != NULL)
+ {
+ g_strfreev (obj->priv->binary_patterns);
+ g_ptr_array_unref (obj->priv->binary_pattern_specs);
+ }
+
/* Cancel any asynchronous operations */
for (item = obj->priv->async_handles; item; item = item->next)
{
@@ -299,6 +309,9 @@ gedit_file_browser_store_get_property (GObject *object,
case PROP_FILTER_MODE:
g_value_set_flags (value, obj->priv->filter_mode);
break;
+ case PROP_BINARY_PATTERNS:
+ g_value_set_boxed (value, obj->priv->binary_patterns);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -322,6 +335,10 @@ gedit_file_browser_store_set_property (GObject *object,
gedit_file_browser_store_set_filter_mode (obj,
g_value_get_flags (value));
break;
+ case PROP_BINARY_PATTERNS:
+ gedit_file_browser_store_set_binary_patterns (obj,
+ g_value_get_boxed (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -354,11 +371,18 @@ gedit_file_browser_store_class_init (GeditFileBrowserStoreClass *klass)
g_object_class_install_property (object_class, PROP_FILTER_MODE,
g_param_spec_flags ("filter-mode",
- "Filter Mode",
- "The filter mode",
- GEDIT_TYPE_FILE_BROWSER_STORE_FILTER_MODE,
-
gedit_file_browser_store_filter_mode_get_default (),
- G_PARAM_READWRITE));
+ "Filter Mode",
+ "The filter mode",
+ GEDIT_TYPE_FILE_BROWSER_STORE_FILTER_MODE,
+ gedit_file_browser_store_filter_mode_get_default
(),
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class, PROP_BINARY_PATTERNS,
+ g_param_spec_boxed ("binary-patterns",
+ "Binary Patterns",
+ "The binary patterns",
+ G_TYPE_STRV,
+ G_PARAM_READWRITE));
model_signals[BEGIN_LOADING] =
g_signal_new ("begin-loading",
@@ -1037,6 +1061,32 @@ model_node_update_visibility (GeditFileBrowserStore *model,
{
node->flags |= GEDIT_FILE_BROWSER_STORE_FLAG_IS_FILTERED;
}
+ else if (FILTER_BINARY (model->priv->filter_mode) &&
+ model->priv->binary_patterns != NULL)
+ {
+ gint i;
+ gssize name_length;
+ gchar *name_reversed;
+
+ name_length = strlen (node->name);
+ name_reversed = g_utf8_strreverse (node->name, name_length);
+
+ for (i = 0; i < model->priv->binary_pattern_specs->len; ++i)
+ {
+ GPatternSpec *spec;
+
+ spec = g_ptr_array_index (model->priv->binary_pattern_specs, i);
+
+ if (g_pattern_match (spec, name_length,
+ node->name, name_reversed))
+ {
+ node->flags |= GEDIT_FILE_BROWSER_STORE_FLAG_IS_FILTERED;
+ break;
+ }
+ }
+
+ g_free (name_reversed);
+ }
else if (model->priv->filter_func)
{
iter.user_data = node;
@@ -3339,6 +3389,52 @@ gedit_file_browser_store_set_filter_func (GeditFileBrowserStore *model
model_refilter (model);
}
+const gchar * const *
+gedit_file_browser_store_get_binary_patterns (GeditFileBrowserStore *model)
+{
+ return (const gchar * const *) model->priv->binary_patterns;
+}
+
+void
+gedit_file_browser_store_set_binary_patterns (GeditFileBrowserStore *model,
+ const gchar **binary_patterns)
+{
+ g_return_if_fail (GEDIT_IS_FILE_BROWSER_STORE (model));
+
+ if (model->priv->binary_patterns != NULL)
+ {
+ g_strfreev (model->priv->binary_patterns);
+ g_ptr_array_unref (model->priv->binary_pattern_specs);
+ }
+
+ model->priv->binary_patterns = g_strdupv ((gchar **) binary_patterns);
+
+ if (binary_patterns == NULL)
+ {
+ model->priv->binary_pattern_specs = NULL;
+ }
+ else
+ {
+ gint i;
+
+ model->priv->binary_pattern_specs = g_ptr_array_new ();
+ g_ptr_array_set_size (model->priv->binary_pattern_specs,
+ g_strv_length ((gchar **) binary_patterns));
+ g_ptr_array_set_free_func (model->priv->binary_pattern_specs,
+ (GDestroyNotify) g_pattern_spec_free);
+
+ for (i = 0; binary_patterns[i] != NULL; ++i)
+ {
+ g_ptr_array_add (model->priv->binary_pattern_specs,
+ g_pattern_spec_new (binary_patterns[i]));
+ }
+ }
+
+ model_refilter (model);
+
+ g_object_notify (G_OBJECT (model), "binary-patterns");
+}
+
void
gedit_file_browser_store_refilter (GeditFileBrowserStore *model)
{
diff --git a/plugins/filebrowser/gedit-file-browser-store.h b/plugins/filebrowser/gedit-file-browser-store.h
index d72aeef..e460b34 100644
--- a/plugins/filebrowser/gedit-file-browser-store.h
+++ b/plugins/filebrowser/gedit-file-browser-store.h
@@ -152,7 +152,7 @@ void gedit_file_browser_store_set_value
(GeditFileBrowserStore *tr
gint column,
GValue *value);
-void _gedit_file_browser_store_iter_expanded (GeditFileBrowserStore
*model,
+void _gedit_file_browser_store_iter_expanded (GeditFileBrowserStore *model,
GtkTreeIter *iter);
void _gedit_file_browser_store_iter_collapsed (GeditFileBrowserStore *model,
GtkTreeIter *iter);
@@ -164,6 +164,12 @@ void gedit_file_browser_store_set_filter_mode (GeditFileBrowserStore
void gedit_file_browser_store_set_filter_func (GeditFileBrowserStore *model,
GeditFileBrowserStoreFilterFunc func,
gpointer user_data);
+
+const gchar * const *
+ gedit_file_browser_store_get_binary_patterns (GeditFileBrowserStore *model);
+void gedit_file_browser_store_set_binary_patterns (GeditFileBrowserStore *model,
+ const gchar
**binary_patterns);
+
void gedit_file_browser_store_refilter (GeditFileBrowserStore *model);
GeditFileBrowserStoreFilterMode
gedit_file_browser_store_filter_mode_get_default (void);
diff --git a/plugins/filebrowser/org.gnome.gedit.plugins.filebrowser.gschema.xml.in.in
b/plugins/filebrowser/org.gnome.gedit.plugins.filebrowser.gschema.xml.in.in
index e79a6b9..63da5aa 100644
--- a/plugins/filebrowser/org.gnome.gedit.plugins.filebrowser.gschema.xml.in.in
+++ b/plugins/filebrowser/org.gnome.gedit.plugins.filebrowser.gschema.xml.in.in
@@ -35,6 +35,11 @@
<_summary>File Browser Filter Pattern</_summary>
<_description>The filter pattern to filter the file browser with. This filter works on top of the
filter_mode.</_description>
</key>
+ <key name="binary-patterns" type="as">
+ <default>['*.la', '*.lo']</default>
+ <_summary>File Browser Binary Patterns</_summary>
+ <_description>The supplemental patterns to use when when filtering binary files.</_description>
+ </key>
</schema>
<enum id="org.gnome.gedit.plugins.filebrowser.nautilus.ClickPolicy">
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]