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 が返されます。以外の方向は見たことがありません 。GdkEventScrollGDK_SCROLL_SMOOTHgdk_event_get_scroll_deltas()delta_xdelta_yGDK_SCROLL_SMOOTH
マウス自体は「個別の」ボタン 4/5 イベントしか配信しませんが、スムーズ スクロール イベントを受信しても問題ありませんが、スクロール イベントの方向をどのように把握すればよいでしょうか。
ところで:amd64でUbuntu 12.04を使用しています。