diff options
Diffstat (limited to 'src/Fl_Slider.cxx')
| -rw-r--r-- | src/Fl_Slider.cxx | 72 |
1 files changed, 43 insertions, 29 deletions
diff --git a/src/Fl_Slider.cxx b/src/Fl_Slider.cxx index 93a4457fd..6b2a328d1 100644 --- a/src/Fl_Slider.cxx +++ b/src/Fl_Slider.cxx @@ -222,10 +222,14 @@ void Fl_Slider::draw() { } int Fl_Slider::handle(int event, int X, int Y, int W, int H) { + // Fl_Widget_Tracker wp(this); switch (event) { - case FL_PUSH: + case FL_PUSH: { + Fl_Widget_Tracker wp(this); if (!Fl::event_inside(X, Y, W, H)) return 0; handle_push(); + if (wp.deleted()) return 1; } + // fall through ... case FL_DRAG: { double val; @@ -293,34 +297,44 @@ int Fl_Slider::handle(int event, int X, int Y, int W, int H) { case FL_RELEASE: handle_release(); return 1; - case FL_KEYBOARD : - switch (Fl::event_key()) { - case FL_Up: - if (horizontal()) return 0; - handle_push(); - handle_drag(clamp(increment(value(),-1))); - handle_release(); - return 1; - case FL_Down: - if (horizontal()) return 0; - handle_push(); - handle_drag(clamp(increment(value(),1))); - handle_release(); - return 1; - case FL_Left: - if (!horizontal()) return 0; - handle_push(); - handle_drag(clamp(increment(value(),-1))); - handle_release(); - return 1; - case FL_Right: - if (!horizontal()) return 0; - handle_push(); - handle_drag(clamp(increment(value(),1))); - handle_release(); - return 1; - default: - return 0; + case FL_KEYBOARD: + { Fl_Widget_Tracker wp(this); + switch (Fl::event_key()) { + case FL_Up: + if (horizontal()) return 0; + handle_push(); + if (wp.deleted()) return 1; + handle_drag(clamp(increment(value(),-1))); + if (wp.deleted()) return 1; + handle_release(); + return 1; + case FL_Down: + if (horizontal()) return 0; + handle_push(); + if (wp.deleted()) return 1; + handle_drag(clamp(increment(value(),1))); + if (wp.deleted()) return 1; + handle_release(); + return 1; + case FL_Left: + if (!horizontal()) return 0; + handle_push(); + if (wp.deleted()) return 1; + handle_drag(clamp(increment(value(),-1))); + if (wp.deleted()) return 1; + handle_release(); + return 1; + case FL_Right: + if (!horizontal()) return 0; + handle_push(); + if (wp.deleted()) return 1; + handle_drag(clamp(increment(value(),1))); + if (wp.deleted()) return 1; + handle_release(); + return 1; + default: + return 0; + } } // break not required because of switch... case FL_FOCUS : |
