1grab(n)                      Tk Built-In Commands                      grab(n)
2
3
4
5______________________________________________________________________________
6

NAME

8       grab - Confine pointer and keyboard events to a window sub-tree
9

SYNOPSIS

11       grab ?-global? window
12
13       grab option ?arg arg ...?
14______________________________________________________________________________
15

DESCRIPTION

17       This command implements simple pointer and keyboard grabs for Tk.  Tk's
18       grabs are different than the grabs described in the Xlib documentation.
19       When  a  grab  is set for a particular window, Tk restricts all pointer
20       events to the grab window and its descendants in Tk's window hierarchy.
21       Whenever  the  pointer is within the grab window's subtree, the pointer
22       will behave exactly the same as if there had been no grab  at  all  and
23       all events will be reported in the normal fashion.  When the pointer is
24       outside window's tree, button presses and  releases  and  mouse  motion
25       events  are reported to window, and window entry and window exit events
26       are ignored. The grab subtree “owns” the pointer: windows  outside  the
27       grab subtree will be visible on the screen but they will be insensitive
28       until the grab is released.  The tree of windows  underneath  the  grab
29       window  can  include top-level windows, in which case all of those top-
30       level windows and their descendants  will  continue  to  receive  mouse
31       events during the grab.
32
33       Two  forms  of grabs are possible:  local and global.  A local grab af‐
34       fects only the grabbing application:  events will be reported to  other
35       applications as if the grab had never occurred.  Grabs are local by de‐
36       fault.  A global grab locks out all applications on the screen, so that
37       only the given subtree of the grabbing application will be sensitive to
38       pointer events (mouse button presses, mouse  button  releases,  pointer
39       motions,  window  entries,  and window exits).  During global grabs the
40       window manager will not receive pointer events either.
41
42       During local grabs, keyboard events (key presses and key releases)  are
43       delivered  as usual:  the window manager controls which application re‐
44       ceives keyboard events, and if they are sent to any window in the grab‐
45       bing  application then they are redirected to the focus window.  During
46       a global grab Tk grabs the keyboard so that all keyboard events are al‐
47       ways sent to the grabbing application.  The focus command is still used
48       to determine which window in  the  application  receives  the  keyboard
49       events.  The keyboard grab is released when the grab is released.
50
51       On  macOS  a global grab affects all windows created by one Tk process.
52       No window in that process other than the grab window can  even  be  fo‐
53       cused,  hence  no  other  window receives key or mouse events.  A local
54       grab on macOS affects all windows created by one Tcl  interpreter.   It
55       is  possible  to  focus any window belonging to the Tk process during a
56       local grab but the grab window is the only window created by its inter‐
57       preter  which  receives  key or mouse events.  Windows belonging to the
58       same process but created by different interpreters continue to  receive
59       key and mouse events normally.
60
61       Grabs  apply  to particular displays.  If an application has windows on
62       multiple displays then it can establish a separate grab  on  each  dis‐
63       play.   The  grab  on  a particular display affects only the windows on
64       that display.  It is possible for different applications  on  a  single
65       display  to have simultaneous local grabs, but only one application can
66       have a global grab on a given display at once.
67
68       The grab command can take any of the following forms:
69
70       grab ?-global? window
71              Same as grab set, described below.
72
73       grab current ?window?
74              If window is specified, returns the name  of  the  current  grab
75              window  in  this  application  for window's display, or an empty
76              string if there is no such window.  If window  is  omitted,  the
77              command  returns  a  list  whose elements are all of the windows
78              grabbed by this application for all displays, or an empty string
79              if the application has no grabs.
80
81       grab release window
82              Releases  the  grab  on  window  if there is one, otherwise does
83              nothing.  Returns an empty string.
84
85       grab set ?-global? window
86              Sets a grab on window.  If -global is specified then the grab is
87              global,  otherwise it is local.  If a grab was already in effect
88              for this application on window's display then  it  is  automati‐
89              cally released.  If there is already a grab on window and it has
90              the same global/local form as the requested grab, then the  com‐
91              mand does nothing.  Returns an empty string.
92
93       grab status window
94              Returns  none  if no grab is currently set on window, local if a
95              local grab is set on window, and global if a global grab is set.
96

WARNING

98       It is very easy to use global grabs to render a display completely  un‐
99       usable  (e.g.  by  setting a grab on a widget which does not respond to
100       events and not providing any mechanism for releasing the  grab).   Take
101       extreme care when using them!
102

BUGS

104       It  took  an incredibly complex and gross implementation to produce the
105       simple grab effect described above.  Given the current  implementation,
106       it  is not safe for applications to use the Xlib grab facilities at all
107       except through the Tk grab procedures.  If applications try to  manipu‐
108       late X's grab mechanisms directly, things will probably break.
109
110       If a single process is managing several different Tk applications, only
111       one of those applications can have a local grab for a given display  at
112       any  given  time.  If the applications are in different processes, this
113       restriction does not exist.
114

EXAMPLE

116       Set a grab so that only one button may be clicked out of a group.   The
117       other  buttons are unresponsive to the mouse until the middle button is
118       clicked.
119              pack [button .b1 -text "Click me! #1" -command {destroy .b1}]
120              pack [button .b2 -text "Click me! #2" -command {destroy .b2}]
121              pack [button .b3 -text "Click me! #3" -command {destroy .b3}]
122              grab .b2
123

SEE ALSO

125       busy(n)
126

KEYWORDS

128       grab, keyboard events, pointer events, window
129
130
131
132Tk                                                                     grab(n)
Impressum