# HG changeset patch # User Bram Moolenaar # Date 1599678005 -7200 # Node ID ef7f63b97855eb72fd38e7ba5ac877ab24d7d265 # Parent df8b6f1ca6cf45d3e6bf3ffa3213172fd401c8c2 patch 8.2.1649: GTK3: using old file chooser Commit: https://github.com/vim/vim/commit/3e4cc9671c5551b73f0176cab40e676ed72a1716 Author: Bram Moolenaar 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) diff --git a/src/gui_gtk.c b/src/gui_gtk.c --- 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 diff --git a/src/version.c b/src/version.c --- 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,