From ec7a5c0cd18402197333359b4b2e970025bc7f74 Mon Sep 17 00:00:00 2001 From: michl Date: Wed, 30 Jan 2019 21:54:31 +0000 Subject: [PATCH] LCL: GTK2: Fixed memory leak in StatusBar. Issue #34951 git-svn-id: trunk@60250 - --- lcl/interfaces/gtk2/gtk2proc.inc | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lcl/interfaces/gtk2/gtk2proc.inc b/lcl/interfaces/gtk2/gtk2proc.inc index 4f4d0d7c7a..d5f7b6926b 100644 --- a/lcl/interfaces/gtk2/gtk2proc.inc +++ b/lcl/interfaces/gtk2/gtk2proc.inc @@ -6263,6 +6263,7 @@ var NewShadowType: TGtkShadowType; NewJustification: TGtkJustification; xalign, yalign: gfloat; + MessageId: guint; begin //DebugLn('UpdateStatusBarPanel ',DbgS(StatusBar),' Index=',dbgs(Index)); AStatusBar := StatusBar as TStatusBar; @@ -6293,10 +6294,11 @@ begin 'state'); //DebugLn(' PanelText="',PanelText,'"'); if PanelText <> '' then - gtk_statusbar_push(PGTKStatusBar(StatusPanelWidget), ContextID, PGChar(PanelText)) + MessageId := gtk_statusbar_push(PGTKStatusBar(StatusPanelWidget), ContextID, PGChar(PanelText)) else - gtk_statusbar_push(PGTKStatusBar(StatusPanelWidget), ContextID, ''); - + MessageId := gtk_statusbar_push(PGTKStatusBar(StatusPanelWidget), ContextID, ''); + if MessageId > 1 then + gtk_statusbar_remove(PGTKStatusBar(StatusPanelWidget), ContextID, MessageId - 1); if CurPanel <> nil then begin @@ -6339,8 +6341,9 @@ begin g_object_set_data(PGObject(StatusPanelWidget),'lcl_statusbar_id', @AStatusBar.Panels[Index].ID); - g_signal_connect_after(StatusPanelWidget, 'expose-event', - TGtkSignalFunc(@gtk2PaintStatusBarWidget), AStatusBar); + if AStatusBar.Panels[Index].Style = psOwnerDraw then + g_signal_connect_after(StatusPanelWidget, 'expose-event', + TGtkSignalFunc(@gtk2PaintStatusBarWidget), AStatusBar); end; end;