gPlusString = GetToken (STRING_TOKEN (PLUS_STRING), gHiiHandle);\r
gMinusString = GetToken (STRING_TOKEN (MINUS_STRING), gHiiHandle);\r
gAdjustNumber = GetToken (STRING_TOKEN (ADJUST_NUMBER), gHiiHandle);\r
+ gSaveChanges = GetToken (STRING_TOKEN (SAVE_CHANGES), gHiiHandle);\r
return ;\r
}\r
\r
VOID\r
)\r
{\r
- SafeFreePool (gFunctionOneString);\r
- SafeFreePool (gFunctionTwoString);\r
- SafeFreePool (gFunctionNineString);\r
- SafeFreePool (gFunctionTenString);\r
- SafeFreePool (gEnterString);\r
- SafeFreePool (gEnterCommitString);\r
- SafeFreePool (gEscapeString);\r
- SafeFreePool (gMoveHighlight);\r
- SafeFreePool (gMakeSelection);\r
- SafeFreePool (gDecNumericInput);\r
- SafeFreePool (gHexNumericInput);\r
- SafeFreePool (gToggleCheckBox);\r
- SafeFreePool (gPromptForData);\r
- SafeFreePool (gPromptForPassword);\r
- SafeFreePool (gPromptForNewPassword);\r
- SafeFreePool (gConfirmPassword);\r
- SafeFreePool (gPassowordInvalid);\r
- SafeFreePool (gConfirmError);\r
- SafeFreePool (gPressEnter);\r
- SafeFreePool (gEmptyString);\r
- SafeFreePool (gAreYouSure);\r
- SafeFreePool (gYesResponse);\r
- SafeFreePool (gNoResponse);\r
- SafeFreePool (gMiniString);\r
- SafeFreePool (gPlusString);\r
- SafeFreePool (gMinusString);\r
- SafeFreePool (gAdjustNumber);\r
+ FreePool (gFunctionOneString);\r
+ FreePool (gFunctionTwoString);\r
+ FreePool (gFunctionNineString);\r
+ FreePool (gFunctionTenString);\r
+ FreePool (gEnterString);\r
+ FreePool (gEnterCommitString);\r
+ FreePool (gEscapeString);\r
+ FreePool (gMoveHighlight);\r
+ FreePool (gMakeSelection);\r
+ FreePool (gDecNumericInput);\r
+ FreePool (gHexNumericInput);\r
+ FreePool (gToggleCheckBox);\r
+ FreePool (gPromptForData);\r
+ FreePool (gPromptForPassword);\r
+ FreePool (gPromptForNewPassword);\r
+ FreePool (gConfirmPassword);\r
+ FreePool (gPassowordInvalid);\r
+ FreePool (gConfirmError);\r
+ FreePool (gPressEnter);\r
+ FreePool (gEmptyString);\r
+ FreePool (gAreYouSure);\r
+ FreePool (gYesResponse);\r
+ FreePool (gNoResponse);\r
+ FreePool (gMiniString);\r
+ FreePool (gPlusString);\r
+ FreePool (gMinusString);\r
+ FreePool (gAdjustNumber);\r
+ FreePool (gSaveChanges);\r
return ;\r
}\r
\r
EFI_HII_VALUE *HiiValue;\r
FORM_BROWSER_STATEMENT *Statement;\r
EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess;\r
+ EFI_INPUT_KEY Key;\r
+ CHAR16 YesResponse;\r
+ CHAR16 NoResponse;\r
\r
gMenuRefreshHead = NULL;\r
gResetRequired = FALSE;\r
// Force to reparse IFR binary of target Formset\r
//\r
Selection->Action = UI_ACTION_REFRESH_FORMSET;\r
+\r
+ //\r
+ // Uncommitted data will be lost after IFR binary re-pasing, so confirm on whether to save\r
+ //\r
+ if (gNvUpdateRequired) {\r
+ Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
+\r
+ YesResponse = gYesResponse[0];\r
+ NoResponse = gNoResponse[0];\r
+\r
+ do {\r
+ CreateDialog (3, TRUE, 0, NULL, &Key, gEmptyString, gSaveChanges, gEmptyString);\r
+ } while\r
+ (\r
+ (Key.ScanCode != SCAN_ESC) &&\r
+ ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (NoResponse | UPPER_LOWER_CASE_OFFSET)) &&\r
+ ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (YesResponse | UPPER_LOWER_CASE_OFFSET))\r
+ );\r
+\r
+ if ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) == (YesResponse | UPPER_LOWER_CASE_OFFSET)) {\r
+ //\r
+ // If the user hits the YesResponse key\r
+ //\r
+ SubmitForm (Selection->FormSet, Selection->Form);\r
+ }\r
+ }\r
}\r
}\r
} while (Selection->Action == UI_ACTION_REFRESH_FORM);\r