Как отключить прокрутку колеса мыши в GtkOptionMenu/GtkComboBox

Кто-нибудь знает, как отключить прокрутку мыши в GtkOptionMenu или GtkComboBox? Это раздражает, когда вы прокручиваете окно, и указатель проходит по такому виджету, который захватывает фокус и меняет значение!

Я вижу, что нарушающий код был добавлен в то время как назад, но, похоже, нет никакого механизма для отключения этой функции.

Я работаю на C, но помощь на любом языке будет очень признательна.

P.S. Я должен упомянуть, что я использую GTK 2.10, но мне нужна совместимость с GTK 2.4.


person Scott Milne    schedule 02.11.2010    source источник


Ответы (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);
person Scott Milne    schedule 13.01.2011

Вы можете попробовать отключить события прокрутки в виджете:

gtk_widget_set_events(GTK_WIDGET(box), gtk_widget_get_events(GTK_WIDGET(box)) & (GDK_ALL_EVENTS_MASK - GDK_SCROLL_MASK));
person ptomato    schedule 02.11.2010
comment
Спасибо за ответ томат. Возможно, этого и следовало ожидать, но кажется, что gtk_widget_get_events всегда возвращает 0. Я пробовал устанавливать события без операции И (поскольку это тоже всегда дает 0) для GtkOptionMenu и его элементов «меню» и «кнопка», но безрезультатно :( - person Scott Milne; 02.11.2010
comment
Нет, и gtk_widget_get_events() также возвращает 0. - person Scott Milne; 02.11.2010
comment
Помогает против прокрутки SpinButton, но, к сожалению, не с ComboBox. - person yktoo; 11.07.2018