IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SWT/JFace Java Discussion :

[SWT] setAccelerator avec Ctrl+Espace ne fonctionne pas


Sujet :

SWT/JFace Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 187
    Points : 433
    Points
    433
    Par défaut [SWT] setAccelerator avec Ctrl+Espace ne fonctionne pas
    Bonjour à tous,

    Je développe une application utilisant SWT et j'ai un problème avec l'accélérateur Ctrl+Espace associé à un MenuItem :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Déclenche l'évènement de sélection lors de Ctrl+A (normal)
    item.setAccelerator (SWT.MOD1 + 'A');
    // Déclenche l'évènement de sélection lors de "Espace",
    // quelque soit la touche Ctrl, alt ou shift appuyée
    item.setAccelerator (SWT.MOD1 + ' ');
    Voulant isoler le problème, j'ai essayé avec le snippet correspondant de dev.eclipse.org en remplacant le 'A' par un ' ' : même phénomène...

    Quelqu'un aurait-il une idée, s'il vous plait?

    Bien cordialement.

  2. #2
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 340
    Points : 379
    Points
    379
    Par défaut
    essaye avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    item.setAccelerator(SWT.CTRL | ' ');

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 187
    Points : 433
    Points
    433
    Par défaut
    J'ai essayé avec :

    SWT.CTRL : même phénomère
    SWT.ALT : idem
    juste ' ' : idem
    SWT.SHIFT : déclenche le menu système de la fenêtre, mais ça n'avance à rien

    Edit :
    SWT.CTRL + SWT.ALT : fonctionne correctement
    SWT.ALT + SWT.SHIFT : fonctionne correctement
    SWT.CTRL + SWT.SHIFT : rien n'est jamais déclenché


    C'est comme si l'utilisation d'espace désactivant complètement l'influence des modifiers.

    Franchement, c'est à n'y rien comprendre.

    Edit :
    Voici des choses que j'ai pu trouver en débuguant SWT :
    Il associe correctement l'accélérateur au MenuItem :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OS.gtk_widget_add_accelerator (handle, OS.activate, accelGroup, keysym, mask, OS.GTK_ACCEL_VISIBLE);
    avec les valeurs keysym = 32 (' ') et mask = 4 (OS.GDK_CONTROL_MASK). La même commande avec keysym variant est appelée si je passe un autre caractère que ' '.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 187
    Points : 433
    Points
    433
    Par défaut
    Bon, j'ai trouvé un correctif. Particulièrement moche et sale, mais correctif tout de même.

    L'idée, c'est de vérifier que le masque (ctrl, alt, shift, cmd) de l'évènement est égal au masque du MenuItem l'ayant déclenché. Si ce n'est pas le cas, je transmet un évènement ' ' au contrôle qui a le focus.

    Cela fonctionne avec les contrôles java, mais pas avec les natifs (ce qui est normal).

    Contenu de la capture de la sélection du MenuItem :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    @Override
    public void widgetSelected(SelectionEvent e) {
    	MenuItem item = ((MenuItem)e.widget);
    	int accel = item.getAccelerator();
     
    	if ((accel & SWT.MODIFIER_MASK) == e.stateMask) {
    		System.out.println ("Action du menu !!!");
     
    	} else if ((accel & ' ') != 0) {
    		if (display.getFocusControl() != null) {
    			Event transmission = new Event();
    			transmission.widget = display.getFocusControl();
    			transmission.type = SWT.KeyDown;
    			transmission.keyCode = ' ';
    			transmission.character = ' ';
    			display.getFocusControl().notifyListeners(SWT.KeyDown, transmission);
    		}
    	}
    }
    Si cela ne dérange personne, je vais tout de même attendre un peu avant de tagger résolu

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 340
    Points : 379
    Points
    379
    Par défaut
    C'est vrai que c'est un peu moche.
    J'ai utilisé le code que je t'ai donné avec autre chose qu'espace et cela fonctionne parfaitement, il doit y avoir un problème qui vient du fait que espace peut être utilisé pour sélectionner le controle qui a le focus (comme entrée).
    Je ne vois pas bien comment faire autrement, tu ne peux pas utiliser un autre accélérateur qu'espace ?

    Edit : je viens de faire le test avec quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    item.setAccelerator(SWT.CTRL | ' '); // item est un MenuItem
    Tout marche parfaitement...
    Je suis sur Ubuntu 8.04 et j'utilise SWT en version 3.4

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 187
    Points : 433
    Points
    433
    Par défaut
    Ubuntu 9.04 et SWT 3.4 pour ma part : ça doit venir de mon système...

    Je vais essayer de désactiver les services ayant un rapport quelconque avec le clavier, voir ce que ça donne.

    Concernant le focus, le bug se produit même si mon écran est vide.

    Des nouvelles ce soir.

    Edit :
    J'ai pas trouvé... et je dois avouer que j'en ai un peu marre. Merci pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Atteindre une fonction avec CTRL + Clic ne fonctionne pas
    Par DaYonyon dans le forum Eclipse PHP
    Réponses: 0
    Dernier message: 18/03/2010, 14h40
  2. CTRL + espace ne fonctionne pas dans Ganymede 3.4.2
    Par sal.gass dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 28/12/2009, 10h17
  3. Formulaire avec pièce jointe ne fonctionne pas
    Par Icesik dans le forum Langage
    Réponses: 6
    Dernier message: 08/02/2007, 14h55
  4. simple select avec date, mais ne fonctionne pas
    Par ralcoc dans le forum Oracle
    Réponses: 5
    Dernier message: 03/07/2006, 22h59
  5. Erreur avec le SaveDialog!Ne fonctionne pas!
    Par ghan77 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 25/01/2006, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo