我刚将一个C程序从GTK2移植到GTK3。该程序使用GtkDrawingArea
,使用鼠标滚轮。切换到GTK3后,我无法正常检测滚轮使用情况。以下是我的所作所为:
GTK2(2.24.10)
GtkDrawingArea
的事件掩码设置为GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_LEAVE_NOTIFY_MASK
。scroll-event
的{{1}}。GtkDrawingArea
的属性direction
为GdkEventScroll
或GDK_SCROLL_UP
。GTK3(3.4.2)
GDK_SCROLL_DOWN
的事件掩码中加入了GDK_SMOOTH_SCROLL_MASK
。没有它,我的信号处理程序永远不会被调用。GtkDrawingArea
的属性direction
为GdkEventScroll
。致电GDK_SCROLL_SMOOTH
,gdk_event_get_scroll_deltas()
和delta_x
始终为0。除delta_y
之外,我从未见过任何其他指示。虽然我的鼠标本身只提供“离散”按钮4/5事件,但我可以接收平滑滚动事件,但如何确定滚动事件的方向?
BTW:我在amd64上使用Ubuntu 12.04。
答案 0 :(得分:3)
Gtk3中有一个bug与"滚动事件"相关联。信号。首先,在回调中,您应该使用GdkEventScroll结构的delta_x和delta_y成员。其次,第一次滚动鼠标时,这些成员都将为零(错误!)。随后的滚动将为您提供正确的值。第三,不幸的是,似乎这个bug不会被修复。