[POWERCFG] Improve the error handling in AddPowerScheme() and keep track of the current power scheme.

This commit is contained in:
Eric Kohl 2019-05-05 22:01:54 +02:00
parent 4172325559
commit 077dcfedb9

View file

@ -51,7 +51,7 @@ UINT Sec[]=
static static
PPOWER_SCHEME BOOL
AddPowerScheme( AddPowerScheme(
PPOWER_SCHEMES_PAGE_DATA pPageData, PPOWER_SCHEMES_PAGE_DATA pPageData,
UINT uId, UINT uId,
@ -62,21 +62,44 @@ AddPowerScheme(
PPOWER_POLICY pp) PPOWER_POLICY pp)
{ {
PPOWER_SCHEME pScheme; PPOWER_SCHEME pScheme;
BOOL bResult = FALSE;
pScheme = HeapAlloc(GetProcessHeap(), pScheme = HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY, HEAP_ZERO_MEMORY,
sizeof(POWER_SCHEME)); sizeof(POWER_SCHEME));
if (pScheme == NULL) if (pScheme == NULL)
return NULL; return FALSE;
pScheme->uId = uId;
CopyMemory(&pScheme->PowerPolicy, pp, sizeof(POWER_POLICY));
if (dwName != 0)
{
pScheme->pszName = HeapAlloc(GetProcessHeap(), pScheme->pszName = HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY, HEAP_ZERO_MEMORY,
dwName + sizeof(TCHAR)); dwName);
if (pScheme->pszName == NULL)
goto done;
_tcscpy(pScheme->pszName, pszName);
}
if (dwDescription != 0)
{
pScheme->pszDescription = HeapAlloc(GetProcessHeap(), pScheme->pszDescription = HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY, HEAP_ZERO_MEMORY,
dwDescription + sizeof(TCHAR)); dwDescription);
if (pScheme->pszName == NULL || pScheme->pszDescription == NULL) if (pScheme->pszDescription == NULL)
goto done;
_tcscpy(pScheme->pszDescription, pszDescription);
}
InsertTailList(&pPageData->PowerSchemesList, &pScheme->ListEntry);
bResult = TRUE;
done:
if (bResult == FALSE)
{ {
if (pScheme->pszName) if (pScheme->pszName)
HeapFree(GetProcessHeap(), 0, pScheme->pszName); HeapFree(GetProcessHeap(), 0, pScheme->pszName);
@ -85,18 +108,9 @@ AddPowerScheme(
HeapFree(GetProcessHeap(), 0, pScheme->pszDescription); HeapFree(GetProcessHeap(), 0, pScheme->pszDescription);
HeapFree(GetProcessHeap(), 0, pScheme); HeapFree(GetProcessHeap(), 0, pScheme);
return NULL;
} }
pScheme->uId = uId; return bResult;
_tcscpy(pScheme->pszName, pszName);
_tcscpy(pScheme->pszDescription, pszDescription);
CopyMemory(&pScheme->PowerPolicy, pp, sizeof(POWER_POLICY));
InsertTailList(&pPageData->PowerSchemesList, &pScheme->ListEntry);
return pScheme;
} }
@ -276,7 +290,8 @@ Pos_InitData(
static static
VOID VOID
LoadConfig( LoadConfig(
HWND hwndDlg) HWND hwndDlg,
PPOWER_SCHEMES_PAGE_DATA pPageData)
{ {
PPOWER_SCHEME pScheme; PPOWER_SCHEME pScheme;
INT i = 0, iCurSel = 0; INT i = 0, iCurSel = 0;
@ -374,6 +389,9 @@ LoadConfig(
(LPARAM)0); (LPARAM)0);
} }
} }
EnableWindow(GetDlgItem(hwndDlg, IDC_DELETE_BTN),
(pScheme != pPageData->pActivePowerScheme));
} }
@ -470,7 +488,9 @@ Pos_InitPage(HWND hwndDlg)
static VOID static VOID
Pos_SaveData(HWND hwndDlg) Pos_SaveData(
HWND hwndDlg,
PPOWER_SCHEMES_PAGE_DATA pPageData)
{ {
PPOWER_SCHEME pScheme; PPOWER_SCHEME pScheme;
INT iCurSel, tmp; INT iCurSel, tmp;
@ -563,8 +583,11 @@ Pos_SaveData(HWND hwndDlg)
pScheme->PowerPolicy.mach.DozeS4TimeoutDc = Sec[tmp]; pScheme->PowerPolicy.mach.DozeS4TimeoutDc = Sec[tmp];
} }
SetActivePwrScheme(pScheme->uId, NULL, &pScheme->PowerPolicy); if (SetActivePwrScheme(pScheme->uId, NULL, &pScheme->PowerPolicy))
LoadConfig(hwndDlg); {
pPageData->pActivePowerScheme = pScheme;
EnableWindow(GetDlgItem(hwndDlg, IDC_DELETE_BTN), FALSE);
}
} }
@ -601,8 +624,6 @@ DelScheme(HWND hwnd)
{ {
SendMessage(hList, CB_SETCURSEL, (WPARAM)0, 0); SendMessage(hList, CB_SETCURSEL, (WPARAM)0, 0);
SendMessage(hList, CB_DELETESTRING, (WPARAM)iCurSel, 0); SendMessage(hList, CB_DELETESTRING, (WPARAM)iCurSel, 0);
if (Current == pScheme->uId)
Pos_SaveData(hwnd);
} }
if (DeletePwrScheme(pScheme->uId) != 0) if (DeletePwrScheme(pScheme->uId) != 0)
@ -624,7 +645,7 @@ CreateEnergyList(
POWER_POLICY pp; POWER_POLICY pp;
SYSTEM_POWER_CAPABILITIES spc; SYSTEM_POWER_CAPABILITIES spc;
HWND hwndList; HWND hwndList;
unsigned aps = 0; UINT aps = 0;
hwndList = GetDlgItem(hwndDlg, IDC_ENERGYLIST); hwndList = GetDlgItem(hwndDlg, IDC_ENERGYLIST);
@ -683,7 +704,8 @@ CreateEnergyList(
TRUE, TRUE,
(LPARAM)pScheme->pszName); (LPARAM)pScheme->pszName);
LoadConfig(hwndDlg); pPageData->pActivePowerScheme = pScheme;
LoadConfig(hwndDlg, pPageData);
} }
ListEntry = ListEntry->Flink; ListEntry = ListEntry->Flink;
@ -691,7 +713,6 @@ CreateEnergyList(
if (SendMessage(hwndList, CB_GETCOUNT, 0, 0) > 0) if (SendMessage(hwndList, CB_GETCOUNT, 0, 0) > 0)
{ {
EnableWindow(GetDlgItem(hwndDlg, IDC_DELETE_BTN), TRUE);
EnableWindow(GetDlgItem(hwndDlg, IDC_SAVEAS_BTN), TRUE); EnableWindow(GetDlgItem(hwndDlg, IDC_SAVEAS_BTN), TRUE);
} }
@ -753,7 +774,7 @@ PowerSchemesDlgProc(
case IDC_ENERGYLIST: case IDC_ENERGYLIST:
if (HIWORD(wParam) == CBN_SELCHANGE) if (HIWORD(wParam) == CBN_SELCHANGE)
{ {
LoadConfig(hwndDlg); LoadConfig(hwndDlg, pPageData);
PropSheet_Changed(GetParent(hwndDlg), hwndDlg); PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
} }
break; break;
@ -786,7 +807,7 @@ PowerSchemesDlgProc(
LPNMHDR lpnm = (LPNMHDR)lParam; LPNMHDR lpnm = (LPNMHDR)lParam;
if (lpnm->code == (UINT)PSN_APPLY) if (lpnm->code == (UINT)PSN_APPLY)
{ {
Pos_SaveData(hwndDlg); Pos_SaveData(hwndDlg, pPageData);
} }
return TRUE; return TRUE;
} }