2010-11-02 2 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, и это «меню» и «кнопка» безрезультатно :( –

+0

@Scott Milne, работает ли он для GtkComboBox? – ptomato

+0

Нет, и gtk_widget_get_events() также возвращает 0. –

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