4

我刚刚将一个 C 程序从 GTK2 移植到 GTK3。该程序使用GtkDrawingArea鼠标滚轮在其上使用。切换到 GTK3 后,我无法再正确检测滚轮的使用情况。这是我所做的和得到的:

GTK2 (2.24.10)

  1. 我将事件掩码设置GtkDrawingAreaGDK_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-eventGtkDrawingArea.
  3. 一旦我使用滚轮,就会调用信号处理程序,并且 的属性direction是or 。GdkEventScrollGDK_SCROLL_UPGDK_SCROLL_DOWN

GTK3 (3.4.2)

  1. 除了上述之外,我还包括GDK_SMOOTH_SCROLL_MASKGtkDrawingArea. 没有它,我的信号处理程序永远不会被调用。
  2. 我使用与上述相同的信号处理程序。
  3. 一旦我使用滚轮,就会调用信号处理程序,并且 isdirectionGdkEventScroll属性GDK_SCROLL_SMOOTH。打电话gdk_event_get_scroll_deltas()给我总是 0delta_xdelta_y。我从来没有看到任何其他方向比 GDK_SCROLL_SMOOTH

尽管我的鼠标本身只提供“离散”button4/5 事件,但我可以接受平滑滚动事件,但我如何确定滚动事件的方向?

顺便说一句:我在 amd64 上使用 Ubuntu 12.04。

4

1 回答 1

4

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

于 2012-08-08T02:10:41.233 回答