diff --git a/src/servers/app/Layer.cpp b/src/servers/app/Layer.cpp index 2977d3a34d..9ff91738ba 100644 --- a/src/servers/app/Layer.cpp +++ b/src/servers/app/Layer.cpp @@ -1153,6 +1153,19 @@ Layer::MouseMoved(const PointerEvent& evt, uint32 transit) } } +void +Layer::MouseWheelChanged(const PointerEvent& evt) +{ + if (Window() && !IsTopLayer()) { + BMessage wheelmsg(B_MOUSE_WHEEL_CHANGED); + wheelmsg.AddInt64("when", evt.when); + wheelmsg.AddFloat("be:wheel_delta_x",evt.wheel_delta_x); + wheelmsg.AddFloat("be:wheel_delta_y",evt.wheel_delta_y); + + Window()->SendMessageToClient(&wheelmsg, fViewToken, false); + } +} + void Layer::WorkspaceActivated(int32 index, bool active) { diff --git a/src/servers/app/Layer.h b/src/servers/app/Layer.h index da12708039..413e2d4114 100644 --- a/src/servers/app/Layer.h +++ b/src/servers/app/Layer.h @@ -161,6 +161,7 @@ class Layer { virtual void MouseDown(const PointerEvent& evt); virtual void MouseUp(const PointerEvent& evt); virtual void MouseMoved(const PointerEvent& evt, uint32 transit); + virtual void MouseWheelChanged(const PointerEvent& evt); virtual void WorkspaceActivated(int32 index, bool active); virtual void WorkspacesChanged(uint32 oldWorkspaces, uint32 newWorkspaces); diff --git a/src/servers/app/RootLayer.cpp b/src/servers/app/RootLayer.cpp index 6f384e3dd8..8ec3de5365 100644 --- a/src/servers/app/RootLayer.cpp +++ b/src/servers/app/RootLayer.cpp @@ -1138,20 +1138,12 @@ RootLayer::MouseEventHandler(int32 code, BPrivate::PortLink& msg) msg.Read(&evt.wheel_delta_x); msg.Read(&evt.wheel_delta_y); - if (fLastLayerUnderMouse && fLastLayerUnderMouse != this) { - if (fLastLayerUnderMouse->fOwner) { // is a Layer object not a WinBorder one - if (fLastLayerUnderMouse->fOwner->fTopLayer != fLastLayerUnderMouse) { // must not be the top_view's counterpart - BMessage wheelmsg(B_MOUSE_WHEEL_CHANGED); - wheelmsg.AddInt64("when", evt.when); - wheelmsg.AddFloat("be:wheel_delta_x",evt.wheel_delta_x); - wheelmsg.AddFloat("be:wheel_delta_y",evt.wheel_delta_y); - fLastLayerUnderMouse->Window()->SendMessageToClient(&wheelmsg, fLastLayerUnderMouse->fViewToken, false); - } - } else { - // TODO: WinBorder::MouseWheel() should dissapear or get other params! - // ((WinBorder*)fLastLayerUnderMouse)->MouseWheel(...) - } + if (fLastLayerUnderMouse == NULL) { + CRITICAL("RootLayer::MouseEventHandler(B_MOUSE_DOWN) fLastLayerUnderMouse is null!\n"); + break; } + + fLastLayerUnderMouse->MouseWheelChanged(evt); break; } default: