]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
updated for version 7.3.592 v7.3.592
authorBram Moolenaar <Bram@vim.org>
Tue, 10 Jul 2012 11:12:51 +0000 (13:12 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 10 Jul 2012 11:12:51 +0000 (13:12 +0200)
Problem:    Vim on GTK does not support g:browsefilter.
Solution:   Add a GtkFileFilter to the file chooser. (Christian Brabandt)

src/gui_gtk.c
src/version.c

index 5266dd7cef428a9e528d50715458d135c8cad367..c62201e22727d557422ac7527cbbbb1bbec61085 100644 (file)
@@ -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 dialog */
        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);
index 4bfec7865a68465d5ecb66fc2527d0bc9d1ed673..5f615edc40f1a93ae8d59c531a1b992bba4179c5 100644 (file)
@@ -714,6 +714,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    592,
 /**/
     591,
 /**/