From 372fc3b29c2134708a2e67d81f6e8f81247df50b Mon Sep 17 00:00:00 2001 From: zeljan1 Date: Tue, 21 Jan 2025 16:18:01 +0100 Subject: [PATCH] Gtk3: safe guard against duplicate signal assignment. --- lcl/interfaces/gtk3/gtk3widgets.pas | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/lcl/interfaces/gtk3/gtk3widgets.pas b/lcl/interfaces/gtk3/gtk3widgets.pas index 5c33e42c8a..f0a87d3663 100644 --- a/lcl/interfaces/gtk3/gtk3widgets.pas +++ b/lcl/interfaces/gtk3/gtk3widgets.pas @@ -503,6 +503,7 @@ type TGtk3ScrollableWin = class(TGtk3Container) private FBorderStyle: TBorderStyle; + FHBarInitialized, FVBarInitialized: boolean; function GetHScrollBarPolicy: TGtkPolicyType; function GetVScrollBarPolicy: TGtkPolicyType; procedure SetBorderStyle(AValue: TBorderStyle); @@ -5685,14 +5686,22 @@ procedure TGtk3ScrollableWin.SetScrollBarsSignalHandlers(const AIsHorizontalScrollBar:boolean); begin {TODO: create real instances for scrollbars via TGtk3Widget.CreateFrom() ?} + if IsDesigning then + exit; FBorderStyle := bsNone; if AIsHorizontalScrollBar then begin - g_signal_connect_data(getHorizontalScrollbar, 'change-value', - TGCallback(@Gtk3RangeScrollCB), Self, nil, G_CONNECT_DEFAULT); + if not FHBarInitialized then + g_signal_connect_data(getHorizontalScrollbar, 'change-value', + TGCallback(@Gtk3RangeScrollCB), Self, nil, G_CONNECT_DEFAULT); + FHBarInitialized := True; end else - g_signal_connect_data(getVerticalScrollbar, 'change-value', - TGCallback(@Gtk3RangeScrollCB), Self, nil, G_CONNECT_DEFAULT); + begin + if not FVBarInitialized then + g_signal_connect_data(getVerticalScrollbar, 'change-value', + TGCallback(@Gtk3RangeScrollCB), Self, nil, G_CONNECT_DEFAULT); + FVBarInitialized := True; + end; end; {$IFDEF GTK3DEBUGSIZE}