Last active
September 10, 2021 13:14
-
-
Save yyamasak/0899f02eeda804c6591154125a6f854a to your computer and use it in GitHub Desktop.
Rewrite Tcl/Tk grab command to continuously restore grabbed Tk toplevel window
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
proc _restore_grab_window {w} { | |
if {![winfo exists $w] || [grab status $w] eq "none"} { | |
return | |
} else { | |
if {![winfo viewable $w]} { | |
wm deiconify $w | |
} | |
after 2000 [list _restore_grab_window $w] | |
} | |
} | |
rename grab _grab | |
proc grab {args} { | |
set arg0 [lindex $args 0] | |
set arg1 [lindex $args 1] | |
set arg2 [lindex $args 2] | |
set skip 0 | |
if {$arg0 in {status current}} { | |
set skip 1 | |
} | |
if {!$skip} { | |
set release 0 | |
if {$arg0 eq "-global"} { | |
set w $arg1 | |
} elseif {$arg0 eq "set"} { | |
if {$arg1 eq "-global"} { | |
set w $arg2 | |
} else { | |
set w $arg1 | |
} | |
} elseif {$arg0 eq "release"} { | |
set release 1 | |
set w $arg1 | |
} elseif {[winfo exists $arg0]} { | |
set w $arg0 | |
} | |
set script [list _restore_grab_window $w] | |
if {$release} { | |
after cancel $script | |
} else { | |
after 2000 $script | |
} | |
} | |
_grab {*}$args | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment