threads / patch / 6769

patchMake gitk save and restore the user set window position.

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

## tl;dr

8 messages between Feb 11, 2007 and Feb 11, 2007. Diffs are folded; open one to read it.

replies: 7people: 3as markdown or json

Mark Levedahl· Feb 11, 2007, 14:27 UTC · lore

I sent these patches to Junio and Paul last week, mistyped the git mailing list address so they didn't get to the list so am resending for the record.

Mark Levedahl
Mark Levedahl· Feb 11, 2007, 14:27 UTC · re: Mark Levedahl · lore

gitk was saving widget sizes and positions when the main window was destroyed, which is after all child widgets are destroyed. The cure is to trap the WM_DELETE_WINDOW event before the gui is torn down. Also, the saved geometry was captured using "winfo geometry .", rather than "wm geometry ." Under Linux, these two return different answers and the latter one is correct.

Signed-off-by: Mark Levedahl <mdl123@verizon.net>
---
 gitk |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)
Show changes to gitk +3 −2
diff --git a/gitk b/gitk
index 1c36235..23bf567 100755
--- a/gitk
+++ b/gitk
@@ -725,7 +725,7 @@ proc makewindow {} {
     bind . <Control-KP_Add> {incrfont 1}
     bind . <Control-minus> {incrfont -1}
     bind . <Control-KP_Subtract> {incrfont -1}
-    bind . <Destroy> {savestuff %W}
+    wm protocol . WM_DELETE_WINDOW doquit
     bind . <Button-1> "click %W"
     bind $fstring <Key-Return> dofind
     bind $sha1entry <Key-Return> gotocommit
@@ -829,7 +829,7 @@ proc savestuff {w} {
 	puts $f [list set colors $colors]
 	puts $f [list set diffcolors $diffcolors]
 
-        puts $f "set geometry(main) [winfo geometry .]"
+	puts $f "set geometry(main) [wm geometry .]"
 	puts $f "set geometry(topwidth) [winfo width .tf]"
 	puts $f "set geometry(topheight) [winfo height .tf]"
 	puts $f "set geometry(canv) [expr {[winfo width $canv]-0}]"
@@ -5800,6 +5800,7 @@ proc showtag {tag isnew} {
 proc doquit {} {
     global stopped
     set stopped 100
+    savestuff .
     destroy .
 }
 
-- 
1.5.0.rc3.24.g0c5e
Mark Levedahl· Feb 11, 2007, 14:27 UTC · re: Mark Levedahl · lore

[PATCH] Clean up geometry save code in gitk.

Leftover code was subtracting zero from several items before storing, an obvious noop now deleted.

Signed-off-by: Mark Levedahl <mdl123@verizon.net>
---
 gitk |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)
Show changes to gitk +3 −3
diff --git a/gitk b/gitk
index 23bf567..df1ce8c 100755
--- a/gitk
+++ b/gitk
@@ -832,9 +832,9 @@ proc savestuff {w} {
 	puts $f "set geometry(main) [wm geometry .]"
 	puts $f "set geometry(topwidth) [winfo width .tf]"
 	puts $f "set geometry(topheight) [winfo height .tf]"
-	puts $f "set geometry(canv) [expr {[winfo width $canv]-0}]"
-	puts $f "set geometry(canv2) [expr {[winfo width $canv2]-0}]"
-	puts $f "set geometry(canv3) [expr {[winfo width $canv3]-0}]"
+	puts $f "set geometry(canv) [winfo width $canv]"
+	puts $f "set geometry(canv2) [winfo width $canv2]"
+	puts $f "set geometry(canv3) [winfo width $canv3]"
 	puts $f "set geometry(botwidth) [winfo width .bleft]"
 	puts $f "set geometry(botheight) [winfo height .bleft]"
 
-- 
1.5.0.rc3.24.g0c5e
Sergey Vlasov· Feb 11, 2007, 16:56 UTC · re: Mark Levedahl · lore

Re: [PATCH] Clean up geometry save code in gitk.

Hello!

On Sun, 11 Feb 2007 09:27:20 -0500 Mark Levedahl <mdl123@verizon.net> wrote:

Show 6 quoted lines
> gitk was saving widget sizes and positions when the main window was
> destroyed, which is after all child widgets are destroyed. The cure
> is to trap the WM_DELETE_WINDOW event before the gui is torn down. Also,
> the saved geometry was captured using "winfo geometry .", rather than
> "wm geometry ." Under Linux, these two return different answers and the
> latter one is correct.
> Leftover code was subtracting zero from several items before storing, an
> obvious noop now deleted.

These two patches fix saving of the window position for me; however, some things still remain broken:

 - No matter what sizes of the commit tree, patch and filelist panes I
   set, on gitk restart they come up with their default sizes.
 - Sizes of commit tree columns are not saved properly - on every gitk
   restart the dividers are shifting more and more to the right.
This is on Linux (x86_64) with Tk 8.4.13.

I made two more patches which fix the above problems for me - please test them (in particular, someone needs to check that the Cygwin support is not broken - apparently something is different between Tk on Linux and Cygwin to create the problem with commit tree columns).

See the followup messages.

-- Sergey Vlasov

Sergey Vlasov· Feb 11, 2007, 16:58 UTC · re: Sergey Vlasov · lore

gitk: Fix restoring of pane sizes

At least on Linux with Tk 8.4.13 gitk always came up with default pane sizes, even though they were previously saved in ~/.gitk. Apparently setting width and height of frames in these panes when creating them is not enough, and an explicit paneconfigure call is needed.

Signed-off-by: Sergey Vlasov <vsu@altlinux.ru>
---
 gitk |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
Show changes to gitk +2 −0
diff --git a/gitk b/gitk
index df1ce8c..7e6ee56 100755
--- a/gitk
+++ b/gitk
@@ -577,6 +577,7 @@ proc makewindow {} {
     pack .tf.bar -in .tf -side bottom -fill x
     pack .tf.histframe -fill both -side top -expand 1
     .ctop add .tf
+    .ctop paneconfigure .tf -height $geometry(topheight)
 
     # now build up the bottom
     panedwindow .pwbottom -orient horizontal
@@ -638,6 +639,7 @@ proc makewindow {} {
     $ctext tag conf found -back yellow
 
     .pwbottom add .bleft
+    .pwbottom paneconfigure .bleft -width $geometry(botwidth)
 
     # lower right
     frame .bright
-- 
1.5.0.rc4.50.g403de
Sergey Vlasov· Feb 11, 2007, 16:58 UTC · re: Sergey Vlasov · lore

gitk: Fix restoring of column widths in the commit tree

On Linux with Tk 8.4.13 after each gitk restart the column dividers were shifting more and more to the right. Apparently the value from [winfo width $canv] is larger than the value of the -width option specified when creating the widget due to non-zero -highlightthickness used by default. But gitk never shows the focus highlight on canvases used for the commit tree, so we can just set "-highlightthickness 0", which fixes the width mismatch.

(The code before commit 3468e71f452701b3eff6a2aeb826bbe0cdad8270 subtracted 2 from widths of canvases when saving them - apparently to account for that hidden highlightthickness; I suppose that Cygwin behaves differently - hope that "-highlightthickness 0" will give proper results everywhere.)

Signed-off-by: Sergey Vlasov <vsu@altlinux.ru>
---
 gitk |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)
Show changes to gitk +3 −0
diff --git a/gitk b/gitk
index 7e6ee56..ea3d68a 100755
--- a/gitk
+++ b/gitk
@@ -459,14 +459,17 @@ proc makewindow {} {
     set canv .tf.histframe.pwclist.canv
     canvas $canv -width $geometry(canv) \
 	-background $bgcolor -bd 0 \
+	-highlightthickness 0 \
 	-yscrollincr $linespc -yscrollcommand "scrollcanv $cscroll"
     .tf.histframe.pwclist add $canv
     set canv2 .tf.histframe.pwclist.canv2
     canvas $canv2 -width $geometry(canv2) \
+	-highlightthickness 0 \
 	-background $bgcolor -bd 0 -yscrollincr $linespc
     .tf.histframe.pwclist add $canv2
     set canv3 .tf.histframe.pwclist.canv3
     canvas $canv3 -width $geometry(canv3) \
+	-highlightthickness 0 \
 	-background $bgcolor -bd 0 -yscrollincr $linespc
     .tf.histframe.pwclist add $canv3
 
-- 
1.5.0.rc4.50.g403de
Mark Levedahl· Feb 11, 2007, 17:44 UTC · re: Sergey Vlasov · lore

Re: [PATCH] Clean up geometry save code in gitk.

Sergey Vlasov wrote:
Show 21 quoted lines
> These two patches fix saving of the window position for me; however,
> some things still remain broken:
>
>  - No matter what sizes of the commit tree, patch and filelist panes I
>    set, on gitk restart they come up with their default sizes.
>
>  - Sizes of commit tree columns are not saved properly - on every gitk
>    restart the dividers are shifting more and more to the right.
>
> This is on Linux (x86_64) with Tk 8.4.13.
>
> I made two more patches which fix the above problems for me - please
> test them (in particular, someone needs to check that the Cygwin
> support is not broken - apparently something is different between Tk
> on Linux and Cygwin to create the problem with commit tree columns).
>
> See the followup messages.
>
> --
> Sergey Vlasov
>   
I could not actually apply your patches, but your suggested changes were 
simple enough to apply by hand:
1) I do notice the change in size of panes in the upper window on Cygwin 
(hadn't noticed before but it is there), and your "-highlightthickness 
0" tweak fixes that. Just for grins, I tried reenabling the "subtract 2" 
strategy in place before, and that only makes the problem worse on Cygwin.
2) I don't see any effect of the "pane configure" tweak on Cygwin. 
Haven't checked on Linux (don't have that here) so cannot comment.

Gotta say, the more I play with Tk, the more I wonder why anyone uses anything else ;-) .

Mark
Junio C Hamano· Feb 11, 2007, 21:49 UTC · re: Mark Levedahl · lore

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

Mark Levedahl <mdl123@verizon.net> writes:
> I sent these patches to Junio and Paul last week, mistyped the git mailing list
> address so they didn't get to the list so am resending for the record.
Thanks.  Will apply them, short-circuitting Paul.

← back to recent threads