summaryrefslogtreecommitdiff
path: root/plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.cpp')
-rw-r--r--plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.cpp62
1 files changed, 36 insertions, 26 deletions
diff --git a/plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.cpp b/plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.cpp
index 734d50ffdb..270375e94c 100644
--- a/plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.cpp
+++ b/plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.cpp
@@ -116,7 +116,7 @@ int LoadAutoAwaySetting(SMProto &autoAwaySetting, char* protoName)
{
char setting[128];
mir_snprintf(setting, "%s_OptionFlags", protoName);
- autoAwaySetting.optionFlags = db_get_w(0, AAAMODULENAME, setting, FLAG_LV2ONINACTIVE | FLAG_RESET);
+ autoAwaySetting.optionFlags = db_get_w(0, AAAMODULENAME, setting, FLAG_LV2ONINACTIVE | FLAG_RESET | FLAG_ENTERIDLE);
mir_snprintf(setting, "%s_AwayTime", protoName);
autoAwaySetting.awayTime = db_get_w(0, AAAMODULENAME, setting, SETTING_AWAYTIME_DEFAULT);
mir_snprintf(setting, "%s_NATime", protoName);
@@ -173,7 +173,7 @@ static char* status2descr(int status)
return "ERROR";
}
-static int changeState(SMProto &setting, STATES newState)
+static int changeState(SMProto &setting, int mode, STATES newState)
{
if (setting.curState == newState)
return 0;
@@ -198,6 +198,13 @@ static int changeState(SMProto &setting, STATES newState)
setting.m_szMsg = nullptr;
}
+ if (setting.optionFlags & FLAG_ENTERIDLE) {
+ if (newState == ACTIVE) // we're returning back
+ Idle_Enter(-1);
+ else
+ Idle_Enter(mode);
+ }
+
return 0;
}
@@ -209,7 +216,7 @@ static VOID CALLBACK AutoAwayTimer(HWND, UINT, UINT_PTR, DWORD)
for (auto &it : protoList) {
it->aaaStatus = ID_STATUS_DISABLED;
- BOOL bTrigger = false;
+ int mode = 0;
if (it->optionFlags & FLAG_MONITORMIRANDA)
mouseStationaryTimer = (GetTickCount() - lastMirandaInput) / 1000;
@@ -225,45 +232,48 @@ static VOID CALLBACK AutoAwayTimer(HWND, UINT, UINT_PTR, DWORD)
int currentMode = Proto_GetStatus(it->m_szName);
if (it->optionFlags & FLAG_ONSAVER)
- bTrigger |= IsScreenSaverRunning();
- if (it->optionFlags & FLAG_ONLOCK)
- bTrigger |= IsWorkstationLocked();
- if (it->optionFlags & FLAG_ONTS)
- bTrigger |= IsTerminalDisconnected();
- if (it->optionFlags & FLAG_FULLSCREEN)
- bTrigger |= IsFullScreen();
+ mode = 1;
+ else if (it->optionFlags & FLAG_ONLOCK)
+ mode = 2;
+ else if (it->optionFlags & FLAG_ONTS)
+ mode = 3;
+ else if (it->optionFlags & FLAG_FULLSCREEN)
+ mode = 4;
/* check states */
if (it->curState == ACTIVE) {
- if (((mouseStationaryTimer >= sts1Time && (it->optionFlags & FLAG_ONMOUSE)) || bTrigger) && currentMode != it->lv1Status && it->statusFlags&StatusModeToProtoFlag(currentMode)) {
+ if (((mouseStationaryTimer >= sts1Time && (it->optionFlags & FLAG_ONMOUSE)) || mode) && currentMode != it->lv1Status && it->statusFlags&StatusModeToProtoFlag(currentMode)) {
+ if (it->optionFlags & FLAG_ONMOUSE)
+ mode = 5;
+
/* from ACTIVE to STATUS1_SET */
it->m_lastStatus = it->originalStatusMode = Proto_GetStatus(it->m_szName);
it->aaaStatus = it->lv1Status;
it->sts1setTimer = GetTickCount();
sts1setTime = 0;
it->bStatusChanged = statusChanged = true;
- changeState(*it, STATUS1_SET);
+ changeState(*it, mode, STATUS1_SET);
}
else if (mouseStationaryTimer >= sts2Time && currentMode == it->lv1Status && currentMode != it->lv2Status && (it->optionFlags & FLAG_SETNA) && (it->statusFlags & StatusModeToProtoFlag(currentMode))) {
/* from ACTIVE to STATUS2_SET */
it->m_lastStatus = it->originalStatusMode = Proto_GetStatus(it->m_szName);
it->aaaStatus = it->lv2Status;
it->bStatusChanged = statusChanged = true;
- changeState(*it, STATUS2_SET);
+ changeState(*it, mode, STATUS2_SET);
}
}
if (it->curState == STATUS1_SET) {
- if ((mouseStationaryTimer < sts1Time && !bTrigger) && !(it->optionFlags & FLAG_RESET)) {
+ if ((mouseStationaryTimer < sts1Time && !mode) && !(it->optionFlags & FLAG_RESET)) {
/* from STATUS1_SET to HIDDEN_ACTIVE */
- changeState(*it, HIDDEN_ACTIVE);
+ changeState(*it, mode, HIDDEN_ACTIVE);
it->m_lastStatus = Proto_GetStatus(it->m_szName);
}
- else if (((mouseStationaryTimer < sts1Time) && !bTrigger) &&
- ((it->optionFlags & FLAG_LV2ONINACTIVE) || (!(it->optionFlags&FLAG_SETNA))) &&
+ else if (((mouseStationaryTimer < sts1Time) && !mode) &&
+ ((it->optionFlags & FLAG_LV2ONINACTIVE) || (!(it->optionFlags & FLAG_SETNA))) &&
(it->optionFlags & FLAG_RESET)) {
/* from STATUS1_SET to SET_ORGSTATUS */
- changeState(*it, SET_ORGSTATUS);
+ changeState(*it, mode, SET_ORGSTATUS);
}
else if ((it->optionFlags & FLAG_SETNA) && sts1setTime >= sts2Time) {
/* when set STATUS2, currentMode doesn't have to be in the selected status list (statusFlags) */
@@ -271,19 +281,19 @@ static VOID CALLBACK AutoAwayTimer(HWND, UINT, UINT_PTR, DWORD)
it->m_lastStatus = Proto_GetStatus(it->m_szName);
it->aaaStatus = it->lv2Status;
it->bStatusChanged = statusChanged = true;
- changeState(*it, STATUS2_SET);
+ changeState(*it, mode, STATUS2_SET);
}
}
if (it->curState == STATUS2_SET) {
- if (mouseStationaryTimer < sts2Time && !bTrigger && (it->optionFlags & FLAG_RESET)) {
+ if (mouseStationaryTimer < sts2Time && !mode && (it->optionFlags & FLAG_RESET)) {
/* from STATUS2_SET to SET_ORGSTATUS */
- changeState(*it, SET_ORGSTATUS);
+ changeState(*it, mode, SET_ORGSTATUS);
}
- else if (mouseStationaryTimer < sts2Time && !bTrigger && !(it->optionFlags & FLAG_RESET)) {
+ else if (mouseStationaryTimer < sts2Time && !mode && !(it->optionFlags & FLAG_RESET)) {
/* from STATUS2_SET to HIDDEN_ACTIVE */
/* Remember: after status1 is set, and "only on inactive" is NOT set, it implies !reset. */
- changeState(*it, HIDDEN_ACTIVE);
+ changeState(*it, mode, HIDDEN_ACTIVE);
it->m_lastStatus = Proto_GetStatus(it->m_szName);
}
}
@@ -292,7 +302,7 @@ static VOID CALLBACK AutoAwayTimer(HWND, UINT, UINT_PTR, DWORD)
if (it->bManualStatus) {
/* HIDDEN_ACTIVE to ACTIVE */
// it->bStatusChanged = false;
- changeState(*it, ACTIVE);
+ changeState(*it, mode, ACTIVE);
it->sts1setTimer = 0;
it->bManualStatus = false;
}
@@ -303,7 +313,7 @@ static VOID CALLBACK AutoAwayTimer(HWND, UINT, UINT_PTR, DWORD)
it->m_lastStatus = it->originalStatusMode = Proto_GetStatus(it->m_szName);
it->aaaStatus = it->lv2Status;
it->bStatusChanged = statusChanged = true;
- changeState(*it, STATUS2_SET);
+ changeState(*it, mode, STATUS2_SET);
}
}
if (it->curState == SET_ORGSTATUS) {
@@ -312,7 +322,7 @@ static VOID CALLBACK AutoAwayTimer(HWND, UINT, UINT_PTR, DWORD)
it->aaaStatus = it->originalStatusMode;
confirm = (it->optionFlags & FLAG_CONFIRM) ? TRUE : confirm;
it->bStatusChanged = statusChanged = true;
- changeState(*it, ACTIVE);
+ changeState(*it, mode, ACTIVE);
it->sts1setTimer = 0;
}
it->bManualStatus = false;