SF.net SVN: geany:[5660] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Thu Mar 31 15:01:24 UTC 2011


Revision: 5660
          http://geany.svn.sourceforge.net/geany/?rev=5660&view=rev
Author:   ntrel
Date:     2011-03-31 15:01:24 +0000 (Thu, 31 Mar 2011)

Log Message:
-----------
Make 'Hide object files' preference configurable with file
extensions.

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

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2011-03-30 16:18:47 UTC (rev 5659)
+++ trunk/ChangeLog	2011-03-31 15:01:24 UTC (rev 5660)
@@ -1,3 +1,10 @@
+2011-03-31  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
+
+ * plugins/filebrowser.c:
+   Make 'Hide object files' preference configurable with file
+   extensions.
+
+
 2011-03-30  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
 
  * src/editor.c:

Modified: trunk/plugins/filebrowser.c
===================================================================
--- trunk/plugins/filebrowser.c	2011-03-30 16:18:47 UTC (rev 5659)
+++ trunk/plugins/filebrowser.c	2011-03-31 15:01:24 UTC (rev 5660)
@@ -82,6 +82,7 @@
 static gchar *open_cmd; /* in locale-encoding */
 static gchar *config_file;
 static gchar **filter = NULL;
+static gchar *hidden_file_extensions = NULL;
 
 static gint page_number = 0;
 
@@ -121,6 +122,7 @@
 /* Returns: whether name should be hidden. */
 static gboolean check_hidden(const gchar *filename, const gchar *base_name)
 {
+	gboolean ret = FALSE;
 	gsize len;
 
 	if (G_UNLIKELY(! NZV(base_name)))
@@ -140,19 +142,20 @@
 
 	if (hide_object_files)
 	{
-		const gchar *exts[] = {".o", ".obj", ".so", ".dll", ".a", ".lib", ".pyc"};
-		guint i, exts_len;
+		gchar **ptr;
+		gchar **exts = g_strsplit(hidden_file_extensions, " ", -1);
 
-		exts_len = G_N_ELEMENTS(exts);
-		for (i = 0; i < exts_len; i++)
+		foreach_strv(ptr, exts)
 		{
-			const gchar *ext = exts[i];
-
-			if (g_str_has_suffix(base_name, ext))
-				return TRUE;
+			if (g_str_has_suffix(base_name, *ptr))
+			{
+				ret = TRUE;
+				break;
+			}
 		}
+		g_strfreev(exts);
 	}
-	return FALSE;
+	return ret;
 }
 
 
@@ -1001,6 +1004,8 @@
 	open_cmd = utils_get_setting_string(config, "filebrowser", "open_command", "nautilus \"%d\"");
 	show_hidden_files = g_key_file_get_boolean(config, "filebrowser", "show_hidden_files", NULL);
 	hide_object_files = g_key_file_get_boolean(config, "filebrowser", "hide_object_files", NULL);
+	hidden_file_extensions = utils_get_setting_string(config, "filebrowser", "hidden_file_extensions",
+		".o .obj .so .dll .a .lib .pyc");
 	fb_follow_path = g_key_file_get_boolean(config, "filebrowser", "fb_follow_path", NULL);
 	fb_set_project_base_path = g_key_file_get_boolean(config, "filebrowser", "fb_set_project_base_path", NULL);
 
@@ -1136,6 +1141,7 @@
 	g_key_file_set_string(config, "filebrowser", "open_command", open_cmd);
 	g_key_file_set_boolean(config, "filebrowser", "show_hidden_files", show_hidden_files);
 	g_key_file_set_boolean(config, "filebrowser", "hide_object_files", hide_object_files);
+	g_key_file_set_string(config, "filebrowser", "hidden_file_extensions", hidden_file_extensions);
 	g_key_file_set_boolean(config, "filebrowser", "fb_follow_path", fb_follow_path);
 	g_key_file_set_boolean(config, "filebrowser", "fb_set_project_base_path",
 		fb_set_project_base_path);
@@ -1162,6 +1168,7 @@
 	GtkWidget *open_cmd_entry;
 	GtkWidget *show_hidden_checkbox;
 	GtkWidget *hide_objects_checkbox;
+	GtkWidget *hidden_files_entry;
 	GtkWidget *follow_path_checkbox;
 	GtkWidget *set_project_base_path_checkbox;
 }
@@ -1176,6 +1183,8 @@
 		open_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(pref_widgets.open_cmd_entry)));
 		show_hidden_files = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pref_widgets.show_hidden_checkbox));
 		hide_object_files = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pref_widgets.hide_objects_checkbox));
+		g_free(hidden_file_extensions);
+		hidden_file_extensions = g_strdup(gtk_entry_get_text(GTK_ENTRY(pref_widgets.hidden_files_entry)));
 		fb_follow_path = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pref_widgets.follow_path_checkbox));
 		fb_set_project_base_path = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(
 			pref_widgets.set_project_base_path_checkbox));
@@ -1186,10 +1195,21 @@
 }
 
 
+static void on_toggle_hidden(void)
+{
+	gboolean enabled = !gtk_toggle_button_get_active(
+		GTK_TOGGLE_BUTTON(pref_widgets.show_hidden_checkbox));
+
+	gtk_widget_set_sensitive(pref_widgets.hide_objects_checkbox, enabled);
+	enabled &= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pref_widgets.hide_objects_checkbox));
+	gtk_widget_set_sensitive(pref_widgets.hidden_files_entry, enabled);
+}
+
+
 GtkWidget *plugin_configure(GtkDialog *dialog)
 {
 	GtkWidget *label, *entry, *checkbox_of, *checkbox_hf, *checkbox_fp, *checkbox_pb, *vbox;
-	GtkWidget *box;
+	GtkWidget *box, *align;
 
 	vbox = gtk_vbox_new(FALSE, 6);
 	box = gtk_vbox_new(FALSE, 3);
@@ -1199,7 +1219,6 @@
 	gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);
 
 	entry = gtk_entry_new();
-	gtk_widget_show(entry);
 	if (open_cmd != NULL)
 		gtk_entry_set_text(GTK_ENTRY(entry), open_cmd);
 	ui_widget_set_tooltip_text(entry,
@@ -1209,23 +1228,35 @@
 	gtk_box_pack_start(GTK_BOX(box), entry, FALSE, FALSE, 0);
 	pref_widgets.open_cmd_entry = entry;
 
-	gtk_box_pack_start(GTK_BOX(vbox), box, FALSE, FALSE, 6);
+	gtk_box_pack_start(GTK_BOX(vbox), box, FALSE, FALSE, 3);
 
 	checkbox_hf = gtk_check_button_new_with_label(_("Show hidden files"));
 	gtk_button_set_focus_on_click(GTK_BUTTON(checkbox_hf), FALSE);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbox_hf), show_hidden_files);
 	gtk_box_pack_start(GTK_BOX(vbox), checkbox_hf, FALSE, FALSE, 0);
 	pref_widgets.show_hidden_checkbox = checkbox_hf;
+	g_signal_connect(checkbox_hf, "toggled", on_toggle_hidden, NULL);
 
-	checkbox_of = gtk_check_button_new_with_label(_("Hide object files"));
+	box = gtk_vbox_new(FALSE, 3);
+	checkbox_of = gtk_check_button_new_with_label(_("Hide file extensions:"));
 	gtk_button_set_focus_on_click(GTK_BUTTON(checkbox_of), FALSE);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbox_of), hide_object_files);
-	ui_widget_set_tooltip_text(checkbox_of,
-		_("Don't show generated object files in the file browser, this includes "
-		  "*.o, *.obj. *.so, *.dll, *.a, *.lib"));
-	gtk_box_pack_start(GTK_BOX(vbox), checkbox_of, FALSE, FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(box), checkbox_of, FALSE, FALSE, 0);
 	pref_widgets.hide_objects_checkbox = checkbox_of;
+	g_signal_connect(checkbox_of, "toggled", on_toggle_hidden, NULL);
 
+	entry = gtk_entry_new();
+	if (hidden_file_extensions != NULL)
+		gtk_entry_set_text(GTK_ENTRY(entry), hidden_file_extensions);
+	gtk_box_pack_start(GTK_BOX(box), entry, FALSE, FALSE, 0);
+	pref_widgets.hidden_files_entry = entry;
+
+	align = gtk_alignment_new(1, 0.5, 1, 1);
+	gtk_alignment_set_padding(GTK_ALIGNMENT(align), 0, 0, 12, 0);
+	gtk_container_add(GTK_CONTAINER(align), box);
+	gtk_box_pack_start(GTK_BOX(vbox), align, FALSE, FALSE, 0);
+	on_toggle_hidden();
+
 	checkbox_fp = gtk_check_button_new_with_label(_("Follow the path of the current file"));
 	gtk_button_set_focus_on_click(GTK_BUTTON(checkbox_fp), FALSE);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbox_fp), fb_follow_path);
@@ -1253,6 +1284,7 @@
 
 	g_free(config_file);
 	g_free(open_cmd);
+	g_free(hidden_file_extensions);
 	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