Control-Clic

Philippe49Philippe49 Membre
août 2008 modifié dans API AppKit #1
Le control-clic devrait bien normalement déclencher la méthode -(void) rightMouseDown:(NSEvent*)event ? Dans mon appli, cela ne le fait pas, alors que dans les applis traditionnelles c'est sans problème. J'ai pourtant supprimer l'option du trackpad (Mac Book Pro)

Comprends pas ?   >:(

Réponses

  • août 2008 modifié #2
    Et si tu utilises une souris 2 boutons, ça répond bien au clique droit ?

    Sinon tu peux tenter :
    <br />- (void)mouseDown:(NSEvent*)theEvent<br />{<br />&nbsp; &nbsp; if([theEvent type]==NSRightMouseDown)<br />&nbsp; &nbsp; &nbsp; &nbsp; NSLog(@&quot;YEAHHHHHH&quot;);<br />}<br />
    
  • Philippe49Philippe49 Membre
    août 2008 modifié #3
    Oui cela marche bien avec la souris, et avec le trackpad à  deux doigts. Il n'y a qu'avec Control-Clic que cela bug ?

    dans 1218964540:

    Sinon tu peux tenter :
    <br />- (void)mouseDown:(NSEvent*)theEvent<br />{<br />&nbsp; &nbsp; if([theEvent type]==NSRightMouseDown)<br />&nbsp; &nbsp; &nbsp; &nbsp; NSLog(@&quot;YEAHHHHHH&quot;);<br />}<br />
    


    ou par modifierFlags ... mais ce n'est pas normal

  • 12:41 modifié #4
    C'est bien ce que je pensais. Sinon oui tu peux faire en sorte de récupérer les touches enfoncés non ? :p Donc si j'ai un ctrl+click -> clique droit
  • Philippe49Philippe49 Membre
    12:41 modifié #5
    Cela ne répond pas à  ma question : Au point de vue des événements , le control-clic est sensé être équivalent au clic droit, et devrait normalement être traité en amont de mon application.
    Je ne devrais donc pas avoir à  reprogrammer cette fonctionnalité dans mon Appli , ou alors, il faut que tous les développeurs voulant utiliser rightMouseDown() procèdent à  ce renvoi. Cela semble plutôt absurde !

    - (void)mouseDown:(NSEvent*)theEvent<br />{<br />&nbsp; &nbsp; if([theEvent type]==NSRightMouseDown){<br />&nbsp; &nbsp; &nbsp;  [self rightMouseDown:theEvent];<br />&nbsp; &nbsp; &nbsp;  return;<br />&nbsp; &nbsp; }<br />}
    


    ou

    - (void)mouseDown:(NSEvent*)theEvent<br />{<br />&nbsp; &nbsp; NSUInteger flags=[theEvent modifierFlags];<br />&nbsp; &nbsp; if(flags &amp; NSControlKeyMask){<br />&nbsp; &nbsp; &nbsp;  [self rightMouseDown:theEvent];<br />&nbsp; &nbsp; &nbsp;  return;<br />&nbsp; &nbsp; }<br />}
    


  • 12:41 modifié #6
    Et pourtant... tu sous classe bien rightMouseDown, c'est que tu as besoin de changer quelque chose. Alors rajouter en plus la gestion du CRTL+leftMouse.. c'est pas des masses à  faire  :adios!:
    Enfin j'ai beau chercher depuis tout à  l'heure je trouve pas d'alternative.
    D'un côté c'est logique que le CTRL+leftMouse n'appelle pas rightMouseDown, mais d'un autre c'est vrai que ça semble illogique. En fait je pense que justement le fait de ne pas appeler rightMouseDown donne plus de liberté, et tant mieux.
  • Philippe49Philippe49 Membre
    12:41 modifié #7
    dans 1218971782:

    mais d'un autre c'est vrai que ça semble illogique.

    Moi ça me semble illogique que le "taper avec deux doigts sur le Trackpad" ne fasse pas la même chose que le "Control+taper avec un doigt sur le trackpad".
    Au point que je suis plus prêt à  accepter une erreur de ma part que cet état de fait.

    Je vais réeesayer avec une application plus simple, après tout c'est peut-être mon appli (assez lourde) qui interfère.
  • 12:41 modifié #8
    dans 1218977287:

    dans 1218971782:

    mais d'un autre c'est vrai que ça semble illogique.

    Moi ça me semble illogique que le "taper avec deux doigts sur le Trackpad" ne fasse pas la même chose que le "Control+taper avec un doigt sur le trackpad".
    Au point que je suis plus prêt à  accepter une erreur de ma part que cet état de fait.

    Je vais réeesayer avec une application plus simple, après tout c'est peut-être mon appli (assez lourde) qui interfère.


    Non justement ça n'est pas ton application car j'ai testé en sous-classant une simple NSView et en implémentant rightMouseDown, ça répond bien au right click  mais pas au ctrl+click. Donc ne t'embêtes pas plus :D Quand j'ai dis que j'ai cherché, je l'ai vraiment fait  :p

    Mais c'est dingue quand même, y'a bien quelqu'un qui a une réponse claire ?  :o
  • Philippe49Philippe49 Membre
    12:41 modifié #9
    Bon ben on conclut donc avec :

    Tous les développeurs voulant que Control+Clic appelle rightMouseDown() doivent procéder à  un renvoi dans mouseDown.


    sauf avis contradictoire à  venir ...


    Merci EagleLouk
  • CéroceCéroce Membre, Modérateur
    12:41 modifié #10
    La position d'Apple est sage, je m'explique.

    D'après ce que je comprends, l'affichage du menu contextuel (par contrôle-clic) est simulé par le bouton droit quand on appelle la méthode -[NSView menuForEvent:], mais ça ne signifie pas une équivalence entre les deux. ça peut être utile de faire la distinction, par exemple pour un logiciel de 3D qui nécessite vraiment une souris à  3 boutons; dans ce cas, un contrôle-clic droit et un contrôle-clic gauche peuvent réaliser des opérations différentes.

    Remarque: un contrôle clic-droit fait AUSSI apparaà®tre le menu contextuel.
  • 12:41 modifié #11
    Merci pour les explications Céroce, c'est donc bien ce que je pensais qu'à  la liberté niveau développement.
Connectez-vous ou Inscrivez-vous pour répondre.