From 6d975c970d7eda43e8b3d81ababa5d1f161d07bc Mon Sep 17 00:00:00 2001 From: mattias Date: Fri, 2 Dec 2005 12:06:13 +0000 Subject: [PATCH] fixed gtk capturing setting LCL CaptureControl git-svn-id: trunk@8247 - --- lcl/controls.pp | 14 ++++++++++++++ lcl/include/control.inc | 4 ++-- lcl/include/wincontrol.inc | 1 + lcl/interfaces/gtk/gtkcallback.inc | 10 +++++++--- lcl/interfaces/gtk/gtkproc.inc | 2 +- 5 files changed, 25 insertions(+), 6 deletions(-) diff --git a/lcl/controls.pp b/lcl/controls.pp index 871f8e9a50..781f8f5942 100644 --- a/lcl/controls.pp +++ b/lcl/controls.pp @@ -2037,6 +2037,7 @@ procedure RecreateWnd(const AWinControl:TWinControl); var DefaultDockTreeClass: TDockTreeClass; +procedure SetCaptureControl(AWinControl: TWinControl; const Position: TPoint); procedure SetCaptureControl(Control: TControl); function GetCaptureControl: TControl; procedure CancelDrag; @@ -2335,6 +2336,19 @@ begin then Result := CaptureControl; end; +procedure SetCaptureControl(AWinControl: TWinControl; const Position: TPoint); +var + Control: TControl; +begin + Control:=AWinControl; + if (AWinControl<>nil) then begin + Control:=AWinControl.ControlAtPos(Position,false,true,false); + if Control=nil then + Control:=AWinControl; + end; + SetCaptureControl(Control); +end; + procedure SetCaptureControl(Control: TControl); var OldCaptureWinControl: TWinControl; diff --git a/lcl/include/control.inc b/lcl/include/control.inc index fbebc52b8d..3026c238f5 100644 --- a/lcl/include/control.inc +++ b/lcl/include/control.inc @@ -1547,8 +1547,8 @@ end; procedure TControl.DoMouseDown(var Message: TLMMouse; Button: TMouseButton; Shift: TShiftState); begin - if not (csNoStdEvents in ControlStyle) then - Begin + //DebugLn('TControl.DoMouseDown ',DbgSName(Self),' '); + if not (csNoStdEvents in ControlStyle) then begin with Message do MouseDown(Button, KeysToShiftState(Keys) + Shift, XPos, YPos); end; diff --git a/lcl/include/wincontrol.inc b/lcl/include/wincontrol.inc index 9ae4550550..ba98d3ec8e 100644 --- a/lcl/include/wincontrol.inc +++ b/lcl/include/wincontrol.inc @@ -2500,6 +2500,7 @@ begin Control := ControlAtPos(SmallPointToPoint(TheMessage.Pos),False,True,False); end; + //DebugLn('TWinControl.IsControlMouseMsg ',DbgSName(Self),' Control=',DbgSName(Control)); Result := False; if Control <> nil then begin diff --git a/lcl/interfaces/gtk/gtkcallback.inc b/lcl/interfaces/gtk/gtkcallback.inc index a9129eb005..62bacb09e1 100644 --- a/lcl/interfaces/gtk/gtkcallback.inc +++ b/lcl/interfaces/gtk/gtkcallback.inc @@ -1132,7 +1132,7 @@ begin EventXY:=Point(TruncToInt(Event^.X),TruncToInt(Event^.Y)); ShiftState := GTKEventState2ShiftState(Event^.State); MappedXY:=TranslateGdkPointToClientArea(Event^.Window,EventXY, - PGtkWidget(AWinControl.Handle)); + PGtkWidget(AWinControl.Handle)); //DebugLn('DeliverMouseDownMessage ',DbgSName(AWinControl),' Mapped=',dbgs(MappedXY.X),',',dbgs(MappedXY.Y),' Event=',dbgs(EventXY.X),',',dbgs(EventXY.Y)); if event^.Button in [4,5] then begin @@ -1241,6 +1241,8 @@ function gtkMouseBtnPress(widget: PGtkWidget; event: pgdkEventButton; var DesignOnlySignal: boolean; CaptureWidget: PGtkWidget; + EventXY: TPoint; + MappedXY: TPoint; begin Result := CallBackDefaultReturn; @@ -1278,8 +1280,10 @@ begin CaptureWidget:=PGtkWidget(TWinControl(Data).Handle); if Event^.button=1 then begin - CaptureMouseForWidget(CaptureWidget,mctGTKIntf); - //Result := not CallBackDefaultReturn; + EventXY:=Point(TruncToInt(Event^.X),TruncToInt(Event^.Y)); + MappedXY:=TranslateGdkPointToClientArea(Event^.Window,EventXY,CaptureWidget); + SetCaptureControl(TWinControl(Data),MappedXY); + //CaptureMouseForWidget(CaptureWidget,mctGTKIntf); end; end else begin // stop the signal, so that the widget does not auto react diff --git a/lcl/interfaces/gtk/gtkproc.inc b/lcl/interfaces/gtk/gtkproc.inc index d153c91b07..59515ecef3 100644 --- a/lcl/interfaces/gtk/gtkproc.inc +++ b/lcl/interfaces/gtk/gtkproc.inc @@ -4474,7 +4474,7 @@ var OldMouseCaptureWidget: PGtkWidget; begin {$IFDEF VerboseMouseCapture} - DebugLn('ReleaseMouseCapture ',ord(MouseCaptureType),' MouseCaptureWidget=[',GetWidgetDebugReport(MouseCaptureWidget),']'); + DebugLn('ReleaseMouseCapture ',dbgs(ord(MouseCaptureType)),' MouseCaptureWidget=[',GetWidgetDebugReport(MouseCaptureWidget),']'); {$ENDIF} if MouseCaptureType=mctGTK then exit; OldMouseCaptureWidget:=MouseCaptureWidget;