aboutsummaryrefslogtreecommitdiffhomepage
path: root/win32/PlatWin.cxx
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2020-06-06 10:09:29 +1000
committerNeil <nyamatongwe@gmail.com>2020-06-06 10:09:29 +1000
commitb5b2247de50e20e7db3c64e786aab788d9f49148 (patch)
tree721bba5f0c53167e5e9c7dd2b5a15061e9d9f41c /win32/PlatWin.cxx
parenteadb190f1bb1303dffcfcb1e8d5305a2c1e2ef60 (diff)
downloadscintilla-mirror-b5b2247de50e20e7db3c64e786aab788d9f49148.tar.gz
Defer most initialisation until Scintilla window is created.
Previously, more initialisation was performed inside DllMain but some actions such as loading libraries are unsafe inside DllMain. Avoid listbox UnregisterClass if no attempt to register which will occur if no Scintilla windows were created. std::call_once is used to ensure initialisation is performed at most once.
Diffstat (limited to 'win32/PlatWin.cxx')
-rw-r--r--win32/PlatWin.cxx8
1 files changed, 5 insertions, 3 deletions
diff --git a/win32/PlatWin.cxx b/win32/PlatWin.cxx
index a7bc5626c..96f642824 100644
--- a/win32/PlatWin.cxx
+++ b/win32/PlatWin.cxx
@@ -3243,8 +3243,10 @@ bool ListBoxX_Register() noexcept {
return ::RegisterClassEx(&wndclassc) != 0;
}
-bool ListBoxX_Unregister() noexcept {
- return ::UnregisterClass(ListBoxX_ClassName, hinstPlatformRes) != 0;
+void ListBoxX_Unregister() noexcept {
+ if (hinstPlatformRes) {
+ ::UnregisterClass(ListBoxX_ClassName, hinstPlatformRes);
+ }
}
}
@@ -3374,7 +3376,7 @@ void Platform::Assert(const char *c, const char *file, int line) {
}
}
-void Platform_Initialise(void *hInstance) {
+void Platform_Initialise(void *hInstance) noexcept {
hinstPlatformRes = static_cast<HINSTANCE>(hInstance);
LoadDpiForWindow();
ListBoxX_Register();