4

GTK2 から GTK3 に C プログラムを移植しました。プログラムは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-eventますGtkDrawingArea
  3. スクロール ホイールを使用すると、シグナル ハンドラが呼び出され、 のプロパティdirectionGdkEventScrollまたはになりGDK_SCROLL_UPますGDK_SCROLL_DOWN

GTK3 (3.4.2)

  1. 上記に加え、GDK_SMOOTH_SCROLL_MASK当店のイベントマスクに含みますGtkDrawingArea。それがなければ、私のシグナルハンドラは呼び出されません。
  2. 上記と同じシグナルハンドラを使用します。
  3. スクロール ホイールを使用すると、シグナル ハンドラーが呼び出され、のプロパティdirectionは. を呼び出すと、との両方に対して常に 0 が返されます。以外の方向は見たことがありません 。GdkEventScrollGDK_SCROLL_SMOOTHgdk_event_get_scroll_deltas()delta_xdelta_yGDK_SCROLL_SMOOTH

マウス自体は「個別の」ボタン 4/5 イベントしか配信しませんが、スムーズ スクロール イベントを受信して​​も問題ありませんが、スクロール イベントの方向をどのように把握すればよいでしょうか。

ところで:amd64でUbuntu 12.04を使用しています。

4

1 に答える 1

4

「scroll-event」信号に関連するGtk3にバグがあります。まず、コールバックで、GdkEventScroll構造のdelta_xおよびdelta_yメンバーを使用する必要があります。次に、初めてマウスをスクロールすると、これらのメンバーは両方ともゼロになります(バグ!)。その後のスクロールで正しい値が得られます。第三に、残念ながら、このバグは修正されないようです。

于 2012-08-08T02:10:41.233 に答える