• # Le problème est dans la question

    Posté par . En réponse au message GTK. Distinguer simple et double clic sur drawing area.. Évalué à 8.

    En préliminaire, je voulais dire que je n'ai jamais utilisé les évènements GDK "bas niveau" donc c'est juste une réflexion sans expérience concrète.

    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 ;-)