diff -urN vim63-pld-before-gtkchooser/src/gui_gtk.c vim63-pld-with-gtkchooser/src/gui_gtk.c --- vim63-pld-before-gtkchooser/src/gui_gtk.c 2005-09-09 16:33:27.806599424 +0200 +++ vim63-pld-with-gtkchooser/src/gui_gtk.c 2005-09-09 16:38:56.025702536 +0200 @@ -39,6 +39,15 @@ #include "vim.h" +/* Check to see if we are able to use GtkFileChooser */ +#undef HAVE_FILECHOOSER + +#if defined(HAVE_GTK2) +# if GTK_MINOR_VERSION >= 4 +# define HAVE_FILECHOOSER +# endif +#endif + #if 0 /* Gnome redefines _() and N_(). Grrr... */ # ifdef _ @@ -1547,6 +1556,7 @@ * Implementation of the file selector related stuff */ +#if !defined(HAVE_FILECHOOSER) /*ARGSUSED*/ static void browse_ok_cb(GtkWidget *widget, gpointer cbdata) @@ -1578,6 +1588,7 @@ if (MAIN_LEVEL() > 0) MAIN_QUIT(); } +#endif /*ARGSUSED*/ static gboolean @@ -1615,7 +1626,11 @@ char_u *initdir, char_u *filter) { +#if !defined(HAVE_FILECHOOSER) GtkFileSelection *fs; /* shortcut */ +#else + GtkFileChooserDialog *fs; +#endif char_u dirbuf[MAXPATHL]; char_u *p; @@ -1625,6 +1640,7 @@ if (!gui.filedlg) { +#if !defined(HAVE_FILECHOOSER) gui.filedlg = gtk_file_selection_new((const gchar *)title); gtk_window_set_modal(GTK_WINDOW(gui.filedlg), TRUE); gtk_window_set_transient_for(GTK_WINDOW(gui.filedlg), @@ -1641,6 +1657,26 @@ gtk_signal_connect_object(GTK_OBJECT(gui.filedlg), "destroy", GTK_SIGNAL_FUNC(browse_destroy_cb), GTK_OBJECT(gui.filedlg)); +#else + if(saving == 0) + gui.filedlg = gtk_file_chooser_dialog_new ((const gchar *)title, + GTK_WINDOW(gui.mainwin), + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, + NULL); + else + gui.filedlg = gtk_file_chooser_dialog_new ((const gchar *)title, + GTK_WINDOW(gui.mainwin), + GTK_FILE_CHOOSER_ACTION_SAVE, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, + NULL); + + gtk_window_set_modal(GTK_WINDOW(gui.filedlg), TRUE); + fs = GTK_FILE_CHOOSER_DIALOG(gui.filedlg); + gtk_container_border_width(GTK_CONTAINER(fs), 4); +#endif } else gtk_window_set_title(GTK_WINDOW(gui.filedlg), (const gchar *)title); @@ -1665,16 +1701,40 @@ && STRLEN(dirbuf) + 2 + STRLEN(dflt) < MAXPATHL) STRCAT(dirbuf, dflt); - gtk_file_selection_set_filename(GTK_FILE_SELECTION(gui.filedlg), - (const gchar *)dirbuf); +#if !defined(HAVE_FILECHOOSER) + gtk_file_selection_set_filename(GTK_FILE_SELECTION(gui.filedlg), + (const gchar *)dirbuf); +#else + if((dirbuf[STRLEN(dirbuf) - 1]) == '/') + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(fs), + (const gchar *)dirbuf); + else + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(fs), + (const gchar *)dirbuf); +#endif + # ifndef HAVE_GTK2 gui_gtk_position_in_parent(GTK_WIDGET(gui.mainwin), GTK_WIDGET(gui.filedlg), VW_POS_MOUSE); # endif +#if !defined(HAVE_FILECHOOSER) gtk_widget_show(gui.filedlg); while (gui.filedlg && GTK_WIDGET_DRAWABLE(gui.filedlg)) MAIN_ITERATION_DO(TRUE); +#else + if (gui.browse_fname != NULL) { + g_free(gui.browse_fname); + gui.browse_fname = NULL; + } + + if (gtk_dialog_run(GTK_DIALOG(fs)) == GTK_RESPONSE_ACCEPT) + gui.browse_fname = gtk_file_chooser_get_filename( + GTK_FILE_CHOOSER(fs)); + + gtk_widget_destroy(GTK_WIDGET(fs)); + gui.filedlg = NULL; +#endif if (gui.browse_fname == NULL) return NULL; Files vim63-pld-before-gtkchooser/src/.gui_gtk.c.rej.swp and vim63-pld-with-gtkchooser/src/.gui_gtk.c.rej.swp differ