>----- Original Message ---- >From: Mark Levedahl <mdl123@xxxxxxxxxxx> >To: Shawn O. Pearce <spearce@xxxxxxxxxxx> >Cc: Junio C Hamano <junkio@xxxxxxx>; git@xxxxxxxxxxxxxxx >Sent: Wednesday, February 7, 2007 4:30:38 PM >Subject: Re: [PATCH] Make gitk save and restore the user set window position. > >Shawn O. Pearce wrote: >> Junio C Hamano <junkio@xxxxxxx> wrote: >> >>> After seeing what this patch has to do, I feel dirty, but >>> that is not Mark's fault -- rather it is Tk's. >>> >>> I am tempted to suggest adding an explicit "Save window >>> configuration" action on the menubar and forget about >>> resurrecting the window configuration immediately before the >>> end of the last session. >>> >> >> Maybe take a look at what git-gui does here, because its slightly >> saner and still saves the geometry on exit: >> >> set is_quitting 0 >> proc do_quit {} { >> global is_quitting >> if {$is_quitting} return >> set is_quitting 1 >> # save wm geometry >> } >> bind . <Destroy> do_quit >> >> OK, its not that much saner. But it does bypass needing to setup >> some ugly bindings on every object in the UI. Though I recently >> took a slightly different approach in a dialog: >> >> proc do_quit {} { >> bind . <Destroy> {} >> # do cleanup >> } >> bind . <Destroy> do_quit >> >> Yes the binding is firing in both cases for some arbitrary child >> widget in the window, but it doesn't matter. In the latter version >> setting the binding to the empty string removes the do_quit binding, >> allowing the other widgets to destroy without reinvoking do_quit >> and whacking whatever geometry data you may have saved before the >> widgets started to get deleted. >> >> >> The only problem I seem to have in git-gui is the window position >> opens about 10 pixels lower and 2 pixels to the right than the last >> time it opened. I think there's a bug in Tk on Windows where the >> window position on the desktop doesn't include the titlebar when I >> get it, but expects to include it when I attempt to set it on the >> next start. >> >> I should note I also see the same behavior with my day-time-job's >> Java apps on Windows however, so I don't think its a specific Tk >> or git-gui issue. >> >> > What you suggest is essentially what gitk does before my patch. In > git-gui, routine do_quit is invoked when Tk is ready to destroy the top > level window: this is _after_ Tk has destroyed everything in the window, > and thus the problem. I still haven't isolated which object(s) being > destroyed from gitk cause the geometry reported from wm info to change, > clearly my patch is binding widgets that do not need to be bound, but I > haven't found which specific one needs to be bound. > > With my patch, the correct position is saved and restored on both Linux > and Cygwin. I think that should be the goal. A more elegant solution > accomplishing that end is of course desirable, but there remains the > issue of finding it. I think the objections to my patch are more > theoretical than practical: I seriously doubt you can find any > practically observable side effect of binding all the widgets other than > that the window geometry _is_ correctly saved and restored. > > As to being specific to Tk, I have many windows applications that > successfully save and restore window state, this geometry issue is not > endemic to Windows and I have never encountered it except with Tk. > > Mark > I've only been half following this thread, so I apologize if this was already talked about. Have you tried [wm protocol] command. You would use it like this: wm protocol . WM_DELETE_WINDOW do_quit This basically traps the signal from the windowmanager, and [do_quit] gets executed *before* the gui is torn down. The only bad thing about this, is if you explicitly destroy a widget inside your code (i.e. [destroy .]), then this will *not* get invoked. You also need to make sure you catch any possible errors in do_quit, otherwise the gui will hang. HTH, --brett - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html ____________________________________________________________________________________ Be a PS3 game guru. Get your game face on with the latest PS3 news and previews at Yahoo! Games. http://videogames.yahoo.com/platform?platform=120121 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html