[POWERCFG] Fix-up the lid, power button and sleep button settings according to the power capabilities.

This commit is contained in:
Eric Kohl 2019-05-09 23:56:37 +02:00
parent dc7f4f682f
commit 3a207cdf27

View file

@ -94,7 +94,10 @@ IsBatteryUsed(VOID)
} }
POWER_ACTION POWER_ACTION
GetPowerActionFromPolicy(POWER_ACTION_POLICY *Policy) GetPowerActionFromPolicy(
POWER_ACTION_POLICY *Policy,
PSYSTEM_POWER_CAPABILITIES spc,
BOOL bIsLid)
{ {
POWER_ACTION poAction = PowerActionNone; POWER_ACTION poAction = PowerActionNone;
/* /*
@ -132,6 +135,15 @@ GetPowerActionFromPolicy(POWER_ACTION_POLICY *Policy)
else else
{ {
poAction = Policy->Action; poAction = Policy->Action;
if ((poAction == PowerActionHibernate) && !(spc->SystemS4 && spc->HiberFilePresent))
poAction = PowerActionSleep;
if ((poAction == PowerActionSleep) && !(spc->SystemS1 || spc->SystemS2 || spc->SystemS3))
{
if (bIsLid)
poAction = PowerActionNone;
else
poAction = PowerActionShutdown;
}
} }
return poAction; return poAction;
@ -141,12 +153,14 @@ VOID
ShowCurrentPowerActionPolicy(HWND hDlgCtrl, ShowCurrentPowerActionPolicy(HWND hDlgCtrl,
POWER_ACTION *lpAction, POWER_ACTION *lpAction,
DWORD dwActionSize, DWORD dwActionSize,
POWER_ACTION_POLICY *Policy) POWER_ACTION_POLICY *Policy,
PSYSTEM_POWER_CAPABILITIES spc,
BOOL bIsLid)
{ {
int poActionIndex; int poActionIndex;
POWER_ACTION poAction; POWER_ACTION poAction;
poAction = GetPowerActionFromPolicy(Policy); poAction = GetPowerActionFromPolicy(Policy, spc, bIsLid);
poActionIndex = FindActionIndex(lpAction, dwActionSize, poAction); poActionIndex = FindActionIndex(lpAction, dwActionSize, poAction);
if (poActionIndex < 0) if (poActionIndex < 0)
@ -176,12 +190,12 @@ SaveCurrentPowerActionPolicy(IN HWND hDlgCtrl,
{ {
case PowerActionNone: case PowerActionNone:
Policy->Action = PowerActionNone; Policy->Action = PowerActionNone;
Policy->EventCode = POWER_FORCE_TRIGGER_RESET; Policy->EventCode = POWER_FORCE_TRIGGER_RESET;
break; break;
case PowerActionWarmEject: case PowerActionWarmEject:
Policy->Action = PowerActionNone; Policy->Action = PowerActionNone;
Policy->EventCode = POWER_USER_NOTIFY_BUTTON; Policy->EventCode = POWER_USER_NOTIFY_BUTTON;
break; break;
case PowerActionShutdown: case PowerActionShutdown:
@ -208,90 +222,55 @@ SaveCurrentPowerActionPolicy(IN HWND hDlgCtrl,
//------------------------------------------------------------------- //-------------------------------------------------------------------
VOID VOID
ShowCurrentPowerActionPolicies(HWND hwndDlg) ShowCurrentPowerActionPolicies(
HWND hwndDlg,
PSYSTEM_POWER_CAPABILITIES spc)
{ {
TCHAR szAction[MAX_PATH];
if (!IsBatteryUsed()) if (!IsBatteryUsed())
{ {
#if 0 ShowCurrentPowerActionPolicy(GetDlgItem(hwndDlg, IDC_LIDCLOSE),
/* experimental code */ g_SystemBatteries,
// ShowCurrentPowerButtonAcAction(hList2, sizeof(g_SystemBatteries) / sizeof(POWER_ACTION),
ShowCurrentPowerActionPolicy(GetDlgItem(hwndDlg, IDC_POWERBUTTON), &gGPP.user.LidCloseAc,
g_SystemBatteries, spc,
sizeof(g_SystemBatteries) / sizeof(POWER_ACTION), TRUE);
&gGPP.user.LidCloseAc);
#else ShowCurrentPowerActionPolicy(GetDlgItem(hwndDlg, IDC_POWERBUTTON),
if (LoadString(hApplet, IDS_PowerActionNone1+gGPP.user.LidCloseAc.Action, szAction, MAX_PATH)) g_PowerButton,
{ sizeof(g_PowerButton) / sizeof(POWER_ACTION),
SendDlgItemMessage(hwndDlg, IDC_LIDCLOSE, &gGPP.user.PowerButtonAc,
CB_SELECTSTRING, spc,
TRUE, FALSE);
(LPARAM)szAction);
}
#endif
ShowCurrentPowerActionPolicy(GetDlgItem(hwndDlg, IDC_POWERBUTTON),
g_PowerButton,
sizeof(g_PowerButton) / sizeof(POWER_ACTION),
&gGPP.user.PowerButtonAc);
#if 0
/* experimental code */
ShowCurrentPowerActionPolicy(GetDlgItem(hwndDlg, IDC_SLEEPBUTTON), ShowCurrentPowerActionPolicy(GetDlgItem(hwndDlg, IDC_SLEEPBUTTON),
g_SleepButton, g_SleepButton,
sizeof(g_SleepButton) / sizeof(POWER_ACTION), sizeof(g_SleepButton) / sizeof(POWER_ACTION),
&gGPP.user.SleepButtonAc); &gGPP.user.SleepButtonAc,
#else spc,
if (LoadString(hApplet, IDS_PowerActionNone1+gGPP.user.SleepButtonAc.Action, szAction, MAX_PATH)) FALSE);
{
SendDlgItemMessage(hwndDlg, IDC_SLEEPBUTTON,
CB_SELECTSTRING,
TRUE,
(LPARAM)szAction);
}
#endif
} }
else else
{ {
#if 0
ShowCurrentPowerActionPolicy(GetDlgItem(hwndDlg, IDC_LIDCLOSE), ShowCurrentPowerActionPolicy(GetDlgItem(hwndDlg, IDC_LIDCLOSE),
g_SleepButton, g_SystemBatteries,
sizeof(g_SleepButton) / sizeof(POWER_ACTION), sizeof(g_SystemBatteries) / sizeof(POWER_ACTION),
&gGPP.user.LidCloseDc); &gGPP.user.LidCloseDc,
spc,
TRUE);
ShowCurrentPowerActionPolicy(GetDlgItem(hwndDlg, IDC_POWERBUTTON), ShowCurrentPowerActionPolicy(GetDlgItem(hwndDlg, IDC_POWERBUTTON),
g_SleepButton, g_PowerButton,
sizeof(g_SleepButton) / sizeof(POWER_ACTION), sizeof(g_PowerButton) / sizeof(POWER_ACTION),
&gGPP.user.PowerButtonDc); &gGPP.user.PowerButtonDc,
spc,
FALSE);
ShowCurrentPowerActionPolicy(GetDlgItem(hwndDlg, IDC_SLEEPBUTTON), ShowCurrentPowerActionPolicy(GetDlgItem(hwndDlg, IDC_SLEEPBUTTON),
g_SleepButton, g_SleepButton,
sizeof(g_SleepButton) / sizeof(POWER_ACTION), sizeof(g_SleepButton) / sizeof(POWER_ACTION),
&gGPP.user.SleepButtonDc); &gGPP.user.SleepButtonDc,
#else spc,
if (LoadString(hApplet, IDS_PowerActionNone1+gGPP.user.LidCloseDc.Action, szAction, MAX_PATH)) FALSE);
{
SendDlgItemMessage(hwndDlg, IDC_LIDCLOSE,
CB_SELECTSTRING,
TRUE,
(LPARAM)szAction);
}
if (LoadString(hApplet, IDS_PowerActionNone1+gGPP.user.PowerButtonDc.Action, szAction, MAX_PATH))
{
SendDlgItemMessage(hwndDlg, IDC_POWERBUTTON,
CB_SELECTSTRING,
TRUE,
(LPARAM)szAction);
}
if (LoadString(hApplet, IDS_PowerActionNone1+gGPP.user.SleepButtonDc.Action, szAction, MAX_PATH))
{
SendDlgItemMessage(hwndDlg, IDC_SLEEPBUTTON,
CB_SELECTSTRING,
TRUE,
(LPARAM)szAction);
}
#endif
} }
} }
@ -422,7 +401,7 @@ Adv_InitDialog(
if (ReadGlobalPwrPolicy(&gGPP)) if (ReadGlobalPwrPolicy(&gGPP))
{ {
ShowCurrentPowerActionPolicies(hwndDlg); ShowCurrentPowerActionPolicies(hwndDlg, &spc);
} }
} }