Skip to content

Instantly share code, notes, and snippets.

@yyamasak
Last active September 10, 2021 13:14
Show Gist options
  • Save yyamasak/0899f02eeda804c6591154125a6f854a to your computer and use it in GitHub Desktop.
Save yyamasak/0899f02eeda804c6591154125a6f854a to your computer and use it in GitHub Desktop.
Rewrite Tcl/Tk grab command to continuously restore grabbed Tk toplevel window
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