From ad00be4b125963ad410ddd8745230948c9e19fda Mon Sep 17 00:00:00 2001 From: juha Date: Wed, 9 Sep 2015 08:24:55 +0000 Subject: [PATCH] IDE: Detach desktop selection button from its action by Application.QueueAsyncCall. Prevents an AV. Patch from Ondrej Pokorny. git-svn-id: trunk@49793 - --- ide/desktopmanager.pas | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/ide/desktopmanager.pas b/ide/desktopmanager.pas index f2baebbf24..aefe727345 100644 --- a/ide/desktopmanager.pas +++ b/ide/desktopmanager.pas @@ -62,8 +62,11 @@ type end; TShowDesktopsToolButton = class(TIDEToolButton) + private class var + DoChangeDesktopName: string; private procedure ChangeDesktop(Sender: TObject); + class procedure DoChangeDesktop({%H-}Data: PtrInt); procedure SaveAsDesktop(Sender: TObject); procedure MenuOnPopup(Sender: TObject); @@ -143,11 +146,17 @@ begin end; procedure TShowDesktopsToolButton.ChangeDesktop(Sender: TObject); +begin + DoChangeDesktopName := (Sender as TShowDesktopItem).DesktopName; + Application.QueueAsyncCall(@DoChangeDesktop, 1); +end; + +class procedure TShowDesktopsToolButton.DoChangeDesktop(Data: PtrInt); var xDesktopName: string; xDesktop: TDesktopOpt; begin - xDesktopName := (Sender as TShowDesktopItem).DesktopName; + xDesktopName := DoChangeDesktopName; if xDesktopName = '' then Exit;