/usr/share/tcltk/tk8.4/panedwindow.tcl is in libtk8.4 8.4.20-8.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 | # panedwindow.tcl --
#
# This file defines the default bindings for Tk panedwindow widgets and
# provides procedures that help in implementing those bindings.
bind Panedwindow <Button-1> { ::tk::panedwindow::MarkSash %W %x %y 1 }
bind Panedwindow <Button-2> { ::tk::panedwindow::MarkSash %W %x %y 0 }
bind Panedwindow <B1-Motion> { ::tk::panedwindow::DragSash %W %x %y 1 }
bind Panedwindow <B2-Motion> { ::tk::panedwindow::DragSash %W %x %y 0 }
bind Panedwindow <ButtonRelease-1> {::tk::panedwindow::ReleaseSash %W 1}
bind Panedwindow <ButtonRelease-2> {::tk::panedwindow::ReleaseSash %W 0}
bind Panedwindow <Motion> { ::tk::panedwindow::Motion %W %x %y }
bind Panedwindow <Leave> { ::tk::panedwindow::Leave %W }
# Initialize namespace
namespace eval ::tk::panedwindow {}
# ::tk::panedwindow::MarkSash --
#
# Handle marking the correct sash for possible dragging
#
# Arguments:
# w the widget
# x widget local x coord
# y widget local y coord
# proxy whether this should be a proxy sash
# Results:
# None
#
proc ::tk::panedwindow::MarkSash {w x y proxy} {
if {[$w cget -opaqueresize]} { set proxy 0 }
set what [$w identify $x $y]
if { [llength $what] == 2 } {
foreach {index which} $what break
if { !$::tk_strictMotif || $which eq "handle" } {
if {!$proxy} { $w sash mark $index $x $y }
set ::tk::Priv(sash) $index
foreach {sx sy} [$w sash coord $index] break
set ::tk::Priv(dx) [expr {$sx-$x}]
set ::tk::Priv(dy) [expr {$sy-$y}]
# Do this to init the proxy location
DragSash $w $x $y $proxy
}
}
}
# ::tk::panedwindow::DragSash --
#
# Handle dragging of the correct sash
#
# Arguments:
# w the widget
# x widget local x coord
# y widget local y coord
# proxy whether this should be a proxy sash
# Results:
# Moves sash
#
proc ::tk::panedwindow::DragSash {w x y proxy} {
if {[$w cget -opaqueresize]} { set proxy 0 }
if { [info exists ::tk::Priv(sash)] } {
if {$proxy} {
$w proxy place \
[expr {$x+$::tk::Priv(dx)}] [expr {$y+$::tk::Priv(dy)}]
} else {
$w sash place $::tk::Priv(sash) \
[expr {$x+$::tk::Priv(dx)}] [expr {$y+$::tk::Priv(dy)}]
}
}
}
# ::tk::panedwindow::ReleaseSash --
#
# Handle releasing of the sash
#
# Arguments:
# w the widget
# proxy whether this should be a proxy sash
# Results:
# Returns ...
#
proc ::tk::panedwindow::ReleaseSash {w proxy} {
if {[$w cget -opaqueresize]} { set proxy 0 }
if { [info exists ::tk::Priv(sash)] } {
if {$proxy} {
foreach {x y} [$w proxy coord] break
$w sash place $::tk::Priv(sash) $x $y
$w proxy forget
}
unset ::tk::Priv(sash) ::tk::Priv(dx) ::tk::Priv(dy)
}
}
# ::tk::panedwindow::Motion --
#
# Handle motion on the widget. This is used to change the cursor
# when the user moves over the sash area.
#
# Arguments:
# w the widget
# x widget local x coord
# y widget local y coord
# Results:
# May change the cursor. Sets up a timer to verify that we are still
# over the widget.
#
proc ::tk::panedwindow::Motion {w x y} {
variable ::tk::Priv
set id [$w identify $x $y]
if {([llength $id] == 2) && \
(!$::tk_strictMotif || [lindex $id 1] eq "handle")} {
if { ![info exists Priv($w,panecursor)] } {
set Priv($w,panecursor) [$w cget -cursor]
if { [$w cget -sashcursor] eq "" } {
if { [$w cget -orient] eq "horizontal" } {
$w configure -cursor sb_h_double_arrow
} else {
$w configure -cursor sb_v_double_arrow
}
} else {
$w configure -cursor [$w cget -sashcursor]
}
if {[info exists Priv($w,pwAfterId)]} {
after cancel $Priv($w,pwAfterId)
}
set Priv($w,pwAfterId) [after 150 \
[list ::tk::panedwindow::Cursor $w]]
}
return
}
if { [info exists Priv($w,panecursor)] } {
$w configure -cursor $Priv($w,panecursor)
unset Priv($w,panecursor)
}
}
# ::tk::panedwindow::Cursor --
#
# Handles returning the normal cursor when we are no longer over the
# sash area. This needs to be done this way, because the panedwindow
# won't see Leave events when the mouse moves from the sash to a
# paned child, although the child does receive an Enter event.
#
# Arguments:
# w the widget
# Results:
# May restore the default cursor, or schedule a timer to do it.
#
proc ::tk::panedwindow::Cursor {w} {
variable ::tk::Priv
# Make sure to check window existence in case it is destroyed.
if {[info exists Priv($w,panecursor)] && [winfo exists $w]} {
if {[winfo containing [winfo pointerx $w] [winfo pointery $w]] eq $w} {
set Priv($w,pwAfterId) [after 150 \
[list ::tk::panedwindow::Cursor $w]]
} else {
$w configure -cursor $Priv($w,panecursor)
unset Priv($w,panecursor)
if {[info exists Priv($w,pwAfterId)]} {
after cancel $Priv($w,pwAfterId)
unset Priv($w,pwAfterId)
}
}
}
}
# ::tk::panedwindow::Leave --
#
# Return to default cursor when leaving the pw widget.
#
# Arguments:
# w the widget
# Results:
# Restores the default cursor
#
proc ::tk::panedwindow::Leave {w} {
if {[info exists ::tk::Priv($w,panecursor)]} {
$w configure -cursor $::tk::Priv($w,panecursor)
unset ::tk::Priv($w,panecursor)
}
}
|