changeset 22200:ef7f63b97855 v8.2.1649

patch 8.2.1649: GTK3: using old file chooser Commit: https://github.com/vim/vim/commit/3e4cc9671c5551b73f0176cab40e676ed72a1716 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Sep 9 20:58:55 2020 +0200 patch 8.2.1649: GTK3: using old file chooser Problem: GTK3: using old file chooser. Solution: Use native file chooser on GTK 3.20 and above. (Yogeshwar Velingker, closes #6909)
author Bram Moolenaar <Bram@vim.org>
date Wed, 09 Sep 2020 21:00:05 +0200
parents df8b6f1ca6cf
children 11ef4208bffe
files src/gui_gtk.c src/version.c
diffstat 2 files changed, 29 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/gui_gtk.c
+++ b/src/gui_gtk.c
@@ -1199,7 +1199,11 @@ gui_mch_browse(int saving UNUSED,
 	       char_u *filter)
 {
 #ifdef USE_FILE_CHOOSER
-    GtkWidget		*fc;
+# if GTK_CHECK_VERSION(3,20,0)
+    GtkFileChooserNative	*fc;
+# else
+    GtkWidget			*fc;
+# endif
 #endif
     char_u		dirbuf[MAXPATHL];
     guint		log_handler;
@@ -1226,18 +1230,27 @@ gui_mch_browse(int saving UNUSED,
 #ifdef USE_FILE_CHOOSER
     // We create the dialog each time, so that the button text can be "Open"
     // or "Save" according to the action.
-    fc = gtk_file_chooser_dialog_new((const gchar *)title,
+# if GTK_CHECK_VERSION(3,20,0)
+    fc = gtk_file_chooser_native_new(
+# else
+    fc = gtk_file_chooser_dialog_new(
+# endif
+	    (const gchar *)title,
 	    GTK_WINDOW(gui.mainwin),
 	    saving ? GTK_FILE_CHOOSER_ACTION_SAVE
 					   : GTK_FILE_CHOOSER_ACTION_OPEN,
-# if GTK_CHECK_VERSION(3,10,0)
+# if GTK_CHECK_VERSION(3,20,0)
+	    saving ? _("_Save") : _("_Open"), _("_Cancel"));
+# else
+#  if GTK_CHECK_VERSION(3,10,0)
 	    _("_Cancel"), GTK_RESPONSE_CANCEL,
 	    saving ? _("_Save") : _("_Open"), GTK_RESPONSE_ACCEPT,
-# else
+#  else
 	    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 	    saving ? GTK_STOCK_SAVE : GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+#  endif
+	    NULL);
 # endif
-	    NULL);
     gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(fc),
 						       (const gchar *)dirbuf);
 
@@ -1263,7 +1276,7 @@ gui_mch_browse(int saving UNUSED,
 		    gtk_file_filter_add_pattern(gfilter, (gchar *)patt);
 		    if (*p == '\n')
 		    {
-			gtk_file_chooser_add_filter((GtkFileChooser *)fc,
+			gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(fc),
 								     gfilter);
 			if (*(p + 1) != NUL)
 			    gfilter = gtk_file_filter_new();
@@ -1284,7 +1297,11 @@ gui_mch_browse(int saving UNUSED,
 	gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), (char *)dflt);
 
     gui.browse_fname = NULL;
+# if GTK_CHECK_VERSION(3,20,0)
+    if (gtk_native_dialog_run(GTK_NATIVE_DIALOG(fc)) == GTK_RESPONSE_ACCEPT)
+# else
     if (gtk_dialog_run(GTK_DIALOG(fc)) == GTK_RESPONSE_ACCEPT)
+#endif
     {
 	char *filename;
 
@@ -1292,7 +1309,11 @@ gui_mch_browse(int saving UNUSED,
 	gui.browse_fname = (char_u *)g_strdup(filename);
 	g_free(filename);
     }
+# if GTK_CHECK_VERSION(3,20,0)
+    g_object_unref(fc);
+# else
     gtk_widget_destroy(GTK_WIDGET(fc));
+# endif
 
 #else // !USE_FILE_CHOOSER
 
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1649,
+/**/
     1648,
 /**/
     1647,