From 6161468c1670b704e8d2f9b69f1792163e86b182 Mon Sep 17 00:00:00 2001 From: mattias Date: Sat, 19 Feb 2005 20:33:10 +0000 Subject: [PATCH] fixed gtk2 key handle result git-svn-id: trunk@6813 - --- lcl/interfaces/gtk/gtkobject.inc | 9 +++++- lcl/interfaces/gtk/gtkproc.inc | 11 ++++++-- lcl/interfaces/gtk/gtkproc.pp | 6 ++-- lcl/interfaces/gtk/gtkwsbuttons.pp | 3 +- lcl/interfaces/gtk2/gtk2object.inc | 45 +++++++++++++++++++++++------- lcl/tests/test1_2button.lpi | 8 +++--- 6 files changed, 61 insertions(+), 21 deletions(-) diff --git a/lcl/interfaces/gtk/gtkobject.inc b/lcl/interfaces/gtk/gtkobject.inc index 8eea80ee1e..775d722f98 100644 --- a/lcl/interfaces/gtk/gtkobject.inc +++ b/lcl/interfaces/gtk/gtkobject.inc @@ -3063,7 +3063,8 @@ end; Applies a Message to the sender ------------------------------------------------------------------------------} //TODO: remove ALCLObject when creation splitup is finished -procedure TGtkWidgetSet.SetCallback(const AMsg: LongInt; const AGTKObject: PGTKObject; const ALCLObject: TObject); +procedure TGtkWidgetSet.SetCallback(const AMsg: LongInt; + const AGTKObject: PGTKObject; const ALCLObject: TObject); procedure ConnectSenderSignal(const AnObject:PGTKObject; const ASignal: PChar; const ACallBackProc: Pointer); @@ -3101,6 +3102,7 @@ procedure TGtkWidgetSet.SetCallback(const AMsg: LongInt; const AGTKObject: PGTKO procedure ConnectKeyPressReleaseEvents(const AnObject: PGTKObject); begin + //debugln('ConnectKeyPressReleaseEvents A ALCLObject=',DbgSName(ALCLObject)); ConnectSenderSignal(AnObject, 'key-press-event', @GTKKeyUpDown, GDK_KEY_PRESS_MASK); ConnectSenderSignalAfter(AnObject, @@ -3114,6 +3116,7 @@ procedure TGtkWidgetSet.SetCallback(const AMsg: LongInt; const AGTKObject: PGTKO var gObject, gFixed, gCore, Scroll, Adjustment: PGTKObject; begin + //debugln('TGtkWidgetSet.SetCallback A ALCLObject=',DbgSName(ALCLObject),' AMsg=',dbgs(AMsg)); if AGTKObject = nil then gObject := ObjectToGTKObject(ALCLObject) else gObject := AGTKObject; @@ -3231,6 +3234,7 @@ begin LM_SYSCHAR, LM_SYSKEYUP: begin + //debugln('TGtkWidgetSet.SetCallback A KEY ALCLObject=',DbgSName(ALCLObject),' AMsg=',dbgs(AMsg)); if (ALCLObject is TCustomComboBox) then begin ConnectKeyPressReleaseEvents(PgtkObject(PgtkCombo(gObject)^.entry)); end @@ -7010,6 +7014,9 @@ end; { ============================================================================= $Log$ + Revision 1.630 2005/02/19 20:33:09 mattias + fixed gtk2 key handle result + Revision 1.629 2005/02/19 16:30:46 mattias fixed 1.0.10 compilation diff --git a/lcl/interfaces/gtk/gtkproc.inc b/lcl/interfaces/gtk/gtkproc.inc index 502f5d1128..2e065a5650 100644 --- a/lcl/interfaces/gtk/gtkproc.inc +++ b/lcl/interfaces/gtk/gtkproc.inc @@ -2040,7 +2040,8 @@ var TargetData: gPointer; KeyPressesChar: char; begin - Result := True; + Result := CallBackDefaultReturn; + EventStopped := False; HandledByLCL:=KeyEventWasHandledByLCL(Event,BeforeEvent); @@ -4463,7 +4464,7 @@ begin end; {$ELSE} begin - Result:= g_signal_handler_find(AnObject, + Result:=g_signal_handler_find(AnObject, G_SIGNAL_MATCH_FUNC or G_SIGNAL_MATCH_DATA, 0,0,nil,ACallBackProc,ALCLObject)<>0; end; @@ -4480,7 +4481,8 @@ var RealizeConnected: Boolean; HasRealizeSignal: Boolean; begin - if ACallBackProc = nil then exit; + if ACallBackProc = nil then + RaiseGDBException('ConnectSignal'); // first loop through the handlers to: // - check if a handler already exists @@ -8057,6 +8059,9 @@ end; { ============================================================================= $Log$ + Revision 1.338 2005/02/19 20:33:09 mattias + fixed gtk2 key handle result + Revision 1.337 2005/02/19 16:30:47 mattias fixed 1.0.10 compilation diff --git a/lcl/interfaces/gtk/gtkproc.pp b/lcl/interfaces/gtk/gtkproc.pp index d034c0060c..42fa5b379c 100644 --- a/lcl/interfaces/gtk/gtkproc.pp +++ b/lcl/interfaces/gtk/gtkproc.pp @@ -581,16 +581,18 @@ function GetDesignOnlySignalFlag(Widget: PGtkWidget; // signals // new signal procs, these will obsolete the old ones +// MG: Say who? procedure SignalConnect(const AWidget: PGTKWidget; const ASignal: PChar; const AProc: Pointer; const AInfo: PWidgetInfo); procedure SignalConnectAfter(const AWidget: PGTKWidget; const ASignal: PChar; const AProc: Pointer; const AInfo: PWidgetInfo); // old signal procs -procedure ConnectSignal(const AnObject:PGTKObject; const ASignal: PChar; +// MG: why old? +procedure ConnectSignal(const AnObject: PGTKObject; const ASignal: PChar; const ACallBackProc: Pointer; const ALCLObject: TObject; const AReqSignalMask: TGdkEventMask; const ASFlags: TConnectSignalFlags); -procedure ConnectSignal(const AnObject:PGTKObject; const ASignal: PChar; +procedure ConnectSignal(const AnObject: PGTKObject; const ASignal: PChar; const ACallBackProc: Pointer; const ALCLObject: TObject; const AReqSignalMask: TGdkEventMask); procedure ConnectSignalAfter(const AnObject:PGTKObject; const ASignal: PChar; diff --git a/lcl/interfaces/gtk/gtkwsbuttons.pp b/lcl/interfaces/gtk/gtkwsbuttons.pp index cdc988f2a6..0e3da5a205 100644 --- a/lcl/interfaces/gtk/gtkwsbuttons.pp +++ b/lcl/interfaces/gtk/gtkwsbuttons.pp @@ -157,7 +157,8 @@ begin Result := False; end; -procedure TGtkWSButton.SetCallbacks(const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo); +procedure TGtkWSButton.SetCallbacks(const AGtkWidget: PGtkWidget; + const AWidgetInfo: PWidgetInfo); begin TGtkWSWinControl.SetCallbacks(PGtkObject(AGtkWidget), TComponent(AWidgetInfo^.LCLObject)); diff --git a/lcl/interfaces/gtk2/gtk2object.inc b/lcl/interfaces/gtk2/gtk2object.inc index d11fcf601b..8b36ac538e 100644 --- a/lcl/interfaces/gtk2/gtk2object.inc +++ b/lcl/interfaces/gtk2/gtk2object.inc @@ -60,12 +60,32 @@ begin Result := False; end; -function GTK2KeyUpDown(Widget: PGtkWidget; Event : pgdkeventkey; +function GTK2KeyDown(Widget: PGtkWidget; Event : pgdkeventkey; Data: gPointer) : GBoolean; cdecl; begin - Result := GtkWidgetIsA(Widget,GTK_APIWIDGETCLIENT_TYPE) and - (HandleGtkKeyUpDown(Widget, Event, Data, True) or - HandleGtkKeyUpDown(Widget, Event, Data, False)); + debugln('GTK2KeyDown ',DbgSName(TObject(Data))); + Result := HandleGtkKeyUpDown(Widget, Event, Data, True); +end; + +function GTK2KeyDownAfter(Widget: PGtkWidget; Event : pgdkeventkey; + Data: gPointer) : GBoolean; cdecl; +begin + debugln('GTK2KeyDownAfter ',DbgSName(TObject(Data))); + Result := HandleGtkKeyUpDown(Widget, Event, Data, False); +end; + +function GTK2KeyUp(Widget: PGtkWidget; Event : pgdkeventkey; + Data: gPointer) : GBoolean; cdecl; +begin + debugln('GTK2KeyUp ',DbgSName(TObject(Data))); + Result := HandleGtkKeyUpDown(Widget, Event, Data, True); +end; + +function GTK2KeyUpAfter(Widget: PGtkWidget; Event : pgdkeventkey; + Data: gPointer) : GBoolean; cdecl; +begin + debugln('GTK2KeyUpAfter ',DbgSName(TObject(Data))); + Result := HandleGtkKeyUpDown(Widget, Event, Data, False); end; function GTK2KillFocusCB(widget: PGtkWidget; event:PGdkEventFocus; @@ -974,19 +994,21 @@ procedure TGTK2WidgetSet.SetCallback(const AMsg: LongInt; const AGTKObject: PGTK procedure ConnectKeyPressReleaseEvents(const AnObject: PGTKObject); begin + //debugln('gtk2object ConnectKeyPressReleaseEvents A ALCLObject=',DbgSName(ALCLObject)); ConnectSenderSignal(AnObject, - 'key-press-event', @GTK2KeyUpDown, GDK_KEY_PRESS_MASK); + 'key-press-event', @GTK2KeyDown, GDK_KEY_PRESS_MASK); //ConnectSenderSignalAfter(AnObject, - // 'key-press-event', @GTK2KeyUpDownAfter, GDK_KEY_PRESS_MASK); - ConnectSenderSignal(AnObject, - 'key-release-event', @GTK2KeyUpDown, GDK_KEY_RELEASE_MASK); + // 'key-press-event', @GTK2KeyDownAfter, GDK_KEY_PRESS_MASK); + //ConnectSenderSignal(AnObject, + // 'key-release-event', @GTK2KeyUp, GDK_KEY_RELEASE_MASK); //ConnectSenderSignalAfter(AnObject, - // 'key-release-event', @GTK2KeyUpDownAfter, GDK_KEY_RELEASE_MASK); + // 'key-release-event', @GTK2KeyUpAfter, GDK_KEY_RELEASE_MASK); end; var gObject, gFixed, gCore: PGTKObject; begin + //debugln('gtk2object.inc TGtkWidgetSet.SetCallback A ALCLObject=',DbgSName(ALCLObject),' AMsg=',dbgs(AMsg)); gObject := AGTKObject; if gObject = nil then Exit; @@ -1011,7 +1033,7 @@ begin LM_CHAR, LM_KEYDOWN, LM_KEYUP, - + LM_SYSCHAR, LM_SYSKEYDOWN, LM_SYSKEYUP: @@ -1499,6 +1521,9 @@ end; { ============================================================================= $Log$ + Revision 1.25 2005/02/19 20:33:10 mattias + fixed gtk2 key handle result + Revision 1.24 2005/02/16 23:56:51 mattias fixed some gtk2 intf mem leaks, clean ups diff --git a/lcl/tests/test1_2button.lpi b/lcl/tests/test1_2button.lpi index f213afc421..7189950971 100644 --- a/lcl/tests/test1_2button.lpi +++ b/lcl/tests/test1_2button.lpi @@ -9,21 +9,21 @@ - + </General> <Units Count="1"> <Unit0> - <CursorPos X="14" Y="210"/> + <CursorPos X="14" Y="347"/> <EditorIndex Value="0"/> <Filename Value="test1_2button.lpr"/> <IsPartOfProject Value="True"/> <Loaded Value="True"/> - <TopLine Value="193"/> + <TopLine Value="321"/> <UnitName Value="test1_2button"/> - <UsageCount Value="34"/> + <UsageCount Value="38"/> </Unit0> </Units> <PublishOptions>