  NOM
    grab - Confine les évènements souris et clavier dans une fenêtre
  SYNTAXE
    grab ?-global? fenêtre
    grab option ?arg arg ...?
  DESCRIPTION
    grab ?-global? fenêtre
    grab current ?fenêtre?
    grab release fenêtre
    grab set ?-global? fenêtre
    grab status fenêtre
  BUGS
  MOTS-CLES

### NOM

grab - Confine les évènements souris et clavier dans une fenêtre

### SYNTAXE

grab ?-global? fenêtre
grab option ?arg arg ...?

### DESCRIPTION

cette commande implémente des captures clavier et souris simples en Tk. Les captures Tk sont différentes des captures X décrites dans la documentation Xlib. Quand une capture est positionnée pour une fenêtre particulière, Tk restreint tous les évènements souris à cette fenêtre et ses descendants dans la hiérarchie de fenêtres Tk. Tant que le pointeur est à l'intérieur du sous arbre de la fenêtre, le pointeur se comportera exactement de même que s'il n'y avait pas de capture et tous les évènements seront traités normalement. Quand le pointeur est en dehors de l'arbre de fenêtre, les clics et déplacements de souris sont transmis à fenêtre, et les évènements d'entrée et de sortie de la fenêtre sont ignorés. Le sous-arbre de capture "possède" le pointeur: les fenêtres en dehors du sous-arbre seront visibles à l'écran mais seront insensibles jusqu'à ce que la capture soit libérée. L'arbre des fenêtres déscedant de la fenêtre de capture peurt inclure des fenêtres top-level, auquel cas ces fenêtres et leurs descendants continueront à recevoir les évènements souris pendant la capture.

Deux formes de capture sont possibles: locale et globale. Une capture locale concerne seulement l'application courante: les évènements seront transmis aux autres applications comme si la capture n'existait pas. Les captures sont locales par défaut. Une capture globale bloque toutes les applications à l'écran, ainsi seul le sous-arbre de l'application capturante sera sensible aux évènements pointeur (clics de souris, déplacements de pointeur, entrées et sortie dans les fenêtres). Pendant les captures globales le gestionnaire de fenêtres ne reçoit pas les évènements pointeur.

Pendant les captures locales, les évènements clavier (appui et relachement de touches) sont répercutés comme d'habitude: le gestionnaire de fenêtres contrôle quelle application reçoit les évènements clavier, et s'ils sont envoyés à une fenêtre de l'application capturante alors ils sont redirigés vers la fenêtre qui a le focus. Pendant une capture globale Tk capture le clavier ainsi tous les évènements clavier sont toujours envoyés à l'application capturante. La commande focus est toujours utilisée pour déterminer quelle fenêtre de l'application reçoit les évènements clavier. La capture clavier est relachée quand la capture est relachée.

Les captures s'appliquent à des écrans particuliers. Si une application a des fenêtres sur plusieurs écrans alors elle peut établir des captures séparées sur chaque écran. La capture sur un écran particulier affecte seulement les fenêtres de cet écran. It est possible pour différentes applications sur un seul écran d'avoir simultanément des captures locales, mais seulement une application peut avoir une capture globale sur un écran donné à la fois.

La commande grab peut prendre n'importe quelle des formes suivantes:

grab ?-global? fenêtre
  Identique à grab set, décrite ci-dessous.

grab current ?fenêtre?
  Si fenêtre est spécifiée, retourne le nom de la fenêtre de capture courante de cette application pour l'écran de fenêtre, ou une chaîne vide s'il n'y a pas de fenêtre dans ce cas. Si fenêtre est omise, la commande retourne une liste dont les éléments sont toutes les fenêtres capturées par cette application pour tous les écrans, ou une chaîne vide si l'application n'a pas de captures.

grab release fenêtre
  Libère la capture de fenêtre s'il y en a une, autrement ne fait rien. Retourne une chaîne vide.

grab set ?-global? fenêtre
  Installe une capture pour fenêtre. Si -global est spécifié alors la capture est globale, autrement elle est locale. Si une capture était déjà effective pour cette application sur l'écran de fenêtre alors elle est automatiquement libérée. S'il y a déjà une capture pour fenêtre et qu'elle a la même forme globale/locale que la capture demandée, alors la commande ne fait rien. Retourne une chaîne vide.

grab status fenêtre
  Retourne none si aucune capture n'est actuellement en cours pour fenêtre, local si une capture locale est en cours pour fenêtre, et global dans le cas d'une capture globale.

### BUGS

Une implémentation incroyablement complexe et importante a été nécessaire pour produire le simple effet de capture décrit ci-dessus. Vu l'implémentation courante, il n'est pas sùr du tout pour les applications d'utiliser les facilités de capture Xlib excepté par l'intermédiaire des fonctions de capture Tk. Si les applications tentent de manipuler les mécanismes de capture X directement, il y a des risques de plantages.

Si un seul process gère plusieurs applications Tk différentes, seulement une de ces applications peut avoir une capture locale pour un écran donné à un instant donné. Si les applications sont dans des processus différents, cette restriction n'existe pas.

### MOTS-CLES

grab, keyboard events, pointer events, fenêtre

    Copyright © 1992 The Regents of the University of California.
    Copyright © 1994-1996 Sun Microsystems, Inc.
    Copyright © 1995-1997 Roger E. Critchlow Jr.

Copyright © 2003 - Le Portail Tcl/Tk Francophone.