James Vega wrote: > I've given it a shot and it's working well for me. One thing I did > notice is that the files Vim edits aren't added to Gtk's recently used > list. Based on the patch, this doesn't look like it's a regression in > behavior from the last time Vim was using GtkFileChooser. > > I think it'd be good to get the patch as is included so Vim is no longer > using a deprecated (and as of Gtk3 removed) widget. Also, > GtkFileChooser is more intuitive to use than GtkFileSelection (where > it's non-obvious how to select hidden files). > > It would be interesting to look into how (and whether) Vim should make > use of Gtk's recently used list, especially since not all of Vim's > buffers directly relate to an actual file. > >
I imagine it would be done in a manner along the lines of the attached patch file. It was briefly tested. I'm not a big fan of #ifdef so I added a function called gui_mch_file_opened() which allows any GUI module to perform tasks on file open. I put it near similar #ifdef-based notifications for Sun Workshop and Netbeans. My knowledge of the vim source is rudimentary. Some more callers might have to be added, such as when saving a new file. -- Tim Starling --~--~---------~--~----~------------~-------~--~----~ You received this message from the "vim_dev" maillist. For more information, visit http://www.vim.org/maillist.php -~----------~----~----~----~------~----~------~--~---
diff -ru vim7-svn/src/ex_cmds.c vim7-svn.p2/src/ex_cmds.c --- vim7-svn/src/ex_cmds.c 2009-11-12 16:54:22.000000000 +1100 +++ vim7-svn.p2/src/ex_cmds.c 2009-11-17 18:23:18.000000000 +1100 @@ -3813,9 +3813,11 @@ /* Change directories when the 'acd' option is set. */ DO_AUTOCHDIR -#if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG) + /* Notify the GUI */ +# ifdef FEAT_GUI if (gui.in_use && curbuf->b_ffname != NULL) { + gui_mch_file_opened(curbuf); # ifdef FEAT_SUN_WORKSHOP if (usingSunWorkShop) workshop_file_opened((char *)curbuf->b_ffname, curbuf->b_p_ro); diff -ru vim7-svn/src/gui_gtk_x11.c vim7-svn.p2/src/gui_gtk_x11.c --- vim7-svn/src/gui_gtk_x11.c 2009-11-13 08:55:55.000000000 +1100 +++ vim7-svn.p2/src/gui_gtk_x11.c 2009-11-17 18:40:04.000000000 +1100 @@ -83,6 +83,7 @@ # endif # include <gtk/gtk.h> +# include <gio/gio.h> # include "gui_gtk_f.h" #endif @@ -7262,3 +7263,19 @@ # endif /* !HAVE_GTK2 */ #endif /* FEAT_SIGN_ICONS */ + + void +gui_mch_file_opened(buf_T *buf) +{ + /* Register the newly-opened file in GtkRecentManager */ + GtkRecentManager *manager = gtk_recent_manager_get_default(); + char *uri; + GFile *file; + + file = g_file_new_for_path((const char*)buf->b_ffname); + uri = g_file_get_uri(file); + gtk_recent_manager_add_item(manager, (const gchar *)uri); + g_free(uri); + g_object_unref(file); +} + diff -ru vim7-svn/src/gui_mac.c vim7-svn.p2/src/gui_mac.c --- vim7-svn/src/gui_mac.c 2009-04-26 10:01:45.000000000 +1000 +++ vim7-svn.p2/src/gui_mac.c 2009-11-17 18:23:58.000000000 +1100 @@ -6897,3 +6897,8 @@ } #endif // FEAT_GUI_TABLINE + + void +gui_mch_file_opened(buf_T *buf) +{ +} diff -ru vim7-svn/src/gui_photon.c vim7-svn.p2/src/gui_photon.c --- vim7-svn/src/gui_photon.c 2009-11-12 16:54:22.000000000 +1100 +++ vim7-svn.p2/src/gui_photon.c 2009-11-17 18:25:19.000000000 +1100 @@ -3096,3 +3096,8 @@ vim_free( font ); } + void +gui_mch_file_opened(buf_T *buf) +{ +} + diff -ru vim7-svn/src/gui_riscos.c vim7-svn.p2/src/gui_riscos.c --- vim7-svn/src/gui_riscos.c 2009-04-26 10:01:45.000000000 +1000 +++ vim7-svn.p2/src/gui_riscos.c 2009-11-17 18:26:29.000000000 +1100 @@ -3556,3 +3556,8 @@ } return NULL; } + + void +gui_mch_file_opened(buf_T *buf) +{ +} diff -ru vim7-svn/src/gui_w16.c vim7-svn.p2/src/gui_w16.c --- vim7-svn/src/gui_w16.c 2009-04-26 10:01:45.000000000 +1000 +++ vim7-svn.p2/src/gui_w16.c 2009-11-17 18:27:12.000000000 +1100 @@ -1554,3 +1554,4 @@ SetActiveWindow(s_hwnd); } #endif + diff -ru vim7-svn/src/gui_w48.c vim7-svn.p2/src/gui_w48.c --- vim7-svn/src/gui_w48.c 2009-04-26 10:01:45.000000000 +1000 +++ vim7-svn.p2/src/gui_w48.c 2009-11-17 18:27:36.000000000 +1100 @@ -3907,3 +3907,9 @@ *argvp = argv; return argc; } + + void +gui_mch_file_opened(buf_T *buf) +{ +} + diff -ru vim7-svn/src/gui_x11.c vim7-svn.p2/src/gui_x11.c --- vim7-svn/src/gui_x11.c 2009-11-12 16:54:22.000000000 +1100 +++ vim7-svn.p2/src/gui_x11.c 2009-11-17 18:28:26.000000000 +1100 @@ -3585,3 +3585,8 @@ } } #endif + + void +gui_mch_file_opened(buf_T *buf) +{ +} diff -ru vim7-svn/src/proto/gui_gtk_x11.pro vim7-svn.p2/src/proto/gui_gtk_x11.pro --- vim7-svn/src/proto/gui_gtk_x11.pro 2009-11-12 16:54:14.000000000 +1100 +++ vim7-svn.p2/src/proto/gui_gtk_x11.pro 2009-11-17 18:45:33.000000000 +1100 @@ -72,4 +72,5 @@ void gui_mch_drawsign __ARGS((int row, int col, int typenr)); void *gui_mch_register_sign __ARGS((char_u *signfile)); void gui_mch_destroy_sign __ARGS((void *sign)); +void gui_mch_file_opened __ARGS((buf_T *buf)); /* vim: set ft=c : */ diff -ru vim7-svn/src/proto/gui_mac.pro vim7-svn.p2/src/proto/gui_mac.pro --- vim7-svn/src/proto/gui_mac.pro 2009-04-26 10:01:34.000000000 +1000 +++ vim7-svn.p2/src/proto/gui_mac.pro 2009-11-17 19:08:01.000000000 +1100 @@ -143,5 +143,6 @@ int C2PascalString (char_u *CString, Str255 *PascalString); int GetFSSpecFromPath ( char_u *file, FSSpec *fileFSSpec); char_u *FullPathFromFSSpec_save (FSSpec file); +void gui_mch_file_opened __ARGS((buf_T *buf)); /* vim: set ft=c : */ diff -ru vim7-svn/src/proto/gui_photon.pro vim7-svn.p2/src/proto/gui_photon.pro --- vim7-svn/src/proto/gui_photon.pro 2009-04-26 10:01:34.000000000 +1000 +++ vim7-svn.p2/src/proto/gui_photon.pro 2009-11-17 18:45:35.000000000 +1100 @@ -64,4 +64,5 @@ char_u *gui_mch_get_fontname __ARGS((GuiFont font, char_u *name)); void gui_mch_set_font __ARGS((GuiFont font)); void gui_mch_free_font __ARGS((GuiFont font)); +void gui_mch_file_opened __ARGS((buf_T *buf)); /* vim: set ft=c : */ diff -ru vim7-svn/src/proto/gui_riscos.pro vim7-svn.p2/src/proto/gui_riscos.pro --- vim7-svn/src/proto/gui_riscos.pro 2009-04-26 10:01:34.000000000 +1000 +++ vim7-svn.p2/src/proto/gui_riscos.pro 2009-11-17 19:06:42.000000000 +1100 @@ -63,4 +63,5 @@ void ro_redraw_title __ARGS((int window)); int ro_ok_to_quit __ARGS((void)); +void gui_mch_file_opened __ARGS((buf_T *buf)); /* vim: set ft=c : */ diff -ru vim7-svn/src/proto/gui_w16.pro vim7-svn.p2/src/proto/gui_w16.pro --- vim7-svn/src/proto/gui_w16.pro 2009-04-26 10:01:34.000000000 +1000 +++ vim7-svn.p2/src/proto/gui_w16.pro 2009-11-17 18:45:34.000000000 +1100 @@ -57,6 +57,7 @@ char_u *gui_mch_browsedir __ARGS((char_u *title, char_u *initdir)); char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter)); int get_cmd_args __ARGS((char *prog, char *cmdline, char ***argvp, char **tofree)); +void gui_mch_file_opened __ARGS((buf_T *buf)); void gui_mch_prepare __ARGS((int *argc, char **argv)); int gui_mch_init __ARGS((void)); void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction)); diff -ru vim7-svn/src/proto/gui_w32.pro vim7-svn.p2/src/proto/gui_w32.pro --- vim7-svn/src/proto/gui_w32.pro 2009-04-26 10:01:34.000000000 +1000 +++ vim7-svn.p2/src/proto/gui_w32.pro 2009-11-17 18:45:34.000000000 +1100 @@ -57,6 +57,7 @@ char_u *gui_mch_browsedir __ARGS((char_u *title, char_u *initdir)); char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter)); int get_cmd_args __ARGS((char *prog, char *cmdline, char ***argvp, char **tofree)); +void gui_mch_file_opened __ARGS((buf_T *buf)); int gui_is_win32s __ARGS((void)); void gui_mch_set_parent __ARGS((char *title)); void gui_mch_prepare __ARGS((int *argc, char **argv)); diff -ru vim7-svn/src/proto/gui_x11.pro vim7-svn.p2/src/proto/gui_x11.pro --- vim7-svn/src/proto/gui_x11.pro 2009-04-26 10:01:34.000000000 +1000 +++ vim7-svn.p2/src/proto/gui_x11.pro 2009-11-17 18:45:33.000000000 +1100 @@ -67,4 +67,5 @@ void gui_mch_mousehide __ARGS((int hide)); void mch_set_mouse_shape __ARGS((int shape)); void gui_mch_menu_set_tip __ARGS((vimmenu_T *menu)); +void gui_mch_file_opened __ARGS((buf_T *buf)); /* vim: set ft=c : */