On Mon, 2010-09-06 at 10:51 -0500, Jeff Johnston wrote: > Looking at this even further I can see that there is no way to tell if > gedit is closing and have a way to get at the tabs. This seems like a > reasonable thing that we should be able to find out. If a new event > seems too much maybe we could just put the GEDIT_IS_QUITTING on the > header file and make it part of the API? That or have a new > GeditWindowState that says gedit is closing > (GEDIT_WINDOW_STATE_CLOSING). > > For now I do not see any other way around this so I am going to check > the GEDIT_IS_QUITTING (but hardcoded in my app) on the window object. > Keeping track of the tabs is not good enough (and error prone at > best). > > Whatever the solution I would like to do the work once I know what > direction to take... > > > -Jeff Johnston > > > > On Sun, Sep 5, 2010 at 9:29 PM, Jeff Johnston > <jeff johnston mn gmail com> wrote: > > I am wondering if anyone else would find it useful to have a > gedit close event? > > What I would like to do is save the tabs that are opened when > gedit shuts down. The problem is that gedit closes all the > tabs and destroys the window before I have a chance to do > anything. What would be really useful is to have an event that > is invoked when gedit is shut down, but fires before any > cleanup is done. > > I saw that gedit sets a variable on the window object that > says the app is quiting. I started to write a 'tab-removed' > event that took advantage of that, but it felt very hacky. I > could just persist the state of the tabs as they are opened > and closed, but that leads to other issues. Ideally I could > just take a snapshot of the tabs just before gedit closes > down. > > On a related note this is the flip side of the question I had > about loading tabs on startup. The solution there was to use a > "realize" event on the window. However, for both startup and > shutdown I could see it being very useful to have an event > that gets invoked when gedit is all the way up and just before > any cleanup is done. That would give custom plugins a last > chance to do something with full access to gedit's api while > it is fully intact. > > I would be more than willing to do the work! I have been > digging into the gedit source code and I think it is very easy > to follow. > > > This is the code I found (2.30.3) that clearly shows that the > tabs are all closed and then the window is destroyed. > > gedit-commands-file.c (1766) > > g_object_set_data (G_OBJECT (window), > GEDIT_IS_QUITTING, > GBOOLEAN_TO_POINTER (is_quitting)); > > ... > > if (unsaved_docs == NULL) > { > /* There is no document to save -> close all tabs */ > gedit_window_close_all_tabs (window); > > if (is_quitting) > gtk_widget_destroy (GTK_WIDGET (window)); > > return; > } > Maybe it's possible to use the "delete-event" signal of the window. But your handler must be called before _gedit_cmd_file_quit () (i.e. before the tabs are closed).
Attachment:
signature.asc
Description: This is a digitally signed message part