From 67dd91323600df481df9819d15c8408884816574 Mon Sep 17 00:00:00 2001 From: mattias Date: Mon, 28 Jun 2004 15:45:48 +0000 Subject: [PATCH] fixed a mem violation in gtk intf paint msg conversion git-svn-id: trunk@5605 - --- lcl/interfaces/gtk/gtkcallback.inc | 25 ++++++++++++++++++------- lcl/interfaces/gtk/gtkproc.inc | 9 ++++++--- lcl/interfaces/gtk/gtkproc.pp | 2 +- lcl/interfaces/gtk/gtkwinapi.inc | 10 ++++++++-- 4 files changed, 33 insertions(+), 13 deletions(-) diff --git a/lcl/interfaces/gtk/gtkcallback.inc b/lcl/interfaces/gtk/gtkcallback.inc index 46cf34cd3b..291c05d2b0 100644 --- a/lcl/interfaces/gtk/gtkcallback.inc +++ b/lcl/interfaces/gtk/gtkcallback.inc @@ -291,14 +291,20 @@ end; function gtkactivateCB(widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; var - Mess : TLMessage; + Mess: TLMActivate; begin Result:= True; EventTrace('activate', data); if LockOnChange(PgtkObject(Widget),0) > 0 then Exit; + FillChar(Mess,SizeOf(Mess),#0); Mess.Msg := LM_ACTIVATE; + Mess.Active:=true; + Mess.Minimized:=false; + Mess.ActiveWindow:=0; + if GtkWidgetIsA(Widget,GTK_WINDOW_TYPE) then + Mess.ActiveWindow:=HWnd(PGTKWindow(Widget)^.focus_widget); Mess.Result := 0; DeliverMessage(Data, Mess); //DebugLn('gtkactivateCB ',TWinControl(Data).Name,':',TWinControl(Data).ClassName); @@ -458,7 +464,6 @@ function gtkfrmactivateAfter(widget: PGtkWidget; Event : PgdkEventFocus; data: gPointer) : GBoolean; cdecl; var Mess : TLMActivate; - Status : GBoolean; {$IFDEF VerboseFocus} LCLObject: TObject; CurFocusWidget: PGtkWidget; @@ -466,6 +471,7 @@ var begin EventTrace('activate after', data); if (Widget=nil) or (Event=nil) then ; + FillChar(Mess,SizeOf(Mess),#0); {$IFDEF VerboseFocus} write('gtkfrmactivateAfter Widget=',HexStr(Cardinal(Widget),8),' Event^.theIn=',Event^.theIn); LCLObject:=TObject(data); @@ -498,13 +504,15 @@ begin UpdateMouseCaptureControl; Mess.Msg := LM_ACTIVATE; - Status := DeliverPostMessage(Data, Mess); + Mess.Active:=true; + Mess.Minimized:=false; + Mess.ActiveWindow:=0; + if GtkWidgetIsA(Widget,GTK_WINDOW_TYPE) then + Mess.ActiveWindow:=HWnd(PGTKWindow(Widget)^.focus_widget); + Mess.Result := 0; + DeliverPostMessage(Data, Mess); - {$ifdef GTK2} Result := CallBackDefaultReturn; - {$Else} - Result := Status; - {$endif} end; function gtkfrmdeactivateAfter( widget: PGtkWidget; Event : PgdkEventFocus; @@ -3103,6 +3111,9 @@ end; { ============================================================================= $Log$ + Revision 1.235 2004/06/28 15:45:48 mattias + fixed a mem violation in gtk intf paint msg conversion + Revision 1.234 2004/06/24 20:49:10 marc * Applied patch from Ido diff --git a/lcl/interfaces/gtk/gtkproc.inc b/lcl/interfaces/gtk/gtkproc.inc index a242c367bd..9ef9f50d10 100644 --- a/lcl/interfaces/gtk/gtkproc.inc +++ b/lcl/interfaces/gtk/gtkproc.inc @@ -846,12 +846,12 @@ begin end; {------------------------------------------------------------------------------ - function GtkPaintMessageToPaintMessage(const GtkPaintMsg: TLMGtkPaint; + function GtkPaintMessageToPaintMessage(var GtkPaintMsg: TLMGtkPaint; FreeGtkPaintMsg: boolean): TLMPaint; Converts a LM_GtkPaint message to a LM_PAINT message ------------------------------------------------------------------------------} -function GtkPaintMessageToPaintMessage(const GtkPaintMsg: TLMGtkPaint; +function GtkPaintMessageToPaintMessage(var GtkPaintMsg: TLMGtkPaint; FreeGtkPaintMsg: boolean): TLMPaint; var PS : PPaintStruct; @@ -868,7 +868,7 @@ begin Result.PaintStruct:=PS; Result.Result:=0; if FreeGtkPaintMsg then - GtkPaintMsg.Data.Free; + FreeThenNil(GtkPaintMsg.Data); end; procedure FinalizePaintMessage(Msg: PLMessage); @@ -6805,6 +6805,9 @@ end; { ============================================================================= $Log$ + Revision 1.286 2004/06/28 15:45:48 mattias + fixed a mem violation in gtk intf paint msg conversion + Revision 1.285 2004/06/28 09:48:46 mattias added valgrind flag to compiler options diff --git a/lcl/interfaces/gtk/gtkproc.pp b/lcl/interfaces/gtk/gtkproc.pp index 7724bf1afd..2dd081709a 100644 --- a/lcl/interfaces/gtk/gtkproc.pp +++ b/lcl/interfaces/gtk/gtkproc.pp @@ -329,7 +329,7 @@ function GetComboBoxItemIndex(ComboBox: TComboBox): integer; procedure SetComboBoxItemIndex(ComboBox: TComboBox; Index: integer); // paint messages -function GtkPaintMessageToPaintMessage(const GtkPaintMsg: TLMGtkPaint; +function GtkPaintMessageToPaintMessage(var GtkPaintMsg: TLMGtkPaint; FreeGtkPaintMsg: boolean): TLMPaint; procedure FinalizePaintMessage(Msg: PLMessage); procedure FinalizePaintTagMsg(Msg: PMsg); diff --git a/lcl/interfaces/gtk/gtkwinapi.inc b/lcl/interfaces/gtk/gtkwinapi.inc index 1d6047a22b..51bd56eb75 100644 --- a/lcl/interfaces/gtk/gtkwinapi.inc +++ b/lcl/interfaces/gtk/gtkwinapi.inc @@ -7347,6 +7347,7 @@ var PaintDC: HDC; GtkPaintData: TLMGtkPaintData; DCOrigin: TPoint; + OldGtkPaintMsg: TLMGtkPaint; begin (* MG: old trick. Not used anymore, but it might be, that someday there will be component, that works better with this, so it is kept. @@ -7398,10 +7399,11 @@ var end; {$ENDIF} if AMessage.Msg=LM_GtkPAINT then begin - GtkPaintData:=TLMGtkPaintData(AMessage.wParam); + OldGtkPaintMsg:=TLMGtkPaint(AMessage); + GtkPaintData:=OldGtkPaintMsg.Data; // convert LM_GtkPAINT to LM_PAINT AMessage := TLMessage(GtkPaintMessageToPaintMessage( - TLMGtkPaint(AMessage), True)); + TLMGtkPaint(AMessage), False)); {$IfNDef GTK2} if (GtkPaintData<>nil) and (not GtkPaintData.RepaintAll) then begin PaintDC:=TLMPaint(AMessage).DC; @@ -7411,6 +7413,7 @@ var Right-DCOrigin.X,Bottom-DCOrigin.Y); end; {$EndIf} + GtkPaintData.Free; end; end; @@ -8697,6 +8700,9 @@ end; { ============================================================================= $Log$ + Revision 1.353 2004/06/28 15:45:48 mattias + fixed a mem violation in gtk intf paint msg conversion + Revision 1.352 2004/06/09 20:51:45 vincents implemented basic clipboard support for win32