fixed a mem violation in gtk intf paint msg conversion

git-svn-id: trunk@5605 -
This commit is contained in:
mattias 2004-06-28 15:45:48 +00:00
parent 1896e671c2
commit 67dd913236
4 changed files with 33 additions and 13 deletions

View File

@ -291,14 +291,20 @@ end;
function gtkactivateCB(widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; function gtkactivateCB(widget: PGtkWidget; data: gPointer) : GBoolean; cdecl;
var var
Mess : TLMessage; Mess: TLMActivate;
begin begin
Result:= True; Result:= True;
EventTrace('activate', data); EventTrace('activate', data);
if LockOnChange(PgtkObject(Widget),0) > 0 then Exit; if LockOnChange(PgtkObject(Widget),0) > 0 then Exit;
FillChar(Mess,SizeOf(Mess),#0);
Mess.Msg := LM_ACTIVATE; 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; Mess.Result := 0;
DeliverMessage(Data, Mess); DeliverMessage(Data, Mess);
//DebugLn('gtkactivateCB ',TWinControl(Data).Name,':',TWinControl(Data).ClassName); //DebugLn('gtkactivateCB ',TWinControl(Data).Name,':',TWinControl(Data).ClassName);
@ -458,7 +464,6 @@ function gtkfrmactivateAfter(widget: PGtkWidget; Event : PgdkEventFocus;
data: gPointer) : GBoolean; cdecl; data: gPointer) : GBoolean; cdecl;
var var
Mess : TLMActivate; Mess : TLMActivate;
Status : GBoolean;
{$IFDEF VerboseFocus} {$IFDEF VerboseFocus}
LCLObject: TObject; LCLObject: TObject;
CurFocusWidget: PGtkWidget; CurFocusWidget: PGtkWidget;
@ -466,6 +471,7 @@ var
begin begin
EventTrace('activate after', data); EventTrace('activate after', data);
if (Widget=nil) or (Event=nil) then ; if (Widget=nil) or (Event=nil) then ;
FillChar(Mess,SizeOf(Mess),#0);
{$IFDEF VerboseFocus} {$IFDEF VerboseFocus}
write('gtkfrmactivateAfter Widget=',HexStr(Cardinal(Widget),8),' Event^.theIn=',Event^.theIn); write('gtkfrmactivateAfter Widget=',HexStr(Cardinal(Widget),8),' Event^.theIn=',Event^.theIn);
LCLObject:=TObject(data); LCLObject:=TObject(data);
@ -498,13 +504,15 @@ begin
UpdateMouseCaptureControl; UpdateMouseCaptureControl;
Mess.Msg := LM_ACTIVATE; 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; Result := CallBackDefaultReturn;
{$Else}
Result := Status;
{$endif}
end; end;
function gtkfrmdeactivateAfter( widget: PGtkWidget; Event : PgdkEventFocus; function gtkfrmdeactivateAfter( widget: PGtkWidget; Event : PgdkEventFocus;
@ -3103,6 +3111,9 @@ end;
{ ============================================================================= { =============================================================================
$Log$ $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 Revision 1.234 2004/06/24 20:49:10 marc
* Applied patch from Ido * Applied patch from Ido

View File

@ -846,12 +846,12 @@ begin
end; end;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------
function GtkPaintMessageToPaintMessage(const GtkPaintMsg: TLMGtkPaint; function GtkPaintMessageToPaintMessage(var GtkPaintMsg: TLMGtkPaint;
FreeGtkPaintMsg: boolean): TLMPaint; FreeGtkPaintMsg: boolean): TLMPaint;
Converts a LM_GtkPaint message to a LM_PAINT message Converts a LM_GtkPaint message to a LM_PAINT message
------------------------------------------------------------------------------} ------------------------------------------------------------------------------}
function GtkPaintMessageToPaintMessage(const GtkPaintMsg: TLMGtkPaint; function GtkPaintMessageToPaintMessage(var GtkPaintMsg: TLMGtkPaint;
FreeGtkPaintMsg: boolean): TLMPaint; FreeGtkPaintMsg: boolean): TLMPaint;
var var
PS : PPaintStruct; PS : PPaintStruct;
@ -868,7 +868,7 @@ begin
Result.PaintStruct:=PS; Result.PaintStruct:=PS;
Result.Result:=0; Result.Result:=0;
if FreeGtkPaintMsg then if FreeGtkPaintMsg then
GtkPaintMsg.Data.Free; FreeThenNil(GtkPaintMsg.Data);
end; end;
procedure FinalizePaintMessage(Msg: PLMessage); procedure FinalizePaintMessage(Msg: PLMessage);
@ -6805,6 +6805,9 @@ end;
{ ============================================================================= { =============================================================================
$Log$ $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 Revision 1.285 2004/06/28 09:48:46 mattias
added valgrind flag to compiler options added valgrind flag to compiler options

View File

@ -329,7 +329,7 @@ function GetComboBoxItemIndex(ComboBox: TComboBox): integer;
procedure SetComboBoxItemIndex(ComboBox: TComboBox; Index: integer); procedure SetComboBoxItemIndex(ComboBox: TComboBox; Index: integer);
// paint messages // paint messages
function GtkPaintMessageToPaintMessage(const GtkPaintMsg: TLMGtkPaint; function GtkPaintMessageToPaintMessage(var GtkPaintMsg: TLMGtkPaint;
FreeGtkPaintMsg: boolean): TLMPaint; FreeGtkPaintMsg: boolean): TLMPaint;
procedure FinalizePaintMessage(Msg: PLMessage); procedure FinalizePaintMessage(Msg: PLMessage);
procedure FinalizePaintTagMsg(Msg: PMsg); procedure FinalizePaintTagMsg(Msg: PMsg);

View File

@ -7347,6 +7347,7 @@ var
PaintDC: HDC; PaintDC: HDC;
GtkPaintData: TLMGtkPaintData; GtkPaintData: TLMGtkPaintData;
DCOrigin: TPoint; DCOrigin: TPoint;
OldGtkPaintMsg: TLMGtkPaint;
begin begin
(* MG: old trick. Not used anymore, but it might be, that someday there (* 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. will be component, that works better with this, so it is kept.
@ -7398,10 +7399,11 @@ var
end; end;
{$ENDIF} {$ENDIF}
if AMessage.Msg=LM_GtkPAINT then begin if AMessage.Msg=LM_GtkPAINT then begin
GtkPaintData:=TLMGtkPaintData(AMessage.wParam); OldGtkPaintMsg:=TLMGtkPaint(AMessage);
GtkPaintData:=OldGtkPaintMsg.Data;
// convert LM_GtkPAINT to LM_PAINT // convert LM_GtkPAINT to LM_PAINT
AMessage := TLMessage(GtkPaintMessageToPaintMessage( AMessage := TLMessage(GtkPaintMessageToPaintMessage(
TLMGtkPaint(AMessage), True)); TLMGtkPaint(AMessage), False));
{$IfNDef GTK2} {$IfNDef GTK2}
if (GtkPaintData<>nil) and (not GtkPaintData.RepaintAll) then begin if (GtkPaintData<>nil) and (not GtkPaintData.RepaintAll) then begin
PaintDC:=TLMPaint(AMessage).DC; PaintDC:=TLMPaint(AMessage).DC;
@ -7411,6 +7413,7 @@ var
Right-DCOrigin.X,Bottom-DCOrigin.Y); Right-DCOrigin.X,Bottom-DCOrigin.Y);
end; end;
{$EndIf} {$EndIf}
GtkPaintData.Free;
end; end;
end; end;
@ -8697,6 +8700,9 @@ end;
{ ============================================================================= { =============================================================================
$Log$ $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 Revision 1.352 2004/06/09 20:51:45 vincents
implemented basic clipboard support for win32 implemented basic clipboard support for win32