Gtk3: safe guard against duplicate signal assignment.

This commit is contained in:
zeljan1 2025-01-21 16:18:01 +01:00
parent 0fbd8536a5
commit 372fc3b29c

View File

@ -503,6 +503,7 @@ type
TGtk3ScrollableWin = class(TGtk3Container) TGtk3ScrollableWin = class(TGtk3Container)
private private
FBorderStyle: TBorderStyle; FBorderStyle: TBorderStyle;
FHBarInitialized, FVBarInitialized: boolean;
function GetHScrollBarPolicy: TGtkPolicyType; function GetHScrollBarPolicy: TGtkPolicyType;
function GetVScrollBarPolicy: TGtkPolicyType; function GetVScrollBarPolicy: TGtkPolicyType;
procedure SetBorderStyle(AValue: TBorderStyle); procedure SetBorderStyle(AValue: TBorderStyle);
@ -5685,14 +5686,22 @@ procedure TGtk3ScrollableWin.SetScrollBarsSignalHandlers(const
AIsHorizontalScrollBar:boolean); AIsHorizontalScrollBar:boolean);
begin begin
{TODO: create real instances for scrollbars via TGtk3Widget.CreateFrom() ?} {TODO: create real instances for scrollbars via TGtk3Widget.CreateFrom() ?}
if IsDesigning then
exit;
FBorderStyle := bsNone; FBorderStyle := bsNone;
if AIsHorizontalScrollBar then if AIsHorizontalScrollBar then
begin begin
g_signal_connect_data(getHorizontalScrollbar, 'change-value', if not FHBarInitialized then
TGCallback(@Gtk3RangeScrollCB), Self, nil, G_CONNECT_DEFAULT); g_signal_connect_data(getHorizontalScrollbar, 'change-value',
TGCallback(@Gtk3RangeScrollCB), Self, nil, G_CONNECT_DEFAULT);
FHBarInitialized := True;
end else end else
g_signal_connect_data(getVerticalScrollbar, 'change-value', begin
TGCallback(@Gtk3RangeScrollCB), Self, nil, G_CONNECT_DEFAULT); if not FVBarInitialized then
g_signal_connect_data(getVerticalScrollbar, 'change-value',
TGCallback(@Gtk3RangeScrollCB), Self, nil, G_CONNECT_DEFAULT);
FVBarInitialized := True;
end;
end; end;
{$IFDEF GTK3DEBUGSIZE} {$IFDEF GTK3DEBUGSIZE}