mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-07-06 17:26:01 +02:00
Gtk2: implemented TGtk2WSCustomForm.SetFormBorderStyle so it does not recreate handle for nothing also fixes #16407
git-svn-id: trunk@25369 -
This commit is contained in:
parent
ed7ddf13b4
commit
c4a4395865
@ -479,6 +479,7 @@ type
|
|||||||
PaintDepth: integer; // increased/decreased by Begin/EndPaint
|
PaintDepth: integer; // increased/decreased by Begin/EndPaint
|
||||||
DataOwner: Boolean; // Set if the UserData should be freed when the info is freed
|
DataOwner: Boolean; // Set if the UserData should be freed when the info is freed
|
||||||
UserData: Pointer;
|
UserData: Pointer;
|
||||||
|
FormBorderStyle: Integer; // used only for forms
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//TODO: remove
|
//TODO: remove
|
||||||
|
@ -77,6 +77,8 @@ type
|
|||||||
class procedure SetIcon(const AForm: TCustomForm; const Small, Big: HICON); override;
|
class procedure SetIcon(const AForm: TCustomForm; const Small, Big: HICON); override;
|
||||||
class procedure SetAlphaBlend(const ACustomForm: TCustomForm;
|
class procedure SetAlphaBlend(const ACustomForm: TCustomForm;
|
||||||
const AlphaBlend: Boolean; const Alpha: Byte); override;
|
const AlphaBlend: Boolean; const Alpha: Byte); override;
|
||||||
|
class procedure SetFormBorderStyle(const AForm: TCustomForm;
|
||||||
|
const AFormBorderStyle: TFormBorderStyle); override;
|
||||||
{ class function GetDefaultClientRect(const AWinControl: TWinControl;
|
{ class function GetDefaultClientRect(const AWinControl: TWinControl;
|
||||||
const aLeft, aTop, aWidth, aHeight: integer; var aClientRect: TRect
|
const aLeft, aTop, aWidth, aHeight: integer; var aClientRect: TRect
|
||||||
): boolean; override;
|
): boolean; override;
|
||||||
@ -205,6 +207,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
WidgetInfo := CreateWidgetInfo(P, AWinControl, AParams);
|
WidgetInfo := CreateWidgetInfo(P, AWinControl, AParams);
|
||||||
|
WidgetInfo^.FormBorderStyle := Ord(ABorderStyle);
|
||||||
|
|
||||||
Box := CreateFormContents(ACustomForm, P, WidgetInfo);
|
Box := CreateFormContents(ACustomForm, P, WidgetInfo);
|
||||||
gtk_container_add(PGtkContainer(P), Box);
|
gtk_container_add(PGtkContainer(P), Box);
|
||||||
@ -269,6 +272,38 @@ begin
|
|||||||
gtk_window_set_opacity(PGtkWindow(ACustomForm.Handle), 1);
|
gtk_window_set_opacity(PGtkWindow(ACustomForm.Handle), 1);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
class procedure TGtk2WSCustomForm.SetFormBorderStyle(const AForm: TCustomForm;
|
||||||
|
const AFormBorderStyle: TFormBorderStyle);
|
||||||
|
var
|
||||||
|
Widget: PGtkWidget;
|
||||||
|
WidgetInfo: PWidgetInfo;
|
||||||
|
// WindowType: TGtkWindowType;
|
||||||
|
Resizable: gint;
|
||||||
|
begin
|
||||||
|
if not WSCheckHandleAllocated(AForm, 'SetFormBorderStyle') then
|
||||||
|
exit;
|
||||||
|
if (csDesigning in AForm.ComponentState) then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
Widget := PGtkWidget(AForm.Handle);
|
||||||
|
WidgetInfo := GetWidgetInfo(Widget);
|
||||||
|
|
||||||
|
if (WidgetInfo^.FormBorderStyle <> Ord(AFormBorderStyle)) then
|
||||||
|
begin
|
||||||
|
if (AForm.Parent <> nil) or (AFormBorderStyle <> bsNone) then
|
||||||
|
RecreateWnd(AForm)
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
// TODO: set window hint WindowType := FormStyleMap[AFormBorderStyle];
|
||||||
|
Resizable := FormResizableMap[AFormBorderStyle];
|
||||||
|
if (AFormBorderStyle = bsNone) then
|
||||||
|
gtk_window_set_decorated(PGtkWindow(Widget), False);
|
||||||
|
gtk_window_set_resizable(GTK_WINDOW(Widget), gboolean(Resizable));
|
||||||
|
WidgetInfo^.FormBorderStyle := Ord(AFormBorderStyle);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
{class function TGtk2WSCustomForm.GetDefaultClientRect(
|
{class function TGtk2WSCustomForm.GetDefaultClientRect(
|
||||||
const AWinControl: TWinControl; const aLeft, aTop, aWidth, aHeight: integer;
|
const AWinControl: TWinControl; const aLeft, aTop, aWidth, aHeight: integer;
|
||||||
var aClientRect: TRect): boolean;
|
var aClientRect: TRect): boolean;
|
||||||
|
Loading…
Reference in New Issue
Block a user