Bonjour.
J'ai une drawingarea et je souhaite distinguer entre le simple clic gauche et le double clic gauche, afin d'avoir deux callbacks distincts ; les évènements ayant donc lieu lorsque le pointeur est dessus cette première. Problème, le double clic comporte une séquence de deux premiers "events" commun aux deux, c'est à dire :
Simple clic :
1. GDK_BUTTON_PRESS
2. GDK_BUTTON_RELEASE
Double clic :
1. GDK_BUTTON_PRESS
2. GDK_BUTTON_RELEASE
3. GDK_BUTTON_PRESS
4. GDK_2BUTTON_PRESS
5. GDK_BUTTON_RELEASE
Je dois donc écrire quelque chose qui intègre le facteur temps pour que le double clic n'appelle pas le gestionnaire du simple clic. Ça me surprend beaucoup, comment se fait-il qu'il n'y ait que les signaux suivant, si je lis bien la documentation ? :
"button-press-event"
"button-release-event"
Pourquoi ne pas avoir directement ajouté en plus des signaux qui seraient, disons, "simple-click-event" et "double-click-event", et qui géreraient d'emblée le "problème" ?
*) Doc : http://www.gtk.org/api/2.6/gdk/gdk-Event-Structures.html
Merci.
# C'est parce que tu ne cherches pas au bon endroit !
Posté par Johands . Évalué à 2.
[http://www.gtk.org/api/2.6/gdk/gdk-Events.html#GdkEventType] grep(GDK_2BUTTON_PRESS)
[^] # Re: C'est parce que tu ne cherches pas au bon endroit !
Posté par Johands . Évalué à 2.
Désolé, bonne chance quand même pour ton problème.
[^] # Re: C'est parce que tu ne cherches pas au bon endroit !
Posté par thor_tue . Évalué à 2.
# Le problème est dans la question
Posté par benoar . Évalué à 8.
Je dirais que tu te poses la mauvaises question. Déjà, si tu choisis une DrawingArea, sache que tu te place assez "bas-niveau", et qu'en conséquence tu as des évènements bas-niveau. Une chose importante à ce niveau-là est d'avoir les évènements dès qu'ils ont lieu. Et dans ce cas-là, quand ton widget reçoit un premier clic, GDK ne peut pas deviner s'il va "devenir" un double-clic ou si ça va rester un simple clic. Alors il te dit "simple clic". Si un deuxième apparaît dans les temps pour un double clic (temps dont tu ne dois pas avoir à te soucier, car c'est dépendant de plein de paramètres dont tu n'es pas maître) alors il te dit "double clic", en plus du premier. C'est déjà pas mal.
Mais qu'est-ce que tu dois faire, toi ? Et bien, réagir au simple clic par un callback "simple clic" et au double clic avec callback "double clic", même si celui-ci sera appelé en sus du premier. Comment font les autres applications d'après toi ? Par exemple, Nautilus, le navigateur de fichier, au simple clic, il sélectionne le fichier. Si c'est un double clic, il aura sélectionné le fichier, puis l'ouvrira. Le premier clic (et le callback associé) n'a donc pas d'influence sur l'action du double-clic.
Réfléchis à ce que tu devrais faire si tu voulais appeler un des deux callback (simple ou double) de manière exclusive : tu devrais, à chaque clic, attendre le temps du double clic (configuré très long chez certains utilisateurs lents) avant de te décider de faire un simple ou double clic, à chaque fois ! Ca serait intenable niveau réactivité.
Bref, réfléchis à l'ergonomie de ton application, de manière à ce qu'un simple clic n'entrave pas l'action d'un double-clic.
PS: en général, quand on ne trouve pas de réponse à un problème pas récent et "évident", c'est qu'on a mal posé la question ;-)
# Un feedback....
Posté par thor_tue . Évalué à 2.
http://msdn.microsoft.com/en-us/library/ms171543(v=VS.100).a(...)
Il y a bien des situations dans lesquelles on peut souhaiter aiguiller de manière exclusive entre le simple clic et le double clic, sans que le l'action du double clic soit un prolongement de celle du simple clic. Et on a besoin du facteur temps pour discriminer.
[^] # Re: Un feedback....
Posté par Johands . Évalué à 2.
Ah et sinon, pour ne pas frustrer une minorité de visiteurs qui pensent que ce site est un repaire de gens aigris : "MSçapue y'a même pas d'exemple en F#" !
[^] # Re: Un feedback....
Posté par NeoX . Évalué à 3.
simple/double clique
en fonction des vitesses que la personne aura reglé en preference generale
perso j'ai le double click rapide
le grand pere à un double clique plutot lent
et pourtant on va surement utiliser le meme logiciel
ce n'est pas au logiciel final (ta GTK-DrawingArea) d'interpreter ca en fonction d'un timer
[^] # Re: Un feedback....
Posté par benoar . Évalué à 2.
Mais bon, je pense qu'il y a quand même un problème dans ce que tu veux faire (ça c'est la deuxième réponse à un problème insoluble : « Dis moi ce dont tu as besoin, et je t'expliquerai comment t'en passer » ;-)).
D'abord, pour faire une action vraiment différente, je pense que les associer au même bouton mais avec juste un timing différent (simple clic versus double clic) n'est pas très logique. Dans le temps (ça devient plus rare aujourd'hui) les applications Unix utilisaient vraiment tous les boutons de la souris (enfin, dans un X standard c'est trois boutons) pour maximiser le nombre d'actions possibles, et dépendaient beaucoup moins du double clic. Je pense à xfig par exemple.
Ensuite, le double clic est vu comme une action assez inergonomique par les débutants. Apple par exemple a toujours essayé de limiter les double clic (sans parler de la limitation de nombre de boutons) et préfère passer par d'autres moyens quand c'est possible. Ma mère, qui ne doit pas être la seule, ne comprend pas la différence entre un simple et double clic. Intuitivement, quand tu n'es pas habitué à l'informatique, ce n'est pas logique que l'action d'un bouton dépende du temps que tu appuies dessus. Réfléchis-y.
Enfin, comme je n'aime pas jouer aux devinettes, tu pourrais nous en dire plus sur ton « cas spécial » qui nécessite absolument ce genre de callback ? Ça nous éviterait de trop nous perdre en conjectures.
Dans le cas (simple supposition) où tu programmes une sorte de framework, je te conseillerais de garder la même philosophie que GDK : signaler le simple _et_ le double clic, même si le second est en sus du premier. Et de laisser à « l'utilisateur final » le soin de gérer comme il veut. Car essayer de répondre à un problème sans connaître clairement sa destination, c'est à coup sûr se tromper dans une bonne partie des cas.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.