我刚将一个C程序从GTK2移植到GTK3。该程序使用其上使用鼠标滚轮的GtkDrawingArea
。切换到GTK3后,我无法正确检测到滚轮的使用情况。下面是我做的,并得到:GTK3:获取鼠标滚动方向
GTK2(10年2月24日)
- 我的
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
。 - 我将信号处理程序连接到
GtkDrawingArea
的scroll-event
。 - 一旦我使用滚轮,信号处理程序被调用并且
GdkEventScroll
的属性direction
是GDK_SCROLL_UP
或GDK_SCROLL_DOWN
。
GTK3(3.4.2)
- 除了上述之外,我包括在
GtkDrawingArea
的事件掩码GDK_SMOOTH_SCROLL_MASK
。没有这个,我的信号处理程序从来没有被调用 - 我使用与上述相同的信号处理程序。
- 一旦我使用滚轮,信号处理程序被调用,并且
GdkEventScroll
的属性direction
是GDK_SCROLL_SMOOTH
。打电话gdk_event_get_scroll_deltas()
给我总是0为delta_x
和delta_y
。我从来没有看到GDK_SCROLL_SMOOTH
以外的其他方向。
虽然我的鼠标本身只提供“离散”button4/5事件,但我该如何计算滚动事件的方向?我可以接受平滑滚动事件吗?
顺便说一句:我在amd64上使用Ubuntu 12.04。
我发现了一个[关于从'GDK_SCROLL_ {UP | DOWN}'切换到'GDK_SCROLL_SMOOTH']的讨论(http://comments.gmane.org/gmane.comp.gnome.desktop/46513),但是那里没有提到delta_x和delta_y为0。 – dasup 2012-08-02 11:07:57
你试过添加GDK_SCROLL_MASK吗?假设你不关心平滑滚动。请参阅https://bugzilla.gnome.org/show_bug.cgi?id=671305 – ergosys 2012-08-02 17:31:38
@ergosys:是的,我包含'GDK_SCROLL_MASK'(参见GTK3下的1.)。如果没有这个标志,我的信号处理程序就不会在GTK3下调用。 – dasup 2012-08-03 08:44:26