Browse Source

Reimplementing Application events using TApplicationEvents multicaster as Vcl.ScreenTips module uses that and hence hijacks the handlers

Source commit: 336c222ab8e33a8bc03894a4291c713e4e9ac095
Martin Prikryl 9 years ago
parent
commit
2ea1237427

+ 1 - 11
source/forms/CustomScpExplorer.cpp

@@ -168,8 +168,6 @@ __fastcall TCustomScpExplorerForm::TCustomScpExplorerForm(TComponent* Owner):
   RemoteDirView->Invalidate();
   RemoteDirView->Invalidate();
   DebugAssert(NonVisualDataModule && !NonVisualDataModule->ScpExplorer);
   DebugAssert(NonVisualDataModule && !NonVisualDataModule->ScpExplorer);
   NonVisualDataModule->ScpExplorer = this;
   NonVisualDataModule->ScpExplorer = this;
-  Application->OnMinimize = ApplicationMinimize;
-  Application->OnRestore = ApplicationRestore;
   FAutoOperation = false;
   FAutoOperation = false;
   FForceExecution = false;
   FForceExecution = false;
   FShowStatusBarHint = false;
   FShowStatusBarHint = false;
@@ -298,14 +296,6 @@ __fastcall TCustomScpExplorerForm::~TCustomScpExplorerForm()
   delete FSystemImageList;
   delete FSystemImageList;
   FSystemImageList = NULL;
   FSystemImageList = NULL;
 
 
-  if (Application->OnHint == ApplicationHint)
-  {
-    Application->OnHint = NULL;
-  }
-  DebugAssert(Application->OnMinimize == ApplicationMinimize);
-  Application->OnMinimize = NULL;
-  DebugAssert(Application->OnRestore == ApplicationRestore);
-  Application->OnRestore = NULL;
   delete FTrayIcon;
   delete FTrayIcon;
   FTrayIcon = NULL;
   FTrayIcon = NULL;
 
 
@@ -8496,7 +8486,7 @@ void __fastcall TCustomScpExplorerForm::DirViewEditing(
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 void __fastcall TCustomScpExplorerForm::FormActivate(TObject * /*Sender*/)
 void __fastcall TCustomScpExplorerForm::FormActivate(TObject * /*Sender*/)
 {
 {
-  Application->OnHint = ApplicationHint;
+  ApplicationEvents->OnHint = ApplicationHint;
 }
 }
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 TDragDropFilesEx * __fastcall TCustomScpExplorerForm::CreateDragDropFilesEx()
 TDragDropFilesEx * __fastcall TCustomScpExplorerForm::CreateDragDropFilesEx()

+ 7 - 0
source/forms/CustomScpExplorer.dfm

@@ -316,4 +316,11 @@ object CustomScpExplorerForm: TCustomScpExplorerForm
       Caption = 'TabSheet1'
       Caption = 'TabSheet1'
     end
     end
   end
   end
+  object ApplicationEvents: TApplicationEvents
+    OnHint = ApplicationHint
+    OnMinimize = ApplicationMinimize
+    OnRestore = ApplicationRestore
+    Left = 88
+    Top = 200
+  end
 end
 end

+ 4 - 2
source/forms/CustomScpExplorer.h

@@ -32,6 +32,7 @@
 #include "PngImageList.hpp"
 #include "PngImageList.hpp"
 #include "ThemePageControl.h"
 #include "ThemePageControl.h"
 #include "PathLabel.hpp"
 #include "PathLabel.hpp"
+#include <Vcl.AppEvnts.hpp>
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 class TProgressForm;
 class TProgressForm;
 class TSynchronizeProgressForm;
 class TSynchronizeProgressForm;
@@ -94,6 +95,9 @@ __published:
   TTBXSeparatorItem *TBXSeparatorItem57;
   TTBXSeparatorItem *TBXSeparatorItem57;
   TTBXItem *QueueDeleteAllDoneQueueToolbarItem;
   TTBXItem *QueueDeleteAllDoneQueueToolbarItem;
   TTBXItem *TBXItem173;
   TTBXItem *TBXItem173;
+  TApplicationEvents *ApplicationEvents;
+  void __fastcall ApplicationMinimize(TObject * Sender);
+  void __fastcall ApplicationRestore(TObject * Sender);
   void __fastcall RemoteDirViewContextPopup(TObject *Sender,
   void __fastcall RemoteDirViewContextPopup(TObject *Sender,
     const TPoint &MousePos, bool &Handled);
     const TPoint &MousePos, bool &Handled);
   void __fastcall RemoteDirViewGetSelectFilter(
   void __fastcall RemoteDirViewGetSelectFilter(
@@ -268,8 +272,6 @@ private:
   void __fastcall AdHocCustomCommandValidate(const TCustomCommandType & Command);
   void __fastcall AdHocCustomCommandValidate(const TCustomCommandType & Command);
   void __fastcall SetDockAllowDrag(bool value);
   void __fastcall SetDockAllowDrag(bool value);
   void __fastcall QueueSplitterDblClick(TObject * Sender);
   void __fastcall QueueSplitterDblClick(TObject * Sender);
-  void __fastcall ApplicationMinimize(TObject * Sender);
-  void __fastcall ApplicationRestore(TObject * Sender);
   void __fastcall AddQueueItem(TTerminalQueue * Queue, TTransferDirection Direction,
   void __fastcall AddQueueItem(TTerminalQueue * Queue, TTransferDirection Direction,
     TStrings * FileList, const UnicodeString TargetDirectory,
     TStrings * FileList, const UnicodeString TargetDirectory,
     const TCopyParamType & CopyParam, int Params);
     const TCopyParamType & CopyParam, int Params);

+ 1 - 6
source/forms/Editor.cpp

@@ -719,11 +719,6 @@ __fastcall TEditorForm::~TEditorForm()
     DoWindowClose(true);
     DoWindowClose(true);
   }
   }
 
 
-  if (Application->OnHint == ApplicationHint)
-  {
-    Application->OnHint = NULL;
-  }
-
   if (FStandaloneEditor)
   if (FStandaloneEditor)
   {
   {
     TerminateApplication();
     TerminateApplication();
@@ -1591,7 +1586,7 @@ void __fastcall TEditorForm::ApplicationHint(TObject * /*Sender*/)
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 void __fastcall TEditorForm::FormActivate(TObject * /*Sender*/)
 void __fastcall TEditorForm::FormActivate(TObject * /*Sender*/)
 {
 {
-  Application->OnHint = ApplicationHint;
+  ApplicationEvents->OnHint = ApplicationHint;
 }
 }
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 void __fastcall TEditorForm::FormKeyDown(TObject * /*Sender*/, WORD & Key, TShiftState Shift)
 void __fastcall TEditorForm::FormKeyDown(TObject * /*Sender*/, WORD & Key, TShiftState Shift)

+ 5 - 0
source/forms/Editor.dfm

@@ -9303,4 +9303,9 @@ object EditorForm: TEditorForm
     Top = 272
     Top = 272
     Bitmap = {}
     Bitmap = {}
   end
   end
+  object ApplicationEvents: TApplicationEvents
+    OnHint = ApplicationHint
+    Left = 464
+    Top = 208
+  end
 end
 end

+ 3 - 1
source/forms/Editor.h

@@ -24,6 +24,7 @@
 #include "PngImageList.hpp"
 #include "PngImageList.hpp"
 #include <System.Actions.hpp>
 #include <System.Actions.hpp>
 #include "TBXExtItems.hpp"
 #include "TBXExtItems.hpp"
+#include <Vcl.AppEvnts.hpp>
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 class TRichEdit20;
 class TRichEdit20;
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
@@ -79,6 +80,7 @@ __published:
   TPngImageList *EditorImages120;
   TPngImageList *EditorImages120;
   TPngImageList *EditorImages144;
   TPngImageList *EditorImages144;
   TPngImageList *EditorImages192;
   TPngImageList *EditorImages192;
+  TApplicationEvents *ApplicationEvents;
   void __fastcall EditorActionsUpdate(TBasicAction *Action, bool &Handled);
   void __fastcall EditorActionsUpdate(TBasicAction *Action, bool &Handled);
   void __fastcall EditorActionsExecute(TBasicAction *Action,
   void __fastcall EditorActionsExecute(TBasicAction *Action,
           bool &Handled);
           bool &Handled);
@@ -93,6 +95,7 @@ __published:
   void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
   void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
   void __fastcall FormActivate(TObject *Sender);
   void __fastcall FormActivate(TObject *Sender);
   void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
   void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
+  void __fastcall ApplicationHint(TObject * Sender);
 private:
 private:
   UnicodeString FFileName;
   UnicodeString FFileName;
   TNotifyEvent FOnFileChanged;
   TNotifyEvent FOnFileChanged;
@@ -122,7 +125,6 @@ private:
   static unsigned int FInstances;
   static unsigned int FInstances;
   void __fastcall SetFileName(const UnicodeString value);
   void __fastcall SetFileName(const UnicodeString value);
   void __fastcall SetParentForm(TCustomForm * value);
   void __fastcall SetParentForm(TCustomForm * value);
-  void __fastcall ApplicationHint(TObject * Sender);
   void __fastcall SetBackgroundColor(TColor Color);
   void __fastcall SetBackgroundColor(TColor Color);
 public:
 public:
   __fastcall TEditorForm(TComponent* Owner);
   __fastcall TEditorForm(TComponent* Owner);

+ 1 - 15
source/forms/Progress.cpp

@@ -75,7 +75,6 @@ __fastcall TProgressForm::TProgressForm(TComponent * AOwner, bool AllowMoveToQue
   FShowAsModalStorage = NULL;
   FShowAsModalStorage = NULL;
   FStarted = Now();
   FStarted = Now();
   FModalBeginHooked = false;
   FModalBeginHooked = false;
-  FPrevApplicationModalBegin = NULL;
   FModalLevel = -1;
   FModalLevel = -1;
   UseSystemSettings(this);
   UseSystemSettings(this);
 
 
@@ -116,13 +115,6 @@ __fastcall TProgressForm::~TProgressForm()
       qtInformation);
       qtInformation);
   }
   }
 
 
-  if (FModalBeginHooked)
-  {
-    DebugAssert(Application->OnModalBegin == ApplicationModalBegin);
-    Application->OnModalBegin = FPrevApplicationModalBegin;
-    FModalBeginHooked = false;
-  }
-
   ReleaseAsModal(this, FShowAsModalStorage);
   ReleaseAsModal(this, FShowAsModalStorage);
 }
 }
 //---------------------------------------------------------------------
 //---------------------------------------------------------------------
@@ -337,8 +329,7 @@ bool __fastcall TProgressForm::ReceiveData(bool Force, int ModalLevelOffset)
       {
       {
         // record state as of time, the window should be shown,
         // record state as of time, the window should be shown,
         // had not we implemented delayed show
         // had not we implemented delayed show
-        FPrevApplicationModalBegin = Application->OnModalBegin;
-        Application->OnModalBegin = ApplicationModalBegin;
+        ApplicationEvents->OnModalBegin = ApplicationModalBegin;
         FModalBeginHooked = true;
         FModalBeginHooked = true;
         FModalLevel = Application->ModalLevel;
         FModalLevel = Application->ModalLevel;
       }
       }
@@ -355,11 +346,6 @@ void __fastcall TProgressForm::ApplicationModalBegin(TObject * Sender)
   // The Application->ModalLevel is already incremented, but we should treat it as
   // The Application->ModalLevel is already incremented, but we should treat it as
   // if it were not as the dialog is not created yet (so we can popup if we are not yet).
   // if it were not as the dialog is not created yet (so we can popup if we are not yet).
   ReceiveData(true, -1);
   ReceiveData(true, -1);
-
-  if (FPrevApplicationModalBegin != NULL)
-  {
-    FPrevApplicationModalBegin(Sender);
-  }
 }
 }
 //---------------------------------------------------------------------
 //---------------------------------------------------------------------
 void __fastcall TProgressForm::SetProgressData(TFileOperationProgressType & AData)
 void __fastcall TProgressForm::SetProgressData(TFileOperationProgressType & AData)

+ 4 - 0
source/forms/Progress.dfm

@@ -4597,4 +4597,8 @@ object ProgressForm: TProgressForm
     Top = 240
     Top = 240
     Bitmap = {}
     Bitmap = {}
   end
   end
+  object ApplicationEvents: TApplicationEvents
+    Left = 128
+    Top = 192
+  end
 end
 end

+ 3 - 2
source/forms/Progress.h

@@ -22,6 +22,7 @@
 #include "TBX.hpp"
 #include "TBX.hpp"
 #include "TB2ExtItems.hpp"
 #include "TB2ExtItems.hpp"
 #include "TBXExtItems.hpp"
 #include "TBXExtItems.hpp"
+#include <Vcl.AppEvnts.hpp>
 #include <list>
 #include <list>
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
 class TProgressForm : public TForm
 class TProgressForm : public TForm
@@ -64,6 +65,7 @@ __published:
   TPngImageList *ImageList120;
   TPngImageList *ImageList120;
   TPngImageList *ImageList144;
   TPngImageList *ImageList144;
   TPngImageList *ImageList192;
   TPngImageList *ImageList192;
+  TApplicationEvents *ApplicationEvents;
   void __fastcall UpdateTimerTimer(TObject *Sender);
   void __fastcall UpdateTimerTimer(TObject *Sender);
   void __fastcall FormShow(TObject *Sender);
   void __fastcall FormShow(TObject *Sender);
   void __fastcall FormHide(TObject *Sender);
   void __fastcall FormHide(TObject *Sender);
@@ -78,6 +80,7 @@ __published:
   void __fastcall SpeedComboBoxItemAdjustImageIndex(TTBXComboBoxItem *Sender, const UnicodeString AText,
   void __fastcall SpeedComboBoxItemAdjustImageIndex(TTBXComboBoxItem *Sender, const UnicodeString AText,
           int AIndex, int &ImageIndex);
           int AIndex, int &ImageIndex);
   void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
   void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
+  void __fastcall ApplicationModalBegin(TObject * Sender);
 
 
 private:
 private:
   TCancelStatus FCancel;
   TCancelStatus FCancel;
@@ -100,7 +103,6 @@ private:
   TDateTime FStarted;
   TDateTime FStarted;
   int FSinceLastUpdate;
   int FSinceLastUpdate;
   bool FModalBeginHooked;
   bool FModalBeginHooked;
-  TNotifyEvent FPrevApplicationModalBegin;
   int FModalLevel;
   int FModalLevel;
   TFrameAnimation FFrameAnimation;
   TFrameAnimation FFrameAnimation;
   typedef BiDiMap<TOnceDoneOperation, TTBCustomItem *> TOnceDoneItems;
   typedef BiDiMap<TOnceDoneOperation, TTBCustomItem *> TOnceDoneItems;
@@ -114,7 +116,6 @@ private:
   bool __fastcall GetAllowMinimize();
   bool __fastcall GetAllowMinimize();
   void __fastcall SetReadOnly(bool value);
   void __fastcall SetReadOnly(bool value);
   void __fastcall GlobalMinimize(TObject * Sender);
   void __fastcall GlobalMinimize(TObject * Sender);
-  void __fastcall ApplicationModalBegin(TObject * Sender);
   UnicodeString __fastcall ItemSpeed(const UnicodeString & Text, TTBXComboBoxItem * Item);
   UnicodeString __fastcall ItemSpeed(const UnicodeString & Text, TTBXComboBoxItem * Item);
   bool __fastcall ApplicationHook(TMessage & Message);
   bool __fastcall ApplicationHook(TMessage & Message);
 
 

+ 1 - 0
source/forms/ScpCommander.h

@@ -36,6 +36,7 @@
 #include "TBXStatusBars.hpp"
 #include "TBXStatusBars.hpp"
 #include "TBXToolPals.hpp"
 #include "TBXToolPals.hpp"
 #include "ThemePageControl.h"
 #include "ThemePageControl.h"
+#include <Vcl.AppEvnts.hpp>
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 class TScpCommanderForm : public TCustomScpExplorerForm
 class TScpCommanderForm : public TCustomScpExplorerForm
 {
 {

+ 9 - 20
source/windows/TerminalManager.cpp

@@ -73,16 +73,13 @@ __fastcall TTerminalManager::TTerminalManager() :
   FTaskbarList = NULL;
   FTaskbarList = NULL;
   FAuthenticating = 0;
   FAuthenticating = 0;
 
 
-  DebugAssert(Application && !Application->OnException);
-  Application->OnException = ApplicationException;
-  DebugAssert(Application->OnShowHint == NULL);
-  Application->OnShowHint = ApplicationShowHint;
-  DebugAssert(Application->OnMessage == NULL);
-  Application->OnMessage = ApplicationMessage;
-  DebugAssert(Application->OnModalBegin == NULL);
-  Application->OnModalBegin = ApplicationModalBegin;
-  DebugAssert(Application->OnModalEnd == NULL);
-  Application->OnModalEnd = ApplicationModalEnd;
+  FApplicationsEvents.reset(new TApplicationEvents(Application));
+  FApplicationsEvents->OnException = ApplicationException;
+  FApplicationsEvents->OnShowHint = ApplicationShowHint;
+  FApplicationsEvents->OnMessage = ApplicationMessage;
+  FApplicationsEvents->OnModalBegin = ApplicationModalBegin;
+  FApplicationsEvents->OnModalEnd = ApplicationModalEnd;
+
   DebugAssert(WinConfiguration->OnMasterPasswordPrompt == NULL);
   DebugAssert(WinConfiguration->OnMasterPasswordPrompt == NULL);
   WinConfiguration->OnMasterPasswordPrompt = MasterPasswordPrompt;
   WinConfiguration->OnMasterPasswordPrompt = MasterPasswordPrompt;
 
 
@@ -107,16 +104,8 @@ __fastcall TTerminalManager::~TTerminalManager()
   DebugAssert(Configuration->OnChange == ConfigurationChange);
   DebugAssert(Configuration->OnChange == ConfigurationChange);
   Configuration->OnChange = NULL;
   Configuration->OnChange = NULL;
 
 
-  DebugAssert(Application && (Application->OnException == ApplicationException));
-  Application->OnException = NULL;
-  DebugAssert(Application->OnShowHint == ApplicationShowHint);
-  Application->OnShowHint = ApplicationShowHint;
-  DebugAssert(Application->OnMessage == ApplicationMessage);
-  Application->OnMessage = NULL;
-  DebugAssert(Application->OnModalBegin == ApplicationModalBegin);
-  Application->OnModalBegin = NULL;
-  DebugAssert(Application->OnModalEnd == ApplicationModalEnd);
-  Application->OnModalEnd = NULL;
+  FApplicationsEvents.reset(NULL);
+
   DebugAssert(WinConfiguration->OnMasterPasswordPrompt == MasterPasswordPrompt);
   DebugAssert(WinConfiguration->OnMasterPasswordPrompt == MasterPasswordPrompt);
   WinConfiguration->OnMasterPasswordPrompt = NULL;
   WinConfiguration->OnMasterPasswordPrompt = NULL;
 
 

+ 2 - 0
source/windows/TerminalManager.h

@@ -6,6 +6,7 @@
 #include <Queue.h>
 #include <Queue.h>
 #include <FileOperationProgress.h>
 #include <FileOperationProgress.h>
 #include <WinInterface.h>
 #include <WinInterface.h>
+#include <Vcl.AppEvnts.hpp>
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 class TCustomScpExplorerForm;
 class TCustomScpExplorerForm;
 class TLogMemo;
 class TLogMemo;
@@ -98,6 +99,7 @@ private:
   int FAuthenticating;
   int FAuthenticating;
   void * FBusyToken;
   void * FBusyToken;
   bool FAuthenticationCancelled;
   bool FAuthenticationCancelled;
+  std::unique_ptr<TApplicationEvents> FApplicationsEvents;
 
 
   bool __fastcall ConnectActiveTerminalImpl(bool Reopen);
   bool __fastcall ConnectActiveTerminalImpl(bool Reopen);
   bool __fastcall ConnectActiveTerminal();
   bool __fastcall ConnectActiveTerminal();