URL: https://linuxfr.org/forums/programmationautre/posts/gtk-gestion-des-%C3%A9v%C3%A8nements-et-choses-bizarres Title: Gtk: Gestion des évènements et choses bizarres Authors: HSimpson Date: 2005年11月02日T23:38:25+01:00 Tags: Score: 0 J'ai un petit soucis gtk mais je ne sais pas si ça viens de moi ou pas. Je suis en train de developper un truc en Ruby/Gtk (mais la question est général et je vais faire en sorte d'utiliser les notations C) et j'ai besoin de faire une sorte de drag'n drop dans un GnomeCanvas. J'utilise une fonction `on_bp` de rappel qui se déclanche sur un _"button_press_event"_ qui va ensuite définir une fonction de rappel `on_mn` pour un _"motion_notify_event"_ qui est déconnecter avec un `signal_handler_disonnect` lors d'un _"button_release_event"_ (fonction `on_br`). Pour accélérer un peu le bouzin (j'ai un peu de calcul a faire après cahque mouvement de la souris) j'utilise une boucle du style `while(gtk_event_pending()) {gtk_main_iteration();}` dans ma fonction `on_mn` Bon jusque là pas de problème. Sauf que (ben oui, sinon je ne poserait pas ma question) quand je bouge trop vite ma souris (en faite le pad de mon ibook (je ne sais pas si ça peut jouer, j'ai pas de souris)) j'ai des signaux _"button_press_event"_ qui doivent se déclancher intempestivement puisque la fonction `on_bp` est appelée à partir de la boucle while dans `on_mn`. Résultat une pile d'appelle qui déborde. Si j'enlève la boucle while forcément c'est bon, mais c'est trop lon à calculer. Mais de toute façon il ne devrait pas y avoir de _"button_press_event"_ dans la boucle puisque je ne lâche pas mon pad. Pourquoi diable `on_bp` est elle appelée? Pour résoudre ce problème j'ai essayé de déconnecter les _"button_press_event"_ de `on_bp` en utilisant des `signal_handler_block` ou des `signal_handler_disconnet` dès l'entré dans on_bp (je les reconnecte / débloque dans `on_br`). Mais ça ne marche pas. J'ai toujours des appels à `on_bp` depuis la boucle while de `on_mn`. Est ce normal que cela ne marche pas? Pour finir une dernière question: Comment est ce que je pourrais faire pour remplacer ma boucle while par une vidange complète (ou du moins ce certains types de signaux (genre les _"button_press_event"_)) de la file des signaux sans que les fonctions de rappel soient appelé? Est ce que vous avez d'autres solutions à me proposer? J'ai pas l'impression que le D'nD soit la solution à mon problème. Me trompe-je? Est ce que vous avez compris mon problème ou c'était vraiment pas claire? D'oh!

AltStyle によって変換されたページ (->オリジナル) /