aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornyamatongwe <unknown>2001-05-21 11:11:14 +0000
committernyamatongwe <unknown>2001-05-21 11:11:14 +0000
commit54ccb03d29f1f1dfeba0c8d81c0c13743a862ec7 (patch)
treeee8791ea91777108d786e220244a74a3a5a656af
parent877f10c2fc4bb89b4755b9cbc82977a92070c849 (diff)
downloadscintilla-mirror-54ccb03d29f1f1dfeba0c8d81c0c13743a862ec7.tar.gz
Update from Simon to make startup and finalise work properly.
-rw-r--r--win32/ExternalLexer.cxx31
-rw-r--r--win32/ExternalLexer.h10
-rw-r--r--win32/ScintillaWin.cxx11
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() {