diff options
author | nick_m <mainsbridge@gmail.com> | 2015-06-07 23:07:56 +1000 |
---|---|---|
committer | nick_m <mainsbridge@gmail.com> | 2015-06-17 09:54:22 +1000 |
commit | 57ce447fd19bd794afe90748d466bbe172c2eab0 (patch) | |
tree | f02005535c929d2aa35a5f3030d1b1591df8a75d /libs/gtkmm2ext | |
parent | 9d4c93aca7a7d6900c2b4f6c138057a8006321b3 (diff) |
Fix some workflow problems wrt automation.
- clearing automation points sets control to "off" rather than touch.
- multiple touches on the same pass acts consistently (no more
fader jumps on mouse button press
- use actual value for initial point rather than some arbitrary
default. clarify new semantics of add () (with_default->with_initial).
- clean some whitespace
- add guard points as needed in stop.
- catch grab broken signal (i can't trigger it, but the docs seem
to think it is essential).
Diffstat (limited to 'libs/gtkmm2ext')
-rw-r--r-- | libs/gtkmm2ext/gtkmm2ext/pixfader.h | 1 | ||||
-rw-r--r-- | libs/gtkmm2ext/pixfader.cc | 14 |
2 files changed, 14 insertions, 1 deletions
diff --git a/libs/gtkmm2ext/gtkmm2ext/pixfader.h b/libs/gtkmm2ext/gtkmm2ext/pixfader.h index f137a4ed65..0a316340b4 100644 --- a/libs/gtkmm2ext/gtkmm2ext/pixfader.h +++ b/libs/gtkmm2ext/gtkmm2ext/pixfader.h @@ -58,6 +58,7 @@ class LIBGTKMM2EXT_API PixFader : public CairoWidget void on_size_allocate (Gtk::Allocation& alloc); void render (cairo_t *, cairo_rectangle_t*); + bool on_grab_broken_event (GdkEventGrabBroken*); bool on_button_press_event (GdkEventButton*); bool on_button_release_event (GdkEventButton*); bool on_motion_notify_event (GdkEventMotion*); diff --git a/libs/gtkmm2ext/pixfader.cc b/libs/gtkmm2ext/pixfader.cc index b140d7b56b..1e814fd147 100644 --- a/libs/gtkmm2ext/pixfader.cc +++ b/libs/gtkmm2ext/pixfader.cc @@ -71,7 +71,7 @@ PixFader::PixFader (Gtk::Adjustment& adj, int orientation, int fader_length, int _adjustment.signal_value_changed().connect (mem_fun (*this, &PixFader::adjustment_changed)); _adjustment.signal_changed().connect (mem_fun (*this, &PixFader::adjustment_changed)); - + signal_grab_broken_event ().connect (mem_fun (*this, &PixFader::on_grab_broken_event)); if (_orien == VERT) { CairoWidget::set_size_request(_girth, _span); } else { @@ -366,6 +366,18 @@ PixFader::on_size_allocate (Gtk::Allocation& alloc) } bool +PixFader::on_grab_broken_event (GdkEventGrabBroken* ev) +{ + if (_dragging) { + remove_modal_grab(); + _dragging = false; + gdk_pointer_ungrab (GDK_CURRENT_TIME); + StopGesture (); + } + return (_tweaks & NoButtonForward) ? true : false; +} + +bool PixFader::on_button_press_event (GdkEventButton* ev) { if (ev->type != GDK_BUTTON_PRESS) { |