如何禁用GtkOptionMenu/GtkComboBox中的滚动鼠标滚轮

问题描述:

有谁知道如何禁用GtkOptionMenu或GtkComboBox中的滚动鼠标?当你滚动浏览窗口并且指针通过这样一个抓取焦点并改变值的小部件时,这很烦人!如何禁用GtkOptionMenu/GtkComboBox中的滚动鼠标滚轮

我看到offending code是后来添加的,但似乎没有任何机制可以禁用此功能。

我在C工作,但在任何语言的帮助将不胜感激。

P.S.我应该提到我使用的是GTK 2.10,但需要与GTK 2.4兼容。

你可以试试在窗口停用滚动事件:

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

感谢您的答复ptomato。也许这是可以预料的,但gtk_widget_get_events似乎总是返回0.我尝试设置事件没有ANDing(因为它总是给0)为GtkOptionMenu和它的菜单和按钮成员无效:( – 2010-11-02 14:56:36

+0

@Scott Milne,它是否适用于GtkComboBox? – ptomato 2010-11-02 15:37:16

+0

不,gtk_widget_get_events()也返回0。 – 2010-11-02 15:59:03

这工作 - 我希望可以帮助其他人想要做同样的事情:

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