diff options
author | George Hazan <ghazan@miranda.im> | 2017-12-06 20:06:44 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2017-12-06 20:06:44 +0300 |
commit | 09bce81d5eae2a46dd039e9fa14290c77685d637 (patch) | |
tree | 00d3a8332aff9d667d385eaaeb078de4edc441b4 /plugins/StatusManager/src/AdvancedAutoAway | |
parent | 5a16d189158c71db28c481a44706c73c83fd6e76 (diff) |
fixes #1054 (StatusManager cannot enable/disable modules "on the fly")
Diffstat (limited to 'plugins/StatusManager/src/AdvancedAutoAway')
3 files changed, 51 insertions, 31 deletions
diff --git a/plugins/StatusManager/src/AdvancedAutoAway/aaa_options.cpp b/plugins/StatusManager/src/AdvancedAutoAway/aaa_options.cpp index 3f48a7bee4..3a733b9074 100644 --- a/plugins/StatusManager/src/AdvancedAutoAway/aaa_options.cpp +++ b/plugins/StatusManager/src/AdvancedAutoAway/aaa_options.cpp @@ -342,7 +342,7 @@ static INT_PTR CALLBACK DlgProcAutoAwayRulesOpts(HWND hwndDlg, UINT msg, WPARAM for (int i = 0; i < optionSettings.getCount(); i++) WriteAutoAwaySetting(optionSettings[i], optionSettings[i].m_szName); } - AAALoadOptions(autoAwaySettings, FALSE); + AAALoadOptions(autoAwaySettings, false); } break; @@ -407,7 +407,7 @@ static INT_PTR CALLBACK DlgProcAutoAwayGeneralOpts(HWND hwndDlg, UINT msg, WPARA db_set_w(0, AAAMODULENAME, SETTING_CONFIRMDELAY, (WORD)GetDlgItemInt(hwndDlg, IDC_CONFIRMDELAY, nullptr, FALSE)); db_set_b(0, AAAMODULENAME, SETTING_MONITORMOUSE, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_MONITORMOUSE)); db_set_b(0, AAAMODULENAME, SETTING_MONITORKEYBOARD, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_MONITORKEYBOARD)); - AAALoadOptions(autoAwaySettings, FALSE); + AAALoadOptions(autoAwaySettings, false); } break; } @@ -429,16 +429,16 @@ int AutoAwayOptInitialise(WPARAM wParam, LPARAM) odp.szTab.a = LPGEN("General"); odp.pfnDlgProc = DlgProcAutoAwayGeneralOpts; odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_GENAUTOAWAY); - Options_AddPage(wParam, &odp); + Options_AddPage(wParam, &odp, AAALangPack); odp.szTab.a = LPGEN("Rules"); odp.pfnDlgProc = DlgProcAutoAwayRulesOpts; odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_AUTOAWAY); - Options_AddPage(wParam, &odp); + Options_AddPage(wParam, &odp, AAALangPack); odp.szTab.a = LPGEN("Status messages"); odp.pfnDlgProc = DlgProcAutoAwayMsgOpts; odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_AUTOAWAYMSG); - Options_AddPage(wParam, &odp); + Options_AddPage(wParam, &odp, AAALangPack); return 0; } diff --git a/plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.cpp b/plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.cpp index aba644ffd4..41e09bc0bf 100644 --- a/plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.cpp +++ b/plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.cpp @@ -49,7 +49,10 @@ TAAAProtoSetting::~TAAAProtoSetting() ///////////////////////////////////////////////////////////////////////////////////////// -HANDLE hStateChangedEvent = nullptr; +int AAALangPack; + +static HANDLE hStateChangedEvent = nullptr; +static HANDLE hEvents[4]; static BOOL ignoreLockKeys = FALSE; static BOOL ignoreSysKeys = FALSE; @@ -86,16 +89,21 @@ extern char *StatusModeToDbSetting(int status, const char *suffix); ///////////////////////////////////////////////////////////////////////////////////////// // Load from DB -void AAALoadOptions(TAAAProtoSettingList &loadSettings, BOOL override) +void AAAUnloadOptions(bool bOverride) { - // if override is enabled, samesettings will be ignored (for options loading) - int monitorMiranda = FALSE; // use windows hooks? - int monitorAll = FALSE; // use windows hooks? - - if (!override) + if (!bOverride) UnhookWindowsHooks(); if (hAutoAwayTimer != 0) KillTimer(nullptr, hAutoAwayTimer); +} + +void AAALoadOptions(TAAAProtoSettingList &loadSettings, bool bOverride) +{ + // if bOverride is enabled, samesettings will be ignored (for options loading) + int monitorMiranda = FALSE; // use windows hooks? + int monitorAll = FALSE; // use windows hooks? + + AAAUnloadOptions(bOverride); ignoreLockKeys = db_get_b(0, AAAMODULENAME, SETTING_IGNLOCK, FALSE); ignoreSysKeys = db_get_b(0, AAAMODULENAME, SETTING_IGNSYSKEYS, FALSE); @@ -106,12 +114,12 @@ void AAALoadOptions(TAAAProtoSettingList &loadSettings, BOOL override) for (int i = 0; i < loadSettings.getCount(); i++) { char* protoName; - if ((db_get_b(0, AAAMODULENAME, SETTING_SAMESETTINGS, 0)) && !override) + if ((db_get_b(0, AAAMODULENAME, SETTING_SAMESETTINGS, 0)) && !bOverride) protoName = SETTING_ALL; else protoName = loadSettings[i].m_szName; LoadAutoAwaySetting(loadSettings[i], protoName); - if (!override) { + if (!bOverride) { if (loadSettings[i].optionFlags & FLAG_MONITORMIRANDA) monitorMiranda = TRUE; else if (ignoreLockKeys || ignoreSysKeys || ignoreAltCombo || (monitorMouse != monitorKeyboard)) @@ -539,24 +547,17 @@ static LRESULT CALLBACK KeyBoardHookFunction(int code, WPARAM wParam, LPARAM lPa static int AutoAwayShutdown(WPARAM, LPARAM) { - KillTimer(nullptr, hAutoAwayTimer); - -#ifdef TRIGGERPLUGIN - DeInitTrigger(); -#endif - UnhookWindowsHooks(); - DestroyHookableEvent(hStateChangedEvent); - - autoAwaySettings.destroy(); + AAAUnloadOptions(false); return 0; } int AAAModuleLoaded(WPARAM, LPARAM) { - HookEvent(ME_PROTO_ACCLISTCHANGED, OnAAAAccChanged); - HookEvent(ME_OPT_INITIALISE, AutoAwayOptInitialise); - HookEvent(ME_SYSTEM_PRESHUTDOWN, AutoAwayShutdown); - HookEvent(ME_PROTO_ACK, ProcessProtoAck); + hEvents[0] = HookEvent(ME_PROTO_ACCLISTCHANGED, OnAAAAccChanged); + hEvents[1] = HookEvent(ME_OPT_INITIALISE, AutoAwayOptInitialise); + hEvents[2] = HookEvent(ME_SYSTEM_PRESHUTDOWN, AutoAwayShutdown); + hEvents[3] = HookEvent(ME_PROTO_ACK, ProcessProtoAck); + mouseStationaryTimer = 0; lastInput = lastMirandaInput = GetTickCount(); @@ -574,17 +575,36 @@ int AAAModuleLoaded(WPARAM, LPARAM) //////////////////////////////////////////////////////////////////////////////////////// - AAALoadOptions(autoAwaySettings, FALSE); + AAALoadOptions(autoAwaySettings, false); return 0; } void AdvancedAutoAwayLoad() { - HookEvent(ME_SYSTEM_MODULESLOADED, AAAModuleLoaded); + AAALangPack = GetPluginLangId(MIID_LAST, 0); + + if (g_bMirandaLoaded) { + AAAModuleLoaded(0, 0); + AutoAwayOptInitialise(0, 0); + } + else HookEvent(ME_SYSTEM_MODULESLOADED, AAAModuleLoaded); + hStateChangedEvent = CreateHookableEvent(ME_AAA_STATECHANGED); } void AdvancedAutoAwayUnload() { - DestroyHookableEvent(hStateChangedEvent); + if (g_bMirandaLoaded) + AutoAwayShutdown(0, 0); + + KillModuleOptions(AAALangPack); + + for (int i = 0; i < _countof(hEvents); i++) { + UnhookEvent(hEvents[i]); + hEvents[i] = nullptr; + } + + DestroyHookableEvent(hStateChangedEvent); hStateChangedEvent = nullptr; + + autoAwaySettings.destroy(); } diff --git a/plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.h b/plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.h index 6feb889b99..43f9637d79 100644 --- a/plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.h +++ b/plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.h @@ -79,6 +79,6 @@ typedef OBJLIST<TAAAProtoSetting> TAAAProtoSettingList; extern TAAAProtoSettingList autoAwaySettings; int LoadAutoAwaySetting(TAAAProtoSetting &autoAwaySetting, char *protoName); -void AAALoadOptions(TAAAProtoSettingList &settings, BOOL override); +void AAALoadOptions(TAAAProtoSettingList &settings, bool override); #endif |