[PATCHv2] git-gui: delegate selection from gutter columns to text output

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

 



Selecting in the gutter columns of the blame view should make no sense,
so delegate any selection action in these columns to the text output
by selecting whole lines there.

Signed-off-by: Bert Wesarg <bert.wesarg@xxxxxxxxxxxxxx>
---

 git-gui.sh    |   29 +++++++++++++++++++++++++++++
 lib/blame.tcl |   20 +++++++++++++++-----
 2 files changed, 44 insertions(+), 5 deletions(-)

diff --git a/git-gui.sh b/git-gui.sh
index 21033cb..53d6b43 100755
--- a/git-gui.sh
+++ b/git-gui.sh
@@ -2077,6 +2077,35 @@ proc many2scrollbar {list mode sb top bottom} {
 	foreach w $list {$w $mode moveto $top}
 }
 
+# delegates mouse selection actions from gutter columns to the main text
+# widget
+# use delegator_bind, if you need to bind more actions
+proc delegate_sel_to {w from} {
+	set bind_list [list \
+		<Button-1> \
+		<B1-Motion> \
+		<Double-Button-1> \
+		<Triple-Button-1> \
+		<Shift-Button-1> \
+		<Double-Shift-Button-1> \
+		<Triple-Shift-Button-1> \
+	]
+
+	foreach seq $bind_list {
+		set script [bind Text $seq]
+		set new_script [string map [list %W $w %x 0 word line] $script]
+		foreach f $from {
+			bind $f $seq "$new_script; focus $w; break"
+		}
+	}
+}
+
+# use this for binding any of the mouse actions from a delegator
+# see bind_list in delegate_sel_to
+proc delegator_bind {tag seq script} {
+	bind $tag $seq "$script; [bind $tag $seq]"
+}
+
 proc incr_font_size {font {amt 1}} {
 	set sz [font configure $font -size]
 	incr sz $amt
diff --git a/lib/blame.tcl b/lib/blame.tcl
index b031e66..b7eb18a 100644
--- a/lib/blame.tcl
+++ b/lib/blame.tcl
@@ -210,6 +210,8 @@ constructor new {i_commit i_path i_jump} {
 
 	set w_columns [list $w_amov $w_asim $w_line $w_file]
 
+	delegate_sel_to $w_file [list $w_amov $w_asim $w_line]
+
 	${NS}::scrollbar $w.file_pane.out.sbx \
 		-orient h \
 		-command [list $w_file xview]
@@ -318,11 +320,19 @@ constructor new {i_commit i_path i_jump} {
 		$i conf -yscrollcommand \
 			"[list ::searchbar::scrolled $finder]
 			 [list many2scrollbar $w_columns yview $w.file_pane.out.sby]"
-		bind $i <Button-1> "
-			[cb _hide_tooltip]
-			[cb _click $i @%x,%y]
-			focus $i
-		"
+		if {$i eq $w_file} {
+			bind $i <Button-1> "
+				[cb _hide_tooltip]
+				[cb _click $i @%x,%y]
+				focus $i
+			"
+		} else {
+			delegator_bind $i <Button-1> "
+				[cb _hide_tooltip]
+				[cb _click $i @%x,%y]
+				focus $i
+			"
+		}
 		bind $i <Any-Motion>  [cb _show_tooltip $i @%x,%y]
 		bind $i <Any-Enter>   [cb _hide_tooltip]
 		bind $i <Any-Leave>   [cb _hide_tooltip]
-- 
1.7.7.908.g383b5

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