summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Fl.cxx8
-rw-r--r--src/Fl_Group.cxx13
2 files changed, 18 insertions, 3 deletions
diff --git a/src/Fl.cxx b/src/Fl.cxx
index d90600402..58a55aac0 100644
--- a/src/Fl.cxx
+++ b/src/Fl.cxx
@@ -757,9 +757,11 @@ int Fl::handle(int e, Fl_Window* window)
case FL_MOUSEWHEEL:
fl_xfocus = window; // this should not happen! But maybe it does:
- // Try it as keystroke, sending it to focus and all parents:
- for (wi = grab() ? grab() : focus(); wi; wi = wi->parent())
- if (send(FL_MOUSEWHEEL, wi, window)) return 1;
+ // Try sending it to the grab and then the window:
+ if (grab()) {
+ if (send(FL_MOUSEWHEEL, grab(), window)) return 1;
+ }
+ if (send(FL_MOUSEWHEEL, window, window)) return 1;
default:
break;
}
diff --git a/src/Fl_Group.cxx b/src/Fl_Group.cxx
index 8655d53fe..289aa12c8 100644
--- a/src/Fl_Group.cxx
+++ b/src/Fl_Group.cxx
@@ -213,6 +213,19 @@ int Fl_Group::handle(int event) {
}
return 0;
+ case FL_MOUSEWHEEL:
+ for (i = children(); i--;) {
+ o = a[i];
+ if (o->takesevents() && Fl::event_inside(o) && send(o,FL_MOUSEWHEEL))
+ return 1;
+ }
+ for (i = children(); i--;) {
+ o = a[i];
+ if (o->takesevents() && !Fl::event_inside(o) && send(o,FL_MOUSEWHEEL))
+ return 1;
+ }
+ return 0;
+
case FL_DEACTIVATE:
case FL_ACTIVATE:
for (i = children(); i--;) {