From b68fd5c06ba7ecf9f2f60f114b9212bb58af270c Mon Sep 17 00:00:00 2001 From: mattias Date: Fri, 27 May 2011 20:20:17 +0000 Subject: [PATCH] gtk2 intf: added flag Gtk2CallMouseDownBeforeContext to call mousedown before lm_context git-svn-id: trunk@30939 - --- lcl/include/wincontrol.inc | 3 +-- lcl/interfaces/gtk2/gtk2callback.inc | 27 ++++++++++++++++++++------- lcl/interfaces/gtk2/gtk2proc.pp | 4 ++-- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/lcl/include/wincontrol.inc b/lcl/include/wincontrol.inc index 2afcf142b9..febaad6201 100644 --- a/lcl/include/wincontrol.inc +++ b/lcl/include/wincontrol.inc @@ -8065,14 +8065,13 @@ var begin // find if at the click place we have a control and if so then pass the message // to it - // don't check csDesigning here - let a child control to check it if (Message.Result <> 0) then Exit; if Message.XPos <> -1 then begin - // don't allow disabled and don't search wincontrols - they recieve their + // don't allow disabled and don't search wincontrols - they receive their // message themself Child := ControlAtPos(ScreenToClient(SmallPointToPoint(Message.Pos)), []); if Assigned(Child) then diff --git a/lcl/interfaces/gtk2/gtk2callback.inc b/lcl/interfaces/gtk2/gtk2callback.inc index ee5fedee89..6230f6e62e 100644 --- a/lcl/interfaces/gtk2/gtk2callback.inc +++ b/lcl/interfaces/gtk2/gtk2callback.inc @@ -1509,9 +1509,9 @@ var Info: PWidgetInfo; Old: TObject; Mess: TLMessage; - {$IFDEF VerboseMouseBugfix} + { $IFDEF VerboseMouseBugfix} AWinControl: TWinControl; - {$ENDIF} + { $ENDIF} begin Result := CallBackDefaultReturn; @@ -1535,6 +1535,15 @@ begin ResetDefaultIMContext; UpdateMouseCaptureControl; + //debugln('[gtkMouseBtnPress] calling DeliverMouseDownMessage Result=',dbgs(Result)); + {$IFDEF Gtk2CallMouseDownBeforeContext} + if DeliverMouseDownMessage(Widget, Event, TWinControl(Data))<>0 then begin + //debugln(['[gtkMouseBtnPress] DeliverMouseDownMessage handled, stopping event']); + g_signal_stop_emission_by_name(PGTKObject(Widget), 'button-press-event'); + exit(false); + end; + {$ENDIF} + if not (csDesigning in TComponent(Data).ComponentState) then begin // fix gtklist selection first @@ -1603,8 +1612,12 @@ begin g_signal_stop_emission_by_name(PGTKObject(Widget), 'button-press-event'); end; end; + {$IFDEF Gtk2CallMouseDownBeforeContext} + {$ELSE} //debugln('[gtkMouseBtnPress] calling DeliverMouseDownMessage Result=',dbgs(Result)); DeliverMouseDownMessage(Widget, Event, TWinControl(Data)); + {$ENDIF} + //debugln(['gtkMouseBtnPress END Control=',DbgSName(TObject(Data))]); end; @@ -1614,8 +1627,8 @@ end; Translate a gdk mouse press event into a LCL mouse down message and send it. -------------------------------------------------------------------------------} -procedure DeliverMouseDownMessage(widget: PGtkWidget; event : pgdkEventButton; - AWinControl: TWinControl); +function DeliverMouseDownMessage(widget: PGtkWidget; event : pgdkEventButton; + AWinControl: TWinControl): PtrInt; const LastModifierKeys: TShiftState = []; WHEEL_DELTA : array[Boolean] of Integer = (-120, 120); @@ -1739,7 +1752,7 @@ var end; begin - + Result := 0; EventXY := Point(TruncToInt(Event^.X), TruncToInt(Event^.Y)); ShiftState := GTKEventStateToShiftState(Event^.State); @@ -1769,7 +1782,7 @@ begin // send the message directly to the LCL NotifyApplicationUserInput(MessE.Msg); - DeliverMessage(AWinControl, MessE); + Result:=DeliverMessage(AWinControl, MessE); end else begin @@ -1800,7 +1813,7 @@ begin MessI.Result:=0; // send the message directly to the LCL NotifyApplicationUserInput(MessI.Msg); - DeliverMessage(AWinControl, MessI); + Result := DeliverMessage(AWinControl, MessI); end; end; diff --git a/lcl/interfaces/gtk2/gtk2proc.pp b/lcl/interfaces/gtk2/gtk2proc.pp index efcc3da44a..9be77d819c 100644 --- a/lcl/interfaces/gtk2/gtk2proc.pp +++ b/lcl/interfaces/gtk2/gtk2proc.pp @@ -147,8 +147,8 @@ function GTKMotionNotifyAfter(widget:PGTKWidget; event: PGDKEventMotion; data: gPointer): GBoolean; cdecl; function ControlGetsMouseDownBefore(AControl: TControl; AWidget: PGtkWidget): boolean; -procedure DeliverMouseDownMessage(widget: PGtkWidget; event: pgdkEventButton; - AWinControl: TWinControl); +function DeliverMouseDownMessage(widget: PGtkWidget; event: pgdkEventButton; + AWinControl: TWinControl): PtrInt; function gtk2ScrollBarMouseBtnPress(widget: PGtkWidget; event: pgdkEventButton; data: gPointer): GBoolean; cdecl;