GTK2 から GTK3 に C プログラムを移植しました。プログラムは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
ますGtkDrawingArea
。 - スクロール ホイールを使用すると、シグナル ハンドラが呼び出され、 のプロパティ
direction
がGdkEventScroll
またはになりGDK_SCROLL_UP
ますGDK_SCROLL_DOWN
。
GTK3 (3.4.2)
- 上記に加え、
GDK_SMOOTH_SCROLL_MASK
当店のイベントマスクに含みますGtkDrawingArea
。それがなければ、私のシグナルハンドラは呼び出されません。 - 上記と同じシグナルハンドラを使用します。
- スクロール ホイールを使用すると、シグナル ハンドラーが呼び出され、のプロパティ
direction
は. を呼び出すと、との両方に対して常に 0 が返されます。以外の方向は見たことがありません 。GdkEventScroll
GDK_SCROLL_SMOOTH
gdk_event_get_scroll_deltas()
delta_x
delta_y
GDK_SCROLL_SMOOTH
マウス自体は「個別の」ボタン 4/5 イベントしか配信しませんが、スムーズ スクロール イベントを受信しても問題ありませんが、スクロール イベントの方向をどのように把握すればよいでしょうか。
ところで:amd64でUbuntu 12.04を使用しています。