2010-11-02 34 views
2

Est-ce que quelqu'un sait comment désactiver le défilement de la souris dans un GtkOptionMenu ou un GtkComboBox? C'est ennuyeux quand vous faites défiler une fenêtre et que le pointeur passe sur un tel widget qui saisit le focus et change de valeur!Comment désactiver le défilement de la molette de la souris dans GtkOptionMenu/GtkComboBox

Je vois que le offending code a été ajouté il y a quelque temps, mais il ne semble pas y avoir de mécanisme en place pour désactiver cette fonctionnalité.

Je travaille en C, mais une aide dans n'importe quelle langue serait très appréciée.

P.S. Je devrais peut-être mentionner que j'utilise GTK 2.10, mais j'ai besoin de compatibilité avec GTK 2.4.

Répondre

0

Vous pouvez essayer de désactiver les événements de défilement sur le widget:

gtk_widget_set_events(GTK_WIDGET(box), gtk_widget_get_events(GTK_WIDGET(box)) & (GDK_ALL_EVENTS_MASK - GDK_SCROLL_MASK)); 
+0

Merci pour le ptomato de réponse. Peut-être que cela est à prévoir, mais gtk_widget_get_events semble toujours retourner 0. J'ai essayé de définir des événements sans ANDing (puisque cela donne toujours aussi 0) pour le GtkOptionMenu et ses membres 'menu' et 'bouton' en vain :( –

+0

@Scott Milne, ça marche pour le GtkComboBox? – ptomato

+0

Non, et gtk_widget_get_events() renvoie également 0. –

2

Cela fonctionne - je l'espère pourrait aider quelqu'un d'autre qui veut faire la même chose:

/* Create new closure (callback) to replace class default */ 
GClosure * new_closure = 
    g_cclosure_new_object(G_CALLBACK(handler), /* my event handler */ 
         G_OBJECT(gobject) /* use any static GObject to keep closure alive */ 
         ); 

GType type = gtk_option_menu_get_type(); 

/* Get signal_id for "scroll_event" */ 
guint signal_id = g_signal_lookup("scroll_event", type); 

/* Override default closure for scroll_event signal */ 
g_signal_override_class_closure(signal_id, type, new_closure);