Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# [résolu] Désactiver des raccourcis clavier : Return, Ctrl+Tab, ...

Envoyé par : Kaze

Date : 29/06/2006 17:18

Bonjour,

dans le cadre de mes extensions pour Nvu, je voudrais désactiver certaines commandes clavier, notamment :

  • dans certaines boites de dialogue, je voudrais que la touche "Entrée" ne valide pas la boite ;
  • dans la fenêtre principale, je voudrais que les Ctrl+Tab et Ctrl+Shift+Tab ne changent pas d'onglet (ceci, afin de contourner un des nombreux bugs de Nvu...)

J'ai essayé pas mal de trucs plus ou moins malins dans les pages XUL, du genre :

 <keyset>
   <key keycode="VK_RETURN" oncommand="..."/>
 </keyset>

ou

 <keyset>
   <key keycode="VK_TAB" modifiers="control" oncommand="..."/>
   <key keycode="VK_TAB" modifiers="control,shift" oncommand="..."/>
 </keyset>

mais rien n'y fait : le code passé dans l'attribut "oncommand" est exécuté en plus des actions "de base" (validation du dialogue / changement d'onglet).

Y a-t'il un moyen pour "piéger" ces raccourcis clavier ?

Merci d'avance !

# Re: Désactiver des raccourcis clavier : Return, Ctrl+Tab, ...

Envoyé par : papy

Date : 29/06/2006 17:31

A mon avis tu es sur la bonne voie, tu dois traiter les évènements toi même avec un corps vide (ou autre chose), mais il faut surtout empêcher l'évènement de continuer à se propager et de déclencher les actions par défaut. Regarde la référence de l'objet event, les méthode preventDefault et stopPropagation te seront sans doute utiles. A voir aussi pendant quelle phase tu peux bloquer cette propagation, cf le tutoriel principale sur ce site (http://xulfr.org/xulplanet/xultu/adveven(..)) ou sur xulplanet.

# Re: Désactiver des raccourcis clavier : Return, Ctrl+Tab, ...

Envoyé par : Kaze

Date : 29/06/2006 18:12

Merci pour cette réponse. Effectivement, j'ai pu piéger les raccourcis clavier pour changer d'onglet avec trois lignes de code :

window.addEventListener("keypress", noTabSwitching, true);
function noTabSwitching(event) {
  if (event.ctrlKey)
    if (event.keyCode == KeyEvent.DOM_VK_TAB || 
        event.keyCode == KeyEvent.DOM_VK_PAGE_UP || event.keyCode == KeyEvent.DOM_VK_PAGE_DOWN)
      event.stopPropagation();
}

Nickel-chrome ! J'ai pas encore bien compris l'usage de preventDefault mais je vais regarder ça.

Merci encore. :-)

# Re: [résolu] Désactiver des raccourcis clavier : Return, Ctrl+Tab, ...

Envoyé par : thefab

Date : 29/06/2006 20:03

l'usage de preventDefault

stopPropagation() sert à supprimer le passage de l'évènement aux éléments parents alors que preventDefault sert à supprimer l'action associée à l'élément en cours. Exemple avec <p><a href="..."></a></p> stopPropagation() sur le lien va empêcher le paragraphe de recevoir l'évènement click mais va ouvrir le lien, alors qu'avec preventDefault() le lien ne devrait être ouvert.

Je ne suis pas du tout sur de ce que je viens de dire (de mémoire) à tester, donc...

Fabrice

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.