From 43fc37b844a3c9f32a2fda3fda751bbfdaa6a911 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 29 Mar 2018 15:45:41 +0300 Subject: fixes #1224 (Crash when launch in service mode) --- plugins/DbEditorPP/src/main.cpp | 10 +- src/mir_app/src/clistcore.cpp | 273 ++++++++++++++++++++-------------------- src/mir_app/src/modules.cpp | 32 ++--- src/mir_app/src/utils.cpp | 5 +- 4 files changed, 160 insertions(+), 160 deletions(-) diff --git a/plugins/DbEditorPP/src/main.cpp b/plugins/DbEditorPP/src/main.cpp index f72c886360..dcb399e72f 100644 --- a/plugins/DbEditorPP/src/main.cpp +++ b/plugins/DbEditorPP/src/main.cpp @@ -165,11 +165,13 @@ int PreShutdown(WPARAM, LPARAM) INT_PTR ServiceMode(WPARAM, LPARAM) { - IcoLibRegister(); - g_bServiceMode = true; - - HookEvent(ME_DB_CONTACT_SETTINGCHANGED, DBSettingChanged); + if (!g_bServiceMode) { + g_bServiceMode = true; + IcoLibRegister(); + HookEvent(ME_DB_CONTACT_SETTINGCHANGED, DBSettingChanged); + } + return SERVICE_ONLYDB; // load database and then call us } diff --git a/src/mir_app/src/clistcore.cpp b/src/mir_app/src/clistcore.cpp index 800bc4c0c6..99e4af117f 100644 --- a/src/mir_app/src/clistcore.cpp +++ b/src/mir_app/src/clistcore.cpp @@ -36,8 +36,6 @@ static wchar_t szTip[MAX_TIP_SIZE+1]; void BuildProtoMenus(void); -static int interfaceInited = 0; - static void fnPaintClc(HWND, ClcData*, HDC, RECT*) { } @@ -69,144 +67,143 @@ static void fnReloadProtoMenus(void) cli.pfnCluiProtocolStatusChanged(0, nullptr); } -MIR_APP_DLL(CLIST_INTERFACE*) Clist_GetInterface(void) +void InitClistCore() { - if (interfaceInited == 0) { - cli.version = 6; - cli.bDisplayLocked = TRUE; - - cli.pfnClcOptionsChanged = fnClcOptionsChanged; - cli.pfnContactListControlWndProc = fnContactListControlWndProc; - - cli.pfnRegisterFileDropping = fnRegisterFileDropping; - cli.pfnUnregisterFileDropping = fnUnregisterFileDropping; - - cli.pfnGetRowsPriorTo = fnGetRowsPriorTo; - cli.pfnFindItem = fnFindItem; - cli.pfnGetRowByIndex = fnGetRowByIndex; - cli.pfnGetContactHiddenStatus = fnGetContactHiddenStatus; - - - cli.pfnAddGroup = fnAddGroup; - cli.pfnAddItemToGroup = fnAddItemToGroup; - cli.pfnCreateClcContact = fnCreateClcContact; - cli.pfnRemoveItemFromGroup = fnRemoveItemFromGroup; - cli.pfnFreeContact = fnFreeContact; - cli.pfnFreeGroup = fnFreeGroup; - cli.pfnAddInfoItemToGroup = fnAddInfoItemToGroup; - cli.pfnAddContactToGroup = fnAddContactToGroup; - cli.pfnAddContactToTree = fnAddContactToTree; - cli.pfnDeleteItemFromTree = fnDeleteItemFromTree; - cli.pfnRebuildEntireList = fnRebuildEntireList; - cli.pfnGetGroupContentsCount = fnGetGroupContentsCount; - cli.pfnSortCLC = fnSortCLC; - cli.pfnSaveStateAndRebuildList = fnSaveStateAndRebuildList; - - cli.pfnProcessExternalMessages = fnProcessExternalMessages; - - cli.pfnPaintClc = fnPaintClc; - - cli.pfnGetGroupCountsText = fnGetGroupCountsText; - cli.pfnHitTest = fnHitTest; - cli.pfnScrollTo = fnScrollTo; - cli.pfnEnsureVisible = fnEnsureVisible; - cli.pfnRecalcScrollBar = fnRecalcScrollBar; - cli.pfnSetGroupExpand = fnSetGroupExpand; - cli.pfnDoSelectionDefaultAction = fnDoSelectionDefaultAction; - cli.pfnFindRowByText = fnFindRowByText; - cli.pfnEndRename = fnEndRename; - cli.pfnDeleteFromContactList = fnDeleteFromContactList; - cli.pfnBeginRenameSelection = fnBeginRenameSelection; - cli.pfnCalcEipPosition = fnCalcEipPosition; - cli.pfnGetDropTargetInformation = fnGetDropTargetInformation; - cli.pfnClcStatusToPf2 = fnClcStatusToPf2; - cli.pfnIsHiddenMode = fnIsHiddenMode; - cli.pfnIsVisibleContact = fnIsVisibleContact; - cli.pfnHideInfoTip = fnHideInfoTip; - cli.pfnNotifyNewContact = fnNotifyNewContact; - cli.pfnGetDefaultExStyle = fnGetDefaultExStyle; - cli.pfnGetDefaultFontSetting = fnGetDefaultFontSetting; - cli.pfnGetFontSetting = fnGetFontSetting; - cli.pfnLoadClcOptions = fnLoadClcOptions; - cli.pfnRecalculateGroupCheckboxes = fnRecalculateGroupCheckboxes; - cli.pfnSetGroupChildCheckboxes = fnSetGroupChildCheckboxes; - cli.pfnSetContactCheckboxes = fnSetContactCheckboxes; - cli.pfnInvalidateItem = fnInvalidateItem; - cli.pfnGetRowBottomY = fnGetRowBottomY; - cli.pfnGetRowHeight = fnGetRowHeight; - cli.pfnGetRowTopY = fnGetRowTopY; - cli.pfnGetRowTotalHeight = fnGetRowTotalHeight; - cli.pfnRowHitTest = fnRowHitTest; - - cli.pfnAddEvent = fnAddEvent; - cli.pfnEventsProcessContactDoubleClick = fnEventsProcessContactDoubleClick; - cli.pfnEventsProcessTrayDoubleClick = fnEventsProcessTrayDoubleClick; - cli.pfnGetEvent = fnGetEvent; - cli.pfnGetImlIconIndex = fnGetImlIconIndex; - cli.pfnRemoveEvent = fnRemoveEvent; - - cli.pfnGetContactDisplayName = fnGetContactDisplayName; - cli.pfnInvalidateDisplayNameCacheEntry = fnInvalidateDisplayNameCacheEntry; - cli.pfnCreateCacheItem = fnCreateCacheItem; - cli.pfnCheckCacheItem = fnCheckCacheItem; - cli.pfnFreeCacheItem = fnFreeCacheItem; - cli.pfnGetCacheEntry = fnGetCacheEntry; - - cli.szTip = szTip; - cli.pfnInitTray = fnInitTray; - cli.pfnUninitTray = fnUninitTray; - - cli.pfnTrayCycleTimerProc = fnTrayCycleTimerProc; - cli.pfnTrayIconAdd = fnTrayIconAdd; - cli.pfnTrayIconDestroy = fnTrayIconDestroy; - cli.pfnTrayIconIconsChanged = fnTrayIconIconsChanged; - cli.pfnTrayIconInit = fnTrayIconInit; - cli.pfnTrayIconMakeTooltip = fnTrayIconMakeTooltip; - cli.pfnTrayIconPauseAutoHide = fnTrayIconPauseAutoHide; - cli.pfnTrayIconProcessMessage = fnTrayIconProcessMessage; - cli.pfnTrayIconRemove = fnTrayIconRemove; - cli.pfnTrayIconSetBaseInfo = fnTrayIconSetBaseInfo; - cli.pfnTrayIconSetToBase = fnTrayIconSetToBase; - cli.pfnTrayIconTaskbarCreated = fnTrayIconTaskbarCreated; - cli.pfnTrayIconUpdate = fnTrayIconUpdate; - cli.pfnTrayIconUpdateBase = fnTrayIconUpdateBase; - cli.pfnTrayCalcChanged = fnTrayCalcChanged; - cli.pfnTrayIconUpdateWithImageList = fnTrayIconUpdateWithImageList; - - cli.pfnContactListWndProc = fnContactListWndProc; - cli.pfnLoadCluiGlobalOpts = fnLoadCluiGlobalOpts; - cli.pfnCluiProtocolStatusChanged = fnCluiProtocolStatusChanged; - cli.pfnDrawMenuItem = fnDrawMenuItem; - cli.pfnInvalidateRect = fnInvalidateRect; - cli.pfnOnCreateClc = fnOnCreateClc; - - cli.pfnChangeContactIcon = fnChangeContactIcon; - cli.pfnLoadContactTree = fnLoadContactTree; - cli.pfnSetHideOffline = fnSetHideOffline; - - cli.pfnDocking_ProcessWindowMessage = fnDocking_ProcessWindowMessage; - - cli.pfnGetIconFromStatusMode = fnGetIconFromStatusMode; - cli.pfnGetWindowVisibleState = fnGetWindowVisibleState; - cli.pfnIconFromStatusMode = fnIconFromStatusMode; - cli.pfnShowHide = fnShowHide; - cli.pfnGetStatusModeDescription = fnGetStatusModeDescription; - - cli.pfnGetProtocolVisibility = fnGetProtocolVisibility; - cli.pfnGetProtoIndexByPos = fnGetProtoIndexByPos; - cli.pfnReloadProtoMenus = fnReloadProtoMenus; - cli.pfnGetAccountIndexByPos = fnGetAccountIndexByPos; - cli.pfnGetProtocolMenu = fnGetProtocolMenu; - - cli.pfnReloadExtraIcons = fnReloadExtraIcons; - cli.pfnSetAllExtraIcons = fnSetAllExtraIcons; - - cli.pfnGetContactIcon = fnGetContactIcon; - cli.pfnGetAverageMode = fnGetAverageMode; - cli.pfnInitAutoRebuild = fnInitAutoRebuild; - interfaceInited = 1; - } + cli.version = 6; + cli.bDisplayLocked = TRUE; + + cli.pfnClcOptionsChanged = fnClcOptionsChanged; + cli.pfnContactListControlWndProc = fnContactListControlWndProc; + + cli.pfnRegisterFileDropping = fnRegisterFileDropping; + cli.pfnUnregisterFileDropping = fnUnregisterFileDropping; + + cli.pfnGetRowsPriorTo = fnGetRowsPriorTo; + cli.pfnFindItem = fnFindItem; + cli.pfnGetRowByIndex = fnGetRowByIndex; + cli.pfnGetContactHiddenStatus = fnGetContactHiddenStatus; + + cli.pfnAddGroup = fnAddGroup; + cli.pfnAddItemToGroup = fnAddItemToGroup; + cli.pfnCreateClcContact = fnCreateClcContact; + cli.pfnRemoveItemFromGroup = fnRemoveItemFromGroup; + cli.pfnFreeContact = fnFreeContact; + cli.pfnFreeGroup = fnFreeGroup; + cli.pfnAddInfoItemToGroup = fnAddInfoItemToGroup; + cli.pfnAddContactToGroup = fnAddContactToGroup; + cli.pfnAddContactToTree = fnAddContactToTree; + cli.pfnDeleteItemFromTree = fnDeleteItemFromTree; + cli.pfnRebuildEntireList = fnRebuildEntireList; + cli.pfnGetGroupContentsCount = fnGetGroupContentsCount; + cli.pfnSortCLC = fnSortCLC; + cli.pfnSaveStateAndRebuildList = fnSaveStateAndRebuildList; + + cli.pfnProcessExternalMessages = fnProcessExternalMessages; + + cli.pfnPaintClc = fnPaintClc; + + cli.pfnGetGroupCountsText = fnGetGroupCountsText; + cli.pfnHitTest = fnHitTest; + cli.pfnScrollTo = fnScrollTo; + cli.pfnEnsureVisible = fnEnsureVisible; + cli.pfnRecalcScrollBar = fnRecalcScrollBar; + cli.pfnSetGroupExpand = fnSetGroupExpand; + cli.pfnDoSelectionDefaultAction = fnDoSelectionDefaultAction; + cli.pfnFindRowByText = fnFindRowByText; + cli.pfnEndRename = fnEndRename; + cli.pfnDeleteFromContactList = fnDeleteFromContactList; + cli.pfnBeginRenameSelection = fnBeginRenameSelection; + cli.pfnCalcEipPosition = fnCalcEipPosition; + cli.pfnGetDropTargetInformation = fnGetDropTargetInformation; + cli.pfnClcStatusToPf2 = fnClcStatusToPf2; + cli.pfnIsHiddenMode = fnIsHiddenMode; + cli.pfnIsVisibleContact = fnIsVisibleContact; + cli.pfnHideInfoTip = fnHideInfoTip; + cli.pfnNotifyNewContact = fnNotifyNewContact; + cli.pfnGetDefaultExStyle = fnGetDefaultExStyle; + cli.pfnGetDefaultFontSetting = fnGetDefaultFontSetting; + cli.pfnGetFontSetting = fnGetFontSetting; + cli.pfnLoadClcOptions = fnLoadClcOptions; + cli.pfnRecalculateGroupCheckboxes = fnRecalculateGroupCheckboxes; + cli.pfnSetGroupChildCheckboxes = fnSetGroupChildCheckboxes; + cli.pfnSetContactCheckboxes = fnSetContactCheckboxes; + cli.pfnInvalidateItem = fnInvalidateItem; + cli.pfnGetRowBottomY = fnGetRowBottomY; + cli.pfnGetRowHeight = fnGetRowHeight; + cli.pfnGetRowTopY = fnGetRowTopY; + cli.pfnGetRowTotalHeight = fnGetRowTotalHeight; + cli.pfnRowHitTest = fnRowHitTest; + + cli.pfnAddEvent = fnAddEvent; + cli.pfnEventsProcessContactDoubleClick = fnEventsProcessContactDoubleClick; + cli.pfnEventsProcessTrayDoubleClick = fnEventsProcessTrayDoubleClick; + cli.pfnGetEvent = fnGetEvent; + cli.pfnGetImlIconIndex = fnGetImlIconIndex; + cli.pfnRemoveEvent = fnRemoveEvent; + + cli.pfnGetContactDisplayName = fnGetContactDisplayName; + cli.pfnInvalidateDisplayNameCacheEntry = fnInvalidateDisplayNameCacheEntry; + cli.pfnCreateCacheItem = fnCreateCacheItem; + cli.pfnCheckCacheItem = fnCheckCacheItem; + cli.pfnFreeCacheItem = fnFreeCacheItem; + cli.pfnGetCacheEntry = fnGetCacheEntry; + + cli.szTip = szTip; + cli.pfnInitTray = fnInitTray; + cli.pfnUninitTray = fnUninitTray; + + cli.pfnTrayCycleTimerProc = fnTrayCycleTimerProc; + cli.pfnTrayIconAdd = fnTrayIconAdd; + cli.pfnTrayIconDestroy = fnTrayIconDestroy; + cli.pfnTrayIconIconsChanged = fnTrayIconIconsChanged; + cli.pfnTrayIconInit = fnTrayIconInit; + cli.pfnTrayIconMakeTooltip = fnTrayIconMakeTooltip; + cli.pfnTrayIconPauseAutoHide = fnTrayIconPauseAutoHide; + cli.pfnTrayIconProcessMessage = fnTrayIconProcessMessage; + cli.pfnTrayIconRemove = fnTrayIconRemove; + cli.pfnTrayIconSetBaseInfo = fnTrayIconSetBaseInfo; + cli.pfnTrayIconSetToBase = fnTrayIconSetToBase; + cli.pfnTrayIconTaskbarCreated = fnTrayIconTaskbarCreated; + cli.pfnTrayIconUpdate = fnTrayIconUpdate; + cli.pfnTrayIconUpdateBase = fnTrayIconUpdateBase; + cli.pfnTrayCalcChanged = fnTrayCalcChanged; + cli.pfnTrayIconUpdateWithImageList = fnTrayIconUpdateWithImageList; + + cli.pfnContactListWndProc = fnContactListWndProc; + cli.pfnLoadCluiGlobalOpts = fnLoadCluiGlobalOpts; + cli.pfnCluiProtocolStatusChanged = fnCluiProtocolStatusChanged; + cli.pfnDrawMenuItem = fnDrawMenuItem; + cli.pfnInvalidateRect = fnInvalidateRect; + cli.pfnOnCreateClc = fnOnCreateClc; + + cli.pfnChangeContactIcon = fnChangeContactIcon; + cli.pfnLoadContactTree = fnLoadContactTree; + cli.pfnSetHideOffline = fnSetHideOffline; + + cli.pfnDocking_ProcessWindowMessage = fnDocking_ProcessWindowMessage; + + cli.pfnGetIconFromStatusMode = fnGetIconFromStatusMode; + cli.pfnGetWindowVisibleState = fnGetWindowVisibleState; + cli.pfnIconFromStatusMode = fnIconFromStatusMode; + cli.pfnShowHide = fnShowHide; + cli.pfnGetStatusModeDescription = fnGetStatusModeDescription; + + cli.pfnGetProtocolVisibility = fnGetProtocolVisibility; + cli.pfnGetProtoIndexByPos = fnGetProtoIndexByPos; + cli.pfnReloadProtoMenus = fnReloadProtoMenus; + cli.pfnGetAccountIndexByPos = fnGetAccountIndexByPos; + cli.pfnGetProtocolMenu = fnGetProtocolMenu; + + cli.pfnReloadExtraIcons = fnReloadExtraIcons; + cli.pfnSetAllExtraIcons = fnSetAllExtraIcons; + + cli.pfnGetContactIcon = fnGetContactIcon; + cli.pfnGetAverageMode = fnGetAverageMode; + cli.pfnInitAutoRebuild = fnInitAutoRebuild; +} +MIR_APP_DLL(CLIST_INTERFACE*) Clist_GetInterface(void) +{ if (g_bReadyToInitClist) { LoadContactListModule2(); LoadCLCModule(); diff --git a/src/mir_app/src/modules.cpp b/src/mir_app/src/modules.cpp index a8abaac4c9..a4730df8a6 100644 --- a/src/mir_app/src/modules.cpp +++ b/src/mir_app/src/modules.cpp @@ -84,9 +84,9 @@ int LoadDefaultModules(void) { // load order is very important for these if (LoadSystemModule()) return 1; - if (LoadLangPackModule()) return 1; // langpack will be a system module in the new order so this is moved here + if (LoadLangPackModule()) return 1; // langpack will be a system module in the new order so this is moved here if (CheckRestart()) return 1; - if (LoadUtilsModule()) return 1; //order not important for this, but no dependencies and no point in pluginising + if (LoadUtilsModule()) return 1; if (LoadIcoTabsModule()) return 1; if (LoadHeaderbarModule()) return 1; if (LoadDbintfModule()) return 1; @@ -119,18 +119,6 @@ int LoadDefaultModules(void) if (LoadIcoLibModule()) return 1; if (LoadSkinIcons()) return 1; - if (LoadSkinSounds()) return 1; - if (LoadSkinHotkeys()) return 1; - if (LoadFontserviceModule()) return 1; - if (LoadSrmmModule()) return 1; - if (LoadChatModule()) return 1; - if (LoadSendRecvAuthModule()) return 1; - if (LoadDescButtonModule()) return 1; - if (LoadOptionsModule()) return 1; - if (LoadNetlibModule()) return 1; - if (LoadSslModule()) return 1; - if (LoadProtocolsModule()) return 1; - // check if a service plugin is scheduled to execution if (plugin_service != nullptr) { if (LoadProtocolPlugins()) return 1; @@ -146,10 +134,22 @@ int LoadDefaultModules(void) default: // smth went wrong, terminating return 1; } - + plugin_service = nullptr; } + if (LoadSkinSounds()) return 1; + if (LoadSkinHotkeys()) return 1; + if (LoadFontserviceModule()) return 1; + if (LoadSrmmModule()) return 1; + if (LoadChatModule()) return 1; + if (LoadSendRecvAuthModule()) return 1; + if (LoadDescButtonModule()) return 1; + if (LoadOptionsModule()) return 1; + if (LoadNetlibModule()) return 1; + if (LoadSslModule()) return 1; + if (LoadProtocolsModule()) return 1; + LoadDbAccounts(); // retrieves the account array from a database if (LoadContactsModule()) return 1; if (LoadMetacontacts()) return 1; @@ -161,7 +161,7 @@ int LoadDefaultModules(void) if (LoadAccountsModule()) return 1; - //order becomes less important below here + // order becomes less important below here if (LoadFindAddModule()) return 1; if (LoadIgnoreModule()) return 1; if (LoadVisibilityModule()) return 1; diff --git a/src/mir_app/src/utils.cpp b/src/mir_app/src/utils.cpp index 170c7db7c2..f70c00c22d 100644 --- a/src/mir_app/src/utils.cpp +++ b/src/mir_app/src/utils.cpp @@ -26,11 +26,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define MS_SYSTEM_GET_MD5I "Miranda/System/GetMD5I" -INT_PTR ResizeDialog(WPARAM wParam, LPARAM lParam); - int InitCrypt(void); void UninitCrypt(void); +void InitClistCore(void); + INT_PTR __cdecl svcEnterString(WPARAM, LPARAM lParam); static BOOL bModuleInitialized = FALSE; @@ -328,6 +328,7 @@ int LoadUtilsModule(void) CreateServiceFunction(MS_UTILS_ENTERSTRING, svcEnterString); InitCrypt(); + InitClistCore(); return 0; } -- cgit v1.2.3