git-gui: Fix focus transition in the blame viewer.
authorAlexander Gavrilov <angavrilov@gmail.com>
Sun, 9 Nov 2008 15:36:50 +0000 (18:36 +0300)
committerShawn O. Pearce <spearce@spearce.org>
Tue, 11 Nov 2008 17:29:36 +0000 (09:29 -0800)
Now that the blame viewer has a search panel, it should be
taken into account by the focus transition code. Otherwise
showing a commit tip (by accidentally moving the mouse to
the text frame) causes the focus to transfer away from the
search field.

Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
lib/blame.tcl
lib/search.tcl

index 765d08c004b68254713e2524b53d6df0bdc0c007..642f5cab8679b5649be03b93f368e0fe06cb2e20 100644 (file)
@@ -321,7 +321,7 @@ constructor new {i_commit i_path i_jump} {
                        tk_popup $w.ctxm %X %Y
                "
                bind $i <Shift-Tab> "[list focus $w_cviewer];break"
-               bind $i <Tab>       "[list focus $w_cviewer];break"
+               bind $i <Tab>       "[cb _focus_search $w_cviewer];break"
        }
 
        foreach i [concat $w_columns $w_cviewer] {
@@ -337,10 +337,10 @@ constructor new {i_commit i_path i_jump} {
                bind $i <Control-Key-f> {catch {%W yview scroll  1 pages};break}
        }
 
-       bind $w_cviewer <Shift-Tab> "[list focus $w_file];break"
+       bind $w_cviewer <Shift-Tab> "[cb _focus_search $w_file];break"
        bind $w_cviewer <Tab>       "[list focus $w_file];break"
-       bind $w_cviewer <Button-1> [list focus $w_cviewer]
-       bind $w_file    <Visibility> [list focus $w_file]
+       bind $w_cviewer <Button-1>   [list focus $w_cviewer]
+       bind $w_file    <Visibility> [cb _focus_search $w_file]
        bind $top       <F7>         [list searchbar::show $finder]
        bind $top       <Escape>     [list searchbar::hide $finder]
        bind $top       <F3>         [list searchbar::find_next $finder]
@@ -382,6 +382,14 @@ constructor new {i_commit i_path i_jump} {
        _load $this $i_jump
 }
 
+method _focus_search {win} {
+       if {[searchbar::visible $finder]} {
+               focus [searchbar::editor $finder]
+       } else {
+               focus $win
+       }
+}
+
 method _handle_destroy {win} {
        if {$win eq $w} {
                _kill $this
index d292f20f66a6319c34c3b38e28ebc120e7dd8400..32c8656fc9b15498073a09e516777f71827dc3b1 100644 (file)
@@ -19,11 +19,11 @@ constructor new {i_w i_text args} {
 
        frame  $w
        label  $w.l       -text [mc Find:]
+       entry  $w.ent -textvariable ${__this}::searchstring -background lightgreen
        button $w.bn      -text [mc Next] -command [cb find_next]
        button $w.bp      -text [mc Prev] -command [cb find_prev]
        checkbutton $w.cs -text [mc Case-Sensitive] \
                -variable ${__this}::casesensitive -command [cb _incrsearch]
-       entry  $w.ent -textvariable ${__this}::searchstring -background lightgreen
        pack   $w.l   -side left
        pack   $w.cs  -side right
        pack   $w.bp  -side right
@@ -40,19 +40,27 @@ constructor new {i_w i_text args} {
 }
 
 method show {} {
-       if {![winfo ismapped $w]} {
+       if {![visible $this]} {
                grid $w
        }
        focus -force $w.ent
 }
 
 method hide {} {
-       if {[winfo ismapped $w]} {
+       if {[visible $this]} {
                focus $ctext
                grid remove $w
        }
 }
 
+method visible {} {
+       return [winfo ismapped $w]
+}
+
+method editor {} {
+       return $w.ent
+}
+
 method _get_new_anchor {} {
        # use start of selection if it is visible,
        # or the bounds of the visible area