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

4
有人知道如何在GtkOptionMenu或GtkComboBox中禁用鼠标滚动吗?当您在窗口中滚动时,指针经过这样的小部件并抓取焦点并更改值时,这很烦人!我看到有问题的代码是一段时间前添加的,但似乎没有任何机制可以禁用此功能。我正在使用C语言编程,但对任何语言的帮助都将不胜感激。顺便说一下,我可能需要提到我正在使用GTK 2.10,但需要与GTK 2.4兼容。
2个回答

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

1
您可以尝试在小部件上禁用滚动事件:
gtk_widget_set_events(GTK_WIDGET(box), gtk_widget_get_events(GTK_WIDGET(box)) & (GDK_ALL_EVENTS_MASK - GDK_SCROLL_MASK));

谢谢您的回复,ptomato。也许这是可以预料的,但是gtk_widget_get_events似乎总是返回0。我已经尝试过为GtkOptionMenu及其'menu'和'button'成员设置事件,而不是使用AND运算(因为那样也总是返回0),但是没有成功:( - Scott Milne
不,gtk_widget_get_events() 也返回0。 - Scott Milne
可以帮助滚动 SpinButton,但不幸的是无法解决 ComboBox 的问题。 - yktoo
这对于GtkComboBox来说就像魔法一样有效:https://mail.gnome.org/archives/gtk-app-devel-list/2016-May/msg00066.html - edscott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接