diff --git a/widget/src/gtk/nsWidget.cpp b/widget/src/gtk/nsWidget.cpp index ad6dd1801d7c..2b08e92c0d93 100644 --- a/widget/src/gtk/nsWidget.cpp +++ b/widget/src/gtk/nsWidget.cpp @@ -1880,7 +1880,19 @@ nsWidget::OnButtonReleaseSignal(GdkEventButton * aGdkButtonEvent) InitMouseEvent(aGdkButtonEvent, event, eventType); - event.widget = sButtonMotionTarget ? sButtonMotionTarget : this; + if (sButtonMotionTarget) { + gint diffX = 0; + gint diffY = 0; + + diffX = (gint) aGdkButtonEvent->x_root - sButtonMotionRootX; + diffY = (gint) aGdkButtonEvent->y_root - sButtonMotionRootY; + + event.widget = sButtonMotionTarget; + + // see comments in nsWidget::OnMotionNotifySignal + event.point.x = nscoord(sButtonMotionWidgetX + diffX); + event.point.y = nscoord(sButtonMotionWidgetY + diffY); + } NS_ADDREF(event.widget); NS_STATIC_CAST(nsWidget*,event.widget)->DispatchMouseEvent(event);