diff options
Diffstat (limited to 'plugins/StatusManager/src/StartupStatus')
3 files changed, 23 insertions, 33 deletions
diff --git a/plugins/StatusManager/src/StartupStatus/ss_options.cpp b/plugins/StatusManager/src/StartupStatus/ss_options.cpp index 569aef54e2..338839197d 100644 --- a/plugins/StatusManager/src/StartupStatus/ss_options.cpp +++ b/plugins/StatusManager/src/StartupStatus/ss_options.cpp @@ -397,7 +397,7 @@ static INT_PTR CALLBACK StartupStatusOptDlgProc(HWND hwndDlg, UINT msg, WPARAM w int defProfile = (int)SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETITEMDATA, SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0), 0); - TProtoSettings ps(protoList); + TProtoSettings ps = protoList; GetProfile(defProfile, ps); CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_CMDLOPTIONS), hwndDlg, CmdlOptionsDlgProc, (LPARAM)&ps); diff --git a/plugins/StatusManager/src/StartupStatus/ss_profiles.cpp b/plugins/StatusManager/src/StartupStatus/ss_profiles.cpp index d8251c28f2..872139fc83 100644 --- a/plugins/StatusManager/src/StartupStatus/ss_profiles.cpp +++ b/plugins/StatusManager/src/StartupStatus/ss_profiles.cpp @@ -21,15 +21,20 @@ #define MAX_MMITEMS 6 -extern HINSTANCE hInst; +struct PROFILECE +{ + int profile; + ptrA szProto; + ptrW msg; +}; + +static OBJLIST<PROFILECE> arProfiles(1); + extern int protoCount; static int menuprofiles[MAX_MMITEMS]; static int mcount = 0; -static PROFILECE *pce = nullptr; -static int pceCount = 0; - static UINT_PTR releaseTtbTimerId = 0; static HANDLE hTBModuleLoadedHook; @@ -128,23 +133,21 @@ wchar_t* GetStatusMessage(int profile, const char *szProto) char dbSetting[80]; mir_snprintf(dbSetting, "%d_%s_%s", profile, szProto, SETTING_PROFILE_STSMSG); - for (int i = 0; i < pceCount; i++) { - if ((pce[i].profile == profile) && (!mir_strcmp(pce[i].szProto, szProto))) { - replaceStrW(pce[i].msg, db_get_wsa(0, SSMODULENAME, dbSetting)); - return pce[i].msg; + for (int i = 0; i < arProfiles.getCount(); i++) { + auto &p = arProfiles[i]; + if (p.profile == profile && !mir_strcmp(p.szProto, szProto)) { + p.msg = db_get_wsa(0, SSMODULENAME, dbSetting); + return p.msg; } } - pce = (PROFILECE*)mir_realloc(pce, (pceCount + 1)*sizeof(PROFILECE)); - if (pce == nullptr) - return nullptr; - - pce[pceCount].profile = profile; - pce[pceCount].szProto = _strdup(szProto); - pce[pceCount].msg = db_get_wsa(0, SSMODULENAME, dbSetting); - pceCount++; + PROFILECE *pce = new PROFILECE; + pce->profile = profile; + pce->szProto = mir_strdup(szProto); + pce->msg = db_get_wsa(0, SSMODULENAME, dbSetting); + arProfiles.insert(pce); - return pce[pceCount - 1].msg; + return pce->msg; } void FillStatus(SMProto &ps, int profile) @@ -195,7 +198,7 @@ INT_PTR LoadAndSetProfile(WPARAM iProfileNo, LPARAM) { // wParam == profile no. int profile = (int)iProfileNo; - TProtoSettings profileSettings(protoList); + TProtoSettings profileSettings = protoList; if (!GetProfile(profile, profileSettings)) { profile = (profile >= 0) ? profile : db_get_w(0, SSMODULENAME, SETTING_DEFAULTPROFILE, 0); @@ -322,13 +325,7 @@ int InitProfileModule() int DeinitProfilesModule() { - if (pce) { - for (int i = 0; i < pceCount; i++) - mir_free(pce[i].szProto); - mir_free(pce); - pce = nullptr; - } - pceCount = 0; + arProfiles.destroy(); UnregisterHotKeys(); RemoveTopToolbarButtons(); diff --git a/plugins/StatusManager/src/StartupStatus/startupstatus.h b/plugins/StatusManager/src/StartupStatus/startupstatus.h index 47d6bd3d0e..5d16d50843 100644 --- a/plugins/StatusManager/src/StartupStatus/startupstatus.h +++ b/plugins/StatusManager/src/StartupStatus/startupstatus.h @@ -21,13 +21,6 @@ #define SSMODULENAME "StartupStatus" -struct PROFILECE -{ - int profile; - char *szProto; - wchar_t *msg; -}; - struct PROFILEOPTIONS : public MZeroedObject { __inline PROFILEOPTIONS() : |