From 42ad042ae5fa10a49becaad13ccccbc921998de7 Mon Sep 17 00:00:00 2001 From: paul Date: Thu, 24 Sep 2009 09:29:27 +0000 Subject: [PATCH] lcl: protect TTrayIcon code from the PopupMenu component destruction git-svn-id: trunk@21846 - --- lcl/extctrls.pp | 4 +++- lcl/include/customtrayicon.inc | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lcl/extctrls.pp b/lcl/extctrls.pp index 105a87cd4c..7ccc701b69 100644 --- a/lcl/extctrls.pp +++ b/lcl/extctrls.pp @@ -1170,12 +1170,14 @@ type function GetCanvas: TCanvas; procedure SetHint(const AValue: string); procedure SetIcon(const AValue: TIcon); + procedure SetPopUpMenu(const AValue: TPopupMenu); procedure SetVisible(Value: Boolean); procedure HandleNotifierClose(Sender: TObject; var CloseAction: TCloseAction); procedure HandleNotifierTimeout(Sender: TObject); procedure IconChanged(Sender: TObject); protected class procedure WSRegisterClass; override; + procedure Notification(AComponent: TComponent; Operation: TOperation); override; public Handle: PtrInt; constructor Create(TheOwner: TComponent); override; @@ -1191,7 +1193,7 @@ type property BalloonTimeout: Integer read FBalloonTimeout write FBalloonTimeout default 3000; property BalloonTitle: string read FBalloonTitle write FBalloonTitle; property Canvas: TCanvas read GetCanvas; - property PopUpMenu: TPopupMenu read FPopUpMenu write FPopUpMenu; + property PopUpMenu: TPopupMenu read FPopUpMenu write SetPopUpMenu; property Icon: TIcon read FIcon write SetIcon; property Hint: string read FHint write SetHint; property ShowIcon: Boolean read FShowIcon write FShowIcon default True; diff --git a/lcl/include/customtrayicon.inc b/lcl/include/customtrayicon.inc index eec2c35916..0f9650a80c 100644 --- a/lcl/include/customtrayicon.inc +++ b/lcl/include/customtrayicon.inc @@ -173,6 +173,14 @@ begin RegisterCustomTrayIcon; end; +procedure TCustomTrayIcon.Notification(AComponent: TComponent; + Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + if (Operation = opRemove) and (AComponent = FPopUpMenu) then + PopupMenu := nil; +end; + {******************************************************************* * TCustomTrayIcon.InternalUpdate () * @@ -267,4 +275,13 @@ begin FIcon.Assign(AValue); end; +procedure TCustomTrayIcon.SetPopUpMenu(const AValue: TPopupMenu); +begin + if FPopUpMenu = AValue then + Exit; + FPopupMenu := AValue; + if FPopupMenu <> nil then + FPopUpMenu.FreeNotification(Self); +end; + // included by extctrls.pp