diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-09-09 20:58:55 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-09-09 20:58:55 +0200 |
commit | 3e4cc9671c5551b73f0176cab40e676ed72a1716 (patch) | |
tree | e903d14db67f1b3c25cf3df90cd116e432b2fc70 /src/gui_gtk.c | |
parent | a62372be1f73b69f9d4c9413ec816d773a16a0f5 (diff) | |
download | vim-git-3e4cc9671c5551b73f0176cab40e676ed72a1716.tar.gz |
patch 8.2.1649: GTK3: using old file chooserv8.2.1649
Problem: GTK3: using old file chooser.
Solution: Use native file chooser on GTK 3.20 and above. (Yogeshwar
Velingker, closes #6909)
Diffstat (limited to 'src/gui_gtk.c')
-rw-r--r-- | src/gui_gtk.c | 33 |
1 files changed, 27 insertions, 6 deletions
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 |