diff --git a/lcl/interfaces/gtk2/gtk2winapi.inc b/lcl/interfaces/gtk2/gtk2winapi.inc index 557afa9dff..7f674ee348 100644 --- a/lcl/interfaces/gtk2/gtk2winapi.inc +++ b/lcl/interfaces/gtk2/gtk2winapi.inc @@ -6141,7 +6141,6 @@ function TGtk2WidgetSet.GetWindowRect(Handle: hwnd; var ARect: TRect): Integer; var Widget: PGTKWidget; GRect: TGdkRectangle; - R: TRect; P: TPoint; begin Result := 0; // error @@ -6149,14 +6148,14 @@ begin begin Widget := {%H-}PGtkWidget(Handle); - if GTK_IS_WINDOW(Widget) and Assigned(Widget^.window) then + if GTK_IS_WINDOW(Widget) and Assigned(Widget^.window) + and GTK_WIDGET_VISIBLE(Widget) then begin gdk_window_get_origin(Widget^.window, @ARect.Left, @ARect.Top); gdk_window_get_size(Widget^.window, @ARect.Right, @ARect.Bottom); P := GetWidgetOrigin(Widget); gdk_window_get_frame_extents(Widget^.window, @GRect); - R := RectFromGdkRect(GRect); - ARect := Bounds(P.X,P.Y,R.Right-R.Left,R.Bottom-R.Top); + ARect := Bounds(P.X,P.Y,GRect.width,GRect.height); // writeln('Frame extents are: ',dbgs(R),' ARECT=',dbgs(AREct)); Result := 1; // success exit; diff --git a/lcl/interfaces/gtk2/gtk2wsforms.pp b/lcl/interfaces/gtk2/gtk2wsforms.pp index 19d2b2acf9..3e7abbcb43 100644 --- a/lcl/interfaces/gtk2/gtk2wsforms.pp +++ b/lcl/interfaces/gtk2/gtk2wsforms.pp @@ -353,6 +353,7 @@ var WindowType: TGtkWindowType; ACustomForm: TCustomForm; AResizable: gint; + Allocation: TGtkAllocation; begin // Start of old CreateForm method ACustomForm := TCustomForm(AWinControl); @@ -443,6 +444,12 @@ begin if not (csDesigning in AWinControl.ComponentState) then WidgetInfo^.UserData := Pointer(1); + Allocation.X := AParams.X; + Allocation.Y := AParams.Y; + Allocation.Width := AParams.Width; + Allocation.Height := AParams.Height; + gtk_widget_size_allocate(P, @Allocation); + {$IFDEF DebugLCLComponents} DebugGtkWidgets.MarkCreated(P, dbgsName(AWinControl)); {$ENDIF}