diff --git a/libs/gtkmm2ext/auto_spin.cc b/libs/gtkmm2ext/auto_spin.cc index 0f4c371a09..707414df95 100644 --- a/libs/gtkmm2ext/auto_spin.cc +++ b/libs/gtkmm2ext/auto_spin.cc @@ -143,6 +143,29 @@ AutoSpin::button_press (GdkEventButton *ev) return TRUE; } +gint +AutoSpin::scroll_event (GdkEventScroll *ev) +{ + stop_spinning (0); + + gfloat increment = step_increment; + + if (ev->state & Keyboard::TertiaryModifier) { + increment = page_increment; + } + + switch (ev->direction) { + case GDK_SCROLL_DOWN: + case GDK_SCROLL_LEFT: + adjust_value (-increment); + break; + case GDK_SCROLL_RIGHT: + case GDK_SCROLL_UP: + adjust_value (increment); + break; + } +} + void AutoSpin::start_spinning (bool decrement, bool page) { diff --git a/libs/gtkmm2ext/click_box.cc b/libs/gtkmm2ext/click_box.cc index 63ab3db7ba..383fa6e583 100644 --- a/libs/gtkmm2ext/click_box.cc +++ b/libs/gtkmm2ext/click_box.cc @@ -62,6 +62,13 @@ ClickBox::button_press_handler (GdkEventButton* ev) return true; } +bool +ClickBox::on_scroll_event (GdkEventScroll* ev) +{ + AutoSpin::scroll_event (ev); + return true; +} + bool ClickBox::button_release_handler (GdkEventButton* ev) { diff --git a/libs/gtkmm2ext/gtkmm2ext/auto_spin.h b/libs/gtkmm2ext/gtkmm2ext/auto_spin.h index 8a6c9ab3b0..0f5a9467c6 100644 --- a/libs/gtkmm2ext/gtkmm2ext/auto_spin.h +++ b/libs/gtkmm2ext/gtkmm2ext/auto_spin.h @@ -47,6 +47,7 @@ class LIBGTKMM2EXT_API AutoSpin gint button_press (GdkEventButton *); gint stop_spinning (GdkEventButton *ignored_but_here_for_clicked); void start_spinning (bool decrementing, bool use_page); + gint scroll_event (GdkEventScroll *); private: Gtk::Adjustment &adjustment; diff --git a/libs/gtkmm2ext/gtkmm2ext/click_box.h b/libs/gtkmm2ext/gtkmm2ext/click_box.h index c2afa2dd12..3b7fd0f498 100644 --- a/libs/gtkmm2ext/gtkmm2ext/click_box.h +++ b/libs/gtkmm2ext/gtkmm2ext/click_box.h @@ -57,6 +57,7 @@ class LIBGTKMM2EXT_API ClickBox : public Gtk::DrawingArea, public AutoSpin void style_changed (const Glib::RefPtr &); bool button_press_handler (GdkEventButton *); bool button_release_handler (GdkEventButton *); + bool on_scroll_event (GdkEventScroll*); sigc::slot _printer; };