diff --git a/lcl/interfaces/customdrawn/customdrawn_x11proc.pas b/lcl/interfaces/customdrawn/customdrawn_x11proc.pas index 11c6e562ff..c237db6b7e 100644 --- a/lcl/interfaces/customdrawn/customdrawn_x11proc.pas +++ b/lcl/interfaces/customdrawn/customdrawn_x11proc.pas @@ -21,6 +21,8 @@ type Window: X.TWindow; LCLControl: TWinControl; Children: TFPList; // of TCDWinControl; + // + LastMouseDownControl: TWinControl; // Stores the control which should receive the next MouseUp // Used and valid only during event processing XEvent: PXEvent; // X11 extra objects diff --git a/lcl/interfaces/customdrawn/customdrawnobject_android.inc b/lcl/interfaces/customdrawn/customdrawnobject_android.inc index 76f4799760..2d48a018ea 100644 --- a/lcl/interfaces/customdrawn/customdrawnobject_android.inc +++ b/lcl/interfaces/customdrawn/customdrawnobject_android.inc @@ -54,9 +54,14 @@ begin lEventPos := FormPosToControlPos(lTarget, Round(X), Round(Y)); case action of - ACTION_DOWN: LCLSendMouseDownMsg(lTarget, lEventPos.X, lEventPos.Y, mbLeft, []); + ACTION_DOWN: + begin + lCurForm.LastMouseDownControl := lTarget; + LCLSendMouseDownMsg(lTarget, lEventPos.X, lEventPos.Y, mbLeft, []); + end; ACTION_UP: begin + if lCurForm.LastMouseDownControl <> nil then lTarget := lCurForm.LastMouseDownControl; LCLSendMouseUpMsg(lTarget, lEventPos.X, lEventPos.Y, mbLeft, []); LCLSendClickedMsg(lTarget); end; diff --git a/lcl/interfaces/customdrawn/customdrawnproc.pas b/lcl/interfaces/customdrawn/customdrawnproc.pas index 30b0dc1180..f3ae611135 100644 --- a/lcl/interfaces/customdrawn/customdrawnproc.pas +++ b/lcl/interfaces/customdrawn/customdrawnproc.pas @@ -32,6 +32,8 @@ type public LCLForm: TCustomForm; Children: TFPList; // of TCDWinControl; + // + LastMouseDownControl: TWinControl; // Stores the control which should receive the next MouseUp // painting objects Image: TLazIntfImage; Canvas: TLazCanvas; diff --git a/lcl/interfaces/customdrawn/customdrawnwsforms_x11.inc b/lcl/interfaces/customdrawn/customdrawnwsforms_x11.inc index 50a94a4794..ac6128d7d7 100644 --- a/lcl/interfaces/customdrawn/customdrawnwsforms_x11.inc +++ b/lcl/interfaces/customdrawn/customdrawnwsforms_x11.inc @@ -527,6 +527,7 @@ var lTarget: TWinControl; begin lTarget := FindControlWhichReceivedEvent(TCustomForm(AWinControl), AWindowInfo.Children, Event.x, Event.y); + AWindowInfo.LastMouseDownControl := lTarget; if XButtonToMouseButton(Event.button, MouseButton) then begin @@ -562,7 +563,9 @@ var lTarget: TWinControl; lEventPos: TPoint; begin - lTarget := FindControlWhichReceivedEvent(TCustomForm(AWinControl), AWindowInfo.Children, Event.x, Event.y); + lTarget := AWindowInfo.LastMouseDownControl; + if lTarget = nil then + lTarget := FindControlWhichReceivedEvent(TCustomForm(AWinControl), AWindowInfo.Children, Event.x, Event.y); lEventPos := FormPosToControlPos(lTarget, Event.x, Event.y); { Release events are only for mouse buttons, and not mouse wheel moviments }