2010-11-02 151 views
2

有誰知道如何禁用GtkOptionMenu或GtkComboBox中的滾動鼠標?當你滾動瀏覽窗口並且指針通過這樣一個抓取焦點並改變值的小部件時,這很煩人!如何禁用GtkOptionMenu/GtkComboBox中的滾動鼠標滾輪

我看到offending code是後來添加的,但似乎沒有任何機制可以禁用此功能。

我在C工作,但在任何語言的幫助將不勝感激。

P.S.我應該提到我使用的是GTK 2.10,但需要與GTK 2.4兼容。

回答

0

你可以試試在窗口停用滾動事件:

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

2

這工作 - 我希望可以幫助其他人想要做同樣的事情:

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