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() { | 
