grab

 

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 descendant de la fenêtre de capture peut 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 relâchement 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 relâchée quand la capture est relâché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. Il 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.


Traduit par Michel Salvagniac 2002-2003

Copyright © 2003 - Le Wiki Tcl/Tk Francophone.


Catégorie Manuel Tcl/Tk