diff options
-rw-r--r-- | include/m_system.h | 4 | ||||
-rw-r--r-- | libs/win32/mir_app.lib | bin | 200562 -> 200822 bytes | |||
-rw-r--r-- | libs/win64/mir_app.lib | bin | 196200 -> 196440 bytes | |||
-rw-r--r-- | src/mir_app/src/mir_app.def | 1 | ||||
-rw-r--r-- | src/mir_app/src/mir_app64.def | 1 | ||||
-rw-r--r-- | src/mir_app/src/miranda.cpp | 38 |
6 files changed, 40 insertions, 4 deletions
diff --git a/include/m_system.h b/include/m_system.h index bb09588421..0361d86c7e 100644 --- a/include/m_system.h +++ b/include/m_system.h @@ -89,6 +89,10 @@ EXTERN_C MIR_APP_DLL(void) Miranda_GetFileVersion(MFileVersion*); // returns 0 on success, nonzero on failure
EXTERN_C MIR_APP_DLL(void) Miranda_GetVersionText(char *pDest, size_t cbSize);
+// returns a system window that can handle global timers
+// a usual practice is to use a unique pointer as a timer id
+EXTERN_C MIR_APP_DLL(class CDlgBase *) Miranda_GetSystemWindow();
+
// Adds an event to the list to be checked in the main message loop
// when a handle gets triggered, an appopriate stub gets called
typedef void (CALLBACK *MWaitableStub)(void);
diff --git a/libs/win32/mir_app.lib b/libs/win32/mir_app.lib Binary files differindex 83a7a6e314..f3e73b705b 100644 --- a/libs/win32/mir_app.lib +++ b/libs/win32/mir_app.lib diff --git a/libs/win64/mir_app.lib b/libs/win64/mir_app.lib Binary files differindex 2ef99c4248..1ce43d250d 100644 --- a/libs/win64/mir_app.lib +++ b/libs/win64/mir_app.lib diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def index 5a11ad4b0f..a178beb036 100644 --- a/src/mir_app/src/mir_app.def +++ b/src/mir_app/src/mir_app.def @@ -329,6 +329,7 @@ ProtoGetAvatarFormatByMimeType @400 ProtoGetAvatarMimeType @401
?set_uin@DB_AUTH_BLOB@@QAEXK@Z @402 NONAME
??0CSrmmBaseDialog@@IAE@AAVCMPluginBase@@HPAUSESSION_INFO@@@Z @403 NONAME
+Miranda_GetSystemWindow @404 NONAME
??1CSrmmBaseDialog@@UAE@XZ @405 NONAME
Srmm_FindDialog @406 NONAME
??_7CSrmmBaseDialog@@6B@ @407 NONAME
diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def index f32ae8db09..d6f40b51b8 100644 --- a/src/mir_app/src/mir_app64.def +++ b/src/mir_app/src/mir_app64.def @@ -329,6 +329,7 @@ ProtoGetAvatarFormatByMimeType @400 ProtoGetAvatarMimeType @401
?set_uin@DB_AUTH_BLOB@@QEAAXK@Z @402 NONAME
??0CSrmmBaseDialog@@IEAA@AEAVCMPluginBase@@HPEAUSESSION_INFO@@@Z @403 NONAME
+Miranda_GetSystemWindow @404 NONAME
??1CSrmmBaseDialog@@UEAA@XZ @405 NONAME
Srmm_FindDialog @406 NONAME
??_7CSrmmBaseDialog@@6B@ @407 NONAME
diff --git a/src/mir_app/src/miranda.cpp b/src/mir_app/src/miranda.cpp index b67b93b2a2..758fe9f89f 100644 --- a/src/mir_app/src/miranda.cpp +++ b/src/mir_app/src/miranda.cpp @@ -202,6 +202,8 @@ static int SystemShutdownProc(WPARAM, LPARAM) return 0;
}
+/////////////////////////////////////////////////////////////////////////////////////////
+
#define MIRANDA_PROCESS_WAIT_TIMEOUT 60000
#define MIRANDA_PROCESS_WAIT_RESOLUTION 1000
#define MIRANDA_PROCESS_WAIT_STEPS (MIRANDA_PROCESS_WAIT_TIMEOUT/MIRANDA_PROCESS_WAIT_RESOLUTION)
@@ -264,6 +266,23 @@ INT_PTR CheckRestart() return 0;
}
+/////////////////////////////////////////////////////////////////////////////////////////
+
+class MSystemWindow : public CDlgBase
+{
+
+public:
+ MSystemWindow() :
+ CDlgBase(g_plugin, -1)
+ {
+ m_hwnd = CreateWindowEx(0, L"STATIC", nullptr, 0, 0, 0, 0, 0, nullptr, nullptr, g_plugin.getInst(), nullptr);
+ }
+};
+
+static MSystemWindow *g_pSystemWindow;
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
static void crtErrorHandler(const wchar_t*, const wchar_t*, const wchar_t*, unsigned, uintptr_t)
{}
@@ -322,7 +341,9 @@ int WINAPI mir_main(LPTSTR cmdLine) CoCreateInstance(CLSID_TaskbarList, nullptr, CLSCTX_ALL, IID_ITaskbarList3, (void**)&pTaskbarInterface);
OpenSSL_Init();
-
+
+ g_pSystemWindow = new MSystemWindow();
+
int result = 0;
if (LoadDefaultModules()) {
g_bMirandaTerminated = true;
@@ -393,14 +414,18 @@ int WINAPI mir_main(LPTSTR cmdLine) UnloadNewPluginsModule();
UnloadCoreModule();
- FreeLibrary(hDwmApi);
- FreeLibrary(hThemeAPI);
+
+ if (hDwmApi)
+ FreeLibrary(hDwmApi);
+ if (hThemeAPI)
+ FreeLibrary(hThemeAPI);
if (pTaskbarInterface)
pTaskbarInterface->Release();
+ delete g_pSystemWindow;
+
OpenSSL_Cleanup();
-
OleUninitialize();
if (bufferedPaintUninit)
@@ -491,6 +516,11 @@ MIR_APP_DLL(void) Miranda_GetVersionText(char *pDest, size_t cbSize) #endif
}
+MIR_APP_DLL(CDlgBase *) Miranda_GetSystemWindow()
+{
+ return g_pSystemWindow;
+}
+
///////////////////////////////////////////////////////////////////////////////
extern HANDLE hOptionsInitEvent;
|