summaryrefslogtreecommitdiff
path: root/src/Fl_Adjuster.cxx
diff options
context:
space:
mode:
authorAlbrecht Schlosser <albrechts.fltk@online.de>2010-02-20 17:40:07 +0000
committerAlbrecht Schlosser <albrechts.fltk@online.de>2010-02-20 17:40:07 +0000
commit7ae0c170ad2f63ac7e27d0496cd9c167e2bd0cbd (patch)
tree0d51f2e36cc11714c6ee5923f8d52c6a9a3793dc /src/Fl_Adjuster.cxx
parentc7a1aead4c9b79882b64267b492b1f9d87ab22d0 (diff)
Added Fl_Widget_Tracker in handle() methods etc. to avoid accessing widgets
after deletion (STR #1306). This is all I could find, but maybe there are more places in the code. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@7115 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/Fl_Adjuster.cxx')
-rw-r--r--src/Fl_Adjuster.cxx20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/Fl_Adjuster.cxx b/src/Fl_Adjuster.cxx
index 6a7d06060..4f14c7a39 100644
--- a/src/Fl_Adjuster.cxx
+++ b/src/Fl_Adjuster.cxx
@@ -69,6 +69,7 @@ int Fl_Adjuster::handle(int event) {
double v;
int delta;
int mx = Fl::event_x();
+ // Fl_Widget_Tracker wp(this);
switch (event) {
case FL_PUSH:
if (Fl::visible_focus()) Fl::focus(this);
@@ -77,7 +78,10 @@ int Fl_Adjuster::handle(int event) {
drag = 3*(mx-x())/w() + 1;
else
drag = 3-3*(Fl::event_y()-y()-1)/h();
- handle_push();
+ { Fl_Widget_Tracker wp(this);
+ handle_push();
+ if (wp.deleted()) return 1;
+ }
redraw();
return 1;
case FL_DRAG:
@@ -98,9 +102,9 @@ int Fl_Adjuster::handle(int event) {
delta = 0;
}
switch (drag) {
- case 3: v = increment(previous_value(), delta); break;
- case 2: v = increment(previous_value(), delta*10); break;
- default:v = increment(previous_value(), delta*100); break;
+ case 3: v = increment(previous_value(), delta); break;
+ case 2: v = increment(previous_value(), delta*10); break;
+ default:v = increment(previous_value(), delta*100); break;
}
handle_drag(soft() ? softclamp(v) : clamp(v));
return 1;
@@ -109,11 +113,13 @@ int Fl_Adjuster::handle(int event) {
if (Fl::event_state()&0xF0000) delta = -10;
else delta = 10;
switch (drag) {
- case 3: v = increment(previous_value(), delta); break;
- case 2: v = increment(previous_value(), delta*10); break;
- default:v = increment(previous_value(), delta*100); break;
+ case 3: v = increment(previous_value(), delta); break;
+ case 2: v = increment(previous_value(), delta*10); break;
+ default:v = increment(previous_value(), delta*100); break;
}
+ Fl_Widget_Tracker wp(this);
handle_drag(soft() ? softclamp(v) : clamp(v));
+ if (wp.deleted()) return 1;
}
drag = 0;
redraw();