diff options
author | nyamatongwe <unknown> | 2001-05-21 11:11:14 +0000 |
---|---|---|
committer | nyamatongwe <unknown> | 2001-05-21 11:11:14 +0000 |
commit | 54ccb03d29f1f1dfeba0c8d81c0c13743a862ec7 (patch) | |
tree | ee8791ea91777108d786e220244a74a3a5a656af | |
parent | 877f10c2fc4bb89b4755b9cbc82977a92070c849 (diff) | |
download | scintilla-mirror-54ccb03d29f1f1dfeba0c8d81c0c13743a862ec7.tar.gz |
Update from Simon to make startup and finalise work properly.
-rw-r--r-- | win32/ExternalLexer.cxx | 31 | ||||
-rw-r--r-- | win32/ExternalLexer.h | 10 | ||||
-rw-r--r-- | win32/ScintillaWin.cxx | 11 |
3 files changed, 42 insertions, 10 deletions
diff --git a/win32/ExternalLexer.cxx b/win32/ExternalLexer.cxx index d6df40343..77c235940 100644 --- a/win32/ExternalLexer.cxx +++ b/win32/ExternalLexer.cxx @@ -21,6 +21,7 @@ int LexerManager::UseCount = 0; LexerLibrary *LexerManager::first = NULL; LexerLibrary *LexerManager::last = NULL; +LexerManager *LexerManager::firstlm = NULL; //------------------------------------------ // @@ -210,7 +211,8 @@ LexerManager::LexerManager() { UseCount++; if (1 == UseCount) { - EnumerateLexers(); + firstlm = this; + m_bLoaded = false; } } @@ -279,4 +281,31 @@ LexerManager::~LexerManager() { last = NULL; } } + if (this == firstlm) + firstlm = NULL; +} + +void LexerManager::Load() +{ + if(!m_bLoaded) + { + m_bLoaded = true; + EnumerateLexers(); + } } + +// Return a LexerManager, or create one and then return it. +LexerManager *LexerManager::GetInstance() { + if(!firstlm) + firstlm = new LexerManager; + return firstlm; +} + +LMMinder::~LMMinder() +{ + LexerManager *rem = LexerManager::firstlm; + if(rem) + delete rem; +} + +LMMinder minder; diff --git a/win32/ExternalLexer.h b/win32/ExternalLexer.h index bbc2cf4f6..62d786991 100644 --- a/win32/ExternalLexer.h +++ b/win32/ExternalLexer.h @@ -61,14 +61,24 @@ private: // LexerManager manages external lexers, contains LexerLibrarys. class LexerManager { + friend class LMMinder; public: LexerManager(); ~LexerManager(); + void Load(); + static LexerManager *GetInstance(); private: + bool m_bLoaded; void EnumerateLexers(); static int UseCount; static LexerLibrary *first; static LexerLibrary *last; + static LexerManager *firstlm; +}; + +class LMMinder { +public: + ~LMMinder(); }; #endif diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index ffd804e2d..e5c751e93 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -147,10 +147,6 @@ class ScintillaWin : static HINSTANCE hInstance; -#ifdef SCI_LEXER - LexerManager *lexMan; -#endif - ScintillaWin(HWND hwnd); ScintillaWin(const ScintillaWin &) : ScintillaBase() {} virtual ~ScintillaWin(); @@ -269,7 +265,8 @@ void ScintillaWin::Initialise() { OleInitialize(NULL); #ifdef SCI_LEXER - lexMan = new LexerManager; + LexerManager *lexMan = LexerManager::GetInstance(); + lexMan->Load(); #endif } @@ -278,10 +275,6 @@ void ScintillaWin::Finalise() { SetTicking(false); RevokeDragDrop(wMain.GetID()); OleUninitialize(); - -#ifdef SCI_LEXER - delete lexMan; -#endif } void ScintillaWin::StartDrag() { |