Merge branch 'bp/widget-focus-hotkeys'
[gitweb.git] / lib / line.tcl
index 4913bdd9a80714be10c1b99c75d7322cc29b3174..a026de954c3d9cbfd03d4dec9a73a74647bf74ba 100644 (file)
@@ -15,8 +15,12 @@ constructor new {i_w i_text args} {
 
        ${NS}::frame  $w
        ${NS}::label  $w.l       -text [mc "Goto Line:"]
-       entry  $w.ent -textvariable ${__this}::linenum -background lightgreen
-       ${NS}::button $w.bn      -text [mc Go] -command [cb _incrgoto]
+       tentry  $w.ent \
+               -textvariable ${__this}::linenum \
+               -background lightgreen \
+               -validate key \
+               -validatecommand [cb _validate %P]
+       ${NS}::button $w.bn      -text [mc Go] -command [cb _goto]
 
        pack   $w.l   -side left
        pack   $w.bn  -side right
@@ -25,8 +29,9 @@ constructor new {i_w i_text args} {
        eval grid conf $w -sticky we $args
        grid remove $w
 
-       bind $w.ent <Return> [cb _incrgoto]
-       bind $w.ent <Escape> [list linebar::hide $this]
+       trace add variable linenum write [cb _goto_cb]
+       bind $w.ent <Return> [cb _goto]
+       bind $w.ent <Escape> [cb hide]
 
        bind $w <Destroy> [list delete_this $this]
        return $this
@@ -41,6 +46,7 @@ method show {} {
 
 method hide {} {
        if {[visible $this]} {
+               $w.ent delete 0 end
                focus $ctext
                grid remove $w
        }
@@ -54,10 +60,21 @@ method editor {} {
        return $w.ent
 }
 
-method _incrgoto {} {
+method _validate {P} {
+       # only accept numbers as input
+       string is integer $P
+}
+
+method _goto_cb {name ix op} {
+       after idle [cb _goto 1]
+}
+
+method _goto {{nohide {0}}} {
        if {$linenum ne {}} {
                $ctext see $linenum.0
-               hide $this
+               if {!$nohide} {
+                       hide $this
+               }
        }
 }