From: Bram Moolenaar Date: Wed, 9 Sep 2020 18:58:55 +0000 (+0200) Subject: patch 8.2.1649: GTK3: using old file chooser X-Git-Tag: v8.2.1649 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3e4cc9671c5551b73f0176cab40e676ed72a1716;p=vim 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 index aaebf3056..173304868 100644 --- 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 +# endif NULL); +# endif 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 index 5632a9f3c..86cae2f2a 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1649, /**/ 1648, /**/