Re: [PATCH] Make gitk save and restore the user set window position.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>----- 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

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]