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.