我剛將一個C程序從GTK2移植到GTK3。該程序使用其上使用鼠標滾輪的GtkDrawingArea
。切換到GTK3後,我無法正確檢測到滾輪的使用情況。下面是我做的,並得到:GTK3:獲取鼠標滾動方向
GTK2(10年2月24日)
- 我的
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
。 - 我將信號處理程序連接到
GtkDrawingArea
的scroll-event
。 - 一旦我使用滾輪,信號處理程序被調用並且
GdkEventScroll
的屬性direction
是GDK_SCROLL_UP
或GDK_SCROLL_DOWN
。
GTK3(3.4.2)
- 除了上述之外,我包括在
GtkDrawingArea
的事件掩碼GDK_SMOOTH_SCROLL_MASK
。沒有這個,我的信號處理程序從來沒有被調用 - 我使用與上述相同的信號處理程序。
- 一旦我使用滾輪,信號處理程序被調用,並且
GdkEventScroll
的屬性direction
是GDK_SCROLL_SMOOTH
。打電話gdk_event_get_scroll_deltas()
給我總是0爲delta_x
和delta_y
。我從來沒有看到GDK_SCROLL_SMOOTH
以外的其他方向。
雖然我的鼠標本身只提供「離散」button4/5事件,但我該如何計算滾動事件的方向?我可以接受平滑滾動事件嗎?
順便說一句:我在amd64上使用Ubuntu 12.04。
我發現了一個[關於從'GDK_SCROLL_ {UP | DOWN}'切換到'GDK_SCROLL_SMOOTH']的討論(http://comments.gmane.org/gmane.comp.gnome.desktop/46513),但是那裏沒有提到delta_x和delta_y爲0。 – dasup 2012-08-02 11:07:57
你試過添加GDK_SCROLL_MASK嗎?假設你不關心平滑滾動。請參閱https://bugzilla.gnome.org/show_bug.cgi?id=671305 – ergosys 2012-08-02 17:31:38
@ergosys:是的,我包含'GDK_SCROLL_MASK'(參見GTK3下的1.)。如果沒有這個標誌,我的信號處理程序就不會在GTK3下調用。 – dasup 2012-08-03 08:44:26