GTK3:获取鼠标滚动方向

时间:2012-08-02 10:00:50

标签: c gtk gtk3

我刚将一个C程序从GTK2移植到GTK3。该程序使用GtkDrawingArea,使用鼠标滚轮。切换到GTK3后,我无法正常检测滚轮使用情况。以下是我的所作所为:

GTK2(2.24.10)

  1. 我将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
  2. 我将信号处理程序连接到scroll-event的{​​{1}}。
  3. 一旦我使用滚轮,就会调用信号处理程序,GtkDrawingArea的属性directionGdkEventScrollGDK_SCROLL_UP
  4. GTK3(3.4.2)

    1. 除上述内容外,我还在GDK_SCROLL_DOWN的事件掩码中加入了GDK_SMOOTH_SCROLL_MASK。没有它,我的信号处理程序永远不会被调用。
    2. 我使用与上述相同的信号处理程序。
    3. 一旦我使用滚轮,就会调用信号处理程序,GtkDrawingArea的属性directionGdkEventScroll。致电GDK_SCROLL_SMOOTHgdk_event_get_scroll_deltas()delta_x始终为0。除delta_y之外,我从未见过任何其他指示。
    4. 虽然我的鼠标本身只提供“离散”按钮4/5事件,但我可以接收平滑滚动事件,但如何确定滚动事件的方向?

      BTW:我在amd64上使用Ubuntu 12.04。

1 个答案:

答案 0 :(得分:3)

Gtk3中有一个bug与"滚动事件"相关联。信号。首先,在回调中,您应该使用GdkEventScroll结构的delta_x和delta_y成员。其次,第一次滚动鼠标时,这些成员都将为零(错误!)。随后的滚动将为您提供正确的值。第三,不幸的是,似乎这个bug不会被修复。