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;
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

View File

@ -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

View File

@ -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);

View File

@ -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