Mercurial > vim
changeset 3664:0e06193d4bd7 v7.3.592
updated for version 7.3.592
Problem: Vim on GTK does not support g:browsefilter.
Solution: Add a GtkFileFilter to the file chooser. (Christian Brabandt)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Tue, 10 Jul 2012 13:12:51 +0200 |
parents | 906c91f4fae8 |
children | c1a41a78726d |
files | src/gui_gtk.c src/version.c |
diffstat | 2 files changed, 44 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/gui_gtk.c +++ b/src/gui_gtk.c @@ -840,7 +840,7 @@ gui_mch_browse(int saving UNUSED, char_u *dflt, char_u *ext UNUSED, char_u *initdir, - char_u *filter UNUSED) + char_u *filter) { #ifdef USE_FILE_CHOOSER GtkWidget *fc; @@ -848,6 +848,7 @@ gui_mch_browse(int saving UNUSED, char_u dirbuf[MAXPATHL]; guint log_handler; const gchar *domain = "Gtk"; + GtkFileFilter *gfilter; title = CONVERT_TO_UTF8(title); @@ -879,6 +880,45 @@ gui_mch_browse(int saving UNUSED, NULL); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(fc), (const gchar *)dirbuf); + + if (filter != NULL && *filter != NUL) + { + int i = 0; + char_u *patt; + char_u *p = filter; + + gfilter = gtk_file_filter_new(); + patt = alloc(STRLEN(filter)); + while (p != NULL && *p != NUL) + { + if (*p == '\n' || *p == ';' || *p == '\t') + { + STRNCPY(patt, filter, i); + patt[i] = '\0'; + if (*p == '\t') + gtk_file_filter_set_name(gfilter, (gchar *)patt); + else + { + gtk_file_filter_add_pattern(gfilter, (gchar *)patt); + if (*p == '\n') + { + gtk_file_chooser_add_filter((GtkFileChooser *)fc, + gfilter); + if (*(p + 1) != NUL) + gfilter = gtk_file_filter_new(); + } + } + filter = ++p; + i = 0; + } + else + { + p++; + i++; + } + } + vim_free(patt); + } if (saving && dflt != NULL && *dflt != NUL) gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), (char *)dflt); @@ -1304,7 +1344,7 @@ gui_mch_dialog(int type, /* type of gtk_widget_show(entry); /* Make Enter work like pressing OK. */ - gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE); + gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE); text = CONVERT_TO_UTF8(textfield); gtk_entry_set_text(GTK_ENTRY(entry), (const char *)text);