mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-23 11:19:10 +02:00
LCL: TCustomForm.WMWindowPosChanged, gtk intf: do not send WMWindowPosChanged because of strange side effects
git-svn-id: trunk@24979 -
This commit is contained in:
parent
4111aa2aef
commit
af904f7c5a
@ -480,6 +480,7 @@ type
|
||||
procedure WMPaint(var message: TLMPaint); message LM_PAINT;
|
||||
procedure WMShowWindow(var message: TLMShowWindow); message LM_SHOWWINDOW;
|
||||
procedure WMSize(var message: TLMSize); message LM_Size;
|
||||
procedure WMWindowPosChanged(var Message: TLMWindowPosChanged); message LM_WINDOWPOSCHANGED;
|
||||
procedure CMBiDiModeChanged(var Message: TLMessage); message CM_BIDIMODECHANGED;
|
||||
procedure CMParentBiDiModeChanged(var Message: TLMessage); message CM_PARENTBIDIMODECHANGED;
|
||||
procedure CMAppShowBtnGlyphChanged(var Message: TLMessage); message CM_APPSHOWBTNGLYPHCHANGED;
|
||||
|
@ -656,7 +656,7 @@ begin
|
||||
|
||||
inherited WMSize(Message);
|
||||
|
||||
if (Message.SizeType and not Size_SourceIsInterface) = Size_Restored then
|
||||
if (Message.SizeType and Size_Restored)>0 then
|
||||
begin
|
||||
FRestoredLeft := Left;
|
||||
FRestoredTop := Top;
|
||||
@ -666,6 +666,23 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCustomForm.WMWindowPosChanged(var Message: TLMWindowPosChanged);
|
||||
begin
|
||||
if (Parent=nil) and (Message.WindowPos<>nil)
|
||||
and ((Message.WindowPos^.flags and SWP_SourceIsInterface)>0)
|
||||
then begin
|
||||
// this is a top level form (constraints depend on window manager)
|
||||
// and the widgetset set a size
|
||||
if (Message.WindowPos^.cx<>Width) or (Message.WindowPos^.cy<>Height) then
|
||||
begin
|
||||
// the window manager sets another size => disable autosize to prevent endless loop
|
||||
Include(FFormState,fsDisableAutoSize);
|
||||
end;
|
||||
end;
|
||||
|
||||
inherited WMWindowPosChanged(Message);
|
||||
end;
|
||||
|
||||
procedure TCustomForm.CMBiDiModeChanged(var Message: TLMessage);
|
||||
var
|
||||
i: Integer;
|
||||
@ -680,9 +697,11 @@ begin
|
||||
lMessage.Result := 0;
|
||||
DisableAlign;
|
||||
try
|
||||
{$IFDEF OldAutoSize}
|
||||
if Parent<>nil then
|
||||
Parent.ReAlign
|
||||
else
|
||||
{$ENDIF}
|
||||
AdjustSize;
|
||||
for i := 0 to ComponentCount - 1 do
|
||||
begin
|
||||
|
@ -6871,7 +6871,8 @@ begin
|
||||
' BoundsRealized=',dbgs(FBoundsRealized),' FromIntf=',(Message.WindowPos^.flags and SWP_SourceIsInterface)>0,' ClientRectInvalid=',ClientRectNeedsInterfaceUpdate]);
|
||||
{$ENDIF}
|
||||
|
||||
if ((Message.WindowPos^.flags and SWP_SourceIsInterface) = 0) then begin
|
||||
if (Message.WindowPos=nil)
|
||||
or ((Message.WindowPos^.flags and SWP_SourceIsInterface) = 0) then begin
|
||||
inherited WMWindowPosChanged(Message);
|
||||
exit;
|
||||
end;
|
||||
@ -6889,11 +6890,11 @@ begin
|
||||
and (not (wcfClientRectNeedsUpdate in FWinControlFlags)) then
|
||||
exit;
|
||||
|
||||
{$IFDEF VerboseAllAutoSize}
|
||||
{ $IFDEF VerboseAllAutoSize}
|
||||
DebugLn(['TWinControl.WMWindowPosChanged CHANGED BY INTF ',dbgsname(Self),' Message=',NewLeft,',',NewTop,',',NewWidth,'x',NewHeight,
|
||||
' BoundsRealized=',dbgs(FBoundsRealized),
|
||||
' wcfClientRectNeedsUpdate=',wcfClientRectNeedsUpdate in FWinControlFlags]);
|
||||
{$ENDIF}
|
||||
{ $ENDIF}
|
||||
FBoundsRealized := NewBoundsRealized;
|
||||
{$IFNDEF OldAutoSize}
|
||||
//DebugLn(['TWinControl.WMSize ',DbgSName(Self),' phases=',dbgs(AutoSizePhases)]);
|
||||
@ -8173,13 +8174,13 @@ begin
|
||||
' -> NewBounds=',dbgs(NewBounds),
|
||||
' ClientRect=',dbgs(ClientRect));
|
||||
{$ENDIF}
|
||||
{$IFDEF VerboseBug16184}
|
||||
{ $IFDEF VerboseBug16184}
|
||||
if (Parent=nil) and (Visible) then begin
|
||||
DebugLn('[TWinControl.DoSendBoundsToInterface] A ',DbgSName(Self),
|
||||
' OldRelBounds=',dbgs(FBoundsRealized),
|
||||
' -> NewBounds=',dbgs(NewBounds));
|
||||
end;
|
||||
{$ENDIF}
|
||||
{ $ENDIF}
|
||||
FBoundsRealized:=NewBounds;
|
||||
Include(FWinControlFlags,wcfBoundsRealized); // Note: set before calling widgetset, because used in WMSize
|
||||
//if Parent=nil then DebugLn(['TWinControl.DoSendBoundsToInterface ',DbgSName(Self),' ',dbgs(BoundsRect)]);
|
||||
|
@ -6617,10 +6617,10 @@ var
|
||||
GtkLeft, GtkTop, GtkWidth, GtkHeight: integer;
|
||||
TopLeftChanged, WidthHeightChanged, IsTopLevelWidget: boolean;
|
||||
MessageDelivered: boolean;
|
||||
{$IFDEF OldAutoSize}
|
||||
{ $IFDEF OldAutoSize}
|
||||
SizeMsg: TLMSize;
|
||||
MoveMsg: TLMMove;
|
||||
{$ENDIF}
|
||||
{ $ENDIF}
|
||||
PosMsg : TLMWindowPosChanged;
|
||||
MainWidget: PGtkWidget;
|
||||
FixedWidget: PGtkWidget;
|
||||
@ -6730,10 +6730,9 @@ begin
|
||||
y := GtkTop;
|
||||
cx := GtkWidth;
|
||||
cy := GtkHeight;
|
||||
{$IFDEF OldAutoSize}
|
||||
flags := 0;
|
||||
{$ELSE}
|
||||
flags := SWP_SourceIsInterface;
|
||||
flags:=0;
|
||||
{$IFNDEF OldAutoSize}
|
||||
// flags := SWP_SourceIsInterface;
|
||||
{$ENDIF}
|
||||
end;
|
||||
MessageDelivered := DeliverMessage(LCLControl, PosMsg) = 0;
|
||||
@ -6746,12 +6745,12 @@ begin
|
||||
UpdateLCLSize;
|
||||
end;
|
||||
|
||||
{$IFDEF OldAutoSize}
|
||||
{ $IFDEF OldAutoSize}
|
||||
// then send a LM_SIZE message
|
||||
if WidthHeightChanged then begin
|
||||
{$IFDEF VerboseSizeMsg}
|
||||
{ $IFDEF VerboseSizeMsg}
|
||||
DebugLn('Send LM_SIZE To LCL ',LCLControl.Name,':',LCLControl.ClassName);
|
||||
{$ENDIF}
|
||||
{ $ENDIF}
|
||||
with SizeMsg do
|
||||
begin
|
||||
Result := 0;
|
||||
@ -6786,9 +6785,9 @@ begin
|
||||
|
||||
// then send a LM_MOVE message
|
||||
if TopLeftChanged then begin
|
||||
{$IFDEF VerboseSizeMsg}
|
||||
{ $IFDEF VerboseSizeMsg}
|
||||
DebugLn('Send LM_MOVE To LCL ',LCLControl.Name,':',LCLControl.ClassName);
|
||||
{$ENDIF}
|
||||
{ $ENDIF}
|
||||
with MoveMsg do
|
||||
begin
|
||||
Result := 0;
|
||||
@ -6800,7 +6799,7 @@ begin
|
||||
MessageDelivered := (DeliverMessage(LCLControl, MoveMsg) = 0);
|
||||
if not MessageDelivered then exit;
|
||||
end;
|
||||
{$ENDIF}
|
||||
{ $ENDIF}
|
||||
|
||||
{$ifndef gtk1}
|
||||
if GtkWidgetIsA(aWidget, GTKAPIWidget_Type) and
|
||||
|
Loading…
Reference in New Issue
Block a user