diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl.cxx | 8 | ||||
| -rw-r--r-- | src/Fl_Group.cxx | 13 |
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--;) { |
