LIST_ENTRY *Link;\r
FORM_BROWSER_FORMSET *FormSet;\r
\r
- if (gCurrentSelection == NULL) {\r
- return FALSE;\r
- }\r
-\r
switch (gBrowserSettingScope) {\r
case FormLevel:\r
+ if (gCurrentSelection == NULL) {\r
+ return FALSE;\r
+ }\r
return IsNvUpdateRequiredForForm (gCurrentSelection->Form);\r
\r
case FormSetLevel:\r
+ if (gCurrentSelection == NULL) {\r
+ return FALSE;\r
+ }\r
return IsNvUpdateRequiredForFormSet (gCurrentSelection->FormSet);\r
\r
case SystemLevel:\r
Link = GetFirstNode (&gBrowserFormSetList);\r
while (!IsNull (&gBrowserFormSetList, Link)) {\r
FormSet = FORM_BROWSER_FORMSET_FROM_LINK (Link);\r
+ if (!ValidateFormSet(FormSet)) {\r
+ continue;\r
+ }\r
+\r
if (IsNvUpdateRequiredForFormSet (FormSet)) {\r
return TRUE;\r
}\r
IN UINT16 DefaultId\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
+ FORM_BROWSER_FORMSET *FormSet;\r
+ FORM_BROWSER_FORM *Form;\r
\r
- if (gCurrentSelection == NULL) {\r
+ if (gBrowserSettingScope < SystemLevel && gCurrentSelection == NULL) {\r
return EFI_NOT_READY;\r
}\r
\r
- Status = EFI_SUCCESS;\r
+ Status = EFI_SUCCESS;\r
+ FormSet = NULL;\r
+ Form = NULL;\r
+ if (gBrowserSettingScope < SystemLevel) {\r
+ FormSet = gCurrentSelection->FormSet;\r
+ Form = gCurrentSelection->Form; \r
+ }\r
\r
//\r
// Executet the discard action.\r
//\r
if ((Action & BROWSER_ACTION_DISCARD) != 0) {\r
- Status = DiscardForm (gCurrentSelection->FormSet, gCurrentSelection->Form, gBrowserSettingScope);\r
+ Status = DiscardForm (FormSet, Form, gBrowserSettingScope);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
// Executet the difault action.\r
//\r
if ((Action & BROWSER_ACTION_DEFAULT) != 0) {\r
- Status = ExtractDefault (gCurrentSelection->FormSet, gCurrentSelection->Form, DefaultId, gBrowserSettingScope, GetDefaultForAll, NULL, FALSE);\r
+ Status = ExtractDefault (FormSet, Form, DefaultId, gBrowserSettingScope, GetDefaultForAll, NULL, FALSE);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
// Executet the submit action.\r
//\r
if ((Action & BROWSER_ACTION_SUBMIT) != 0) {\r
- Status = SubmitForm (gCurrentSelection->FormSet, gCurrentSelection->Form, gBrowserSettingScope);\r
+ Status = SubmitForm (FormSet, Form, gBrowserSettingScope);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
// Executet the exit action.\r
//\r
if ((Action & BROWSER_ACTION_EXIT) != 0) {\r
- DiscardForm (gCurrentSelection->FormSet, gCurrentSelection->Form, gBrowserSettingScope);\r
+ DiscardForm (FormSet, Form, gBrowserSettingScope);\r
if (gBrowserSettingScope == SystemLevel) {\r
if (ExitHandlerFunction != NULL) {\r
ExitHandlerFunction ();\r
@retval BROWSER_NO_CHANGES No browser data is changed.\r
@retval BROWSER_SAVE_CHANGES The changed browser data is saved.\r
@retval BROWSER_DISCARD_CHANGES The changed browser data is discard.\r
+ @retval BROWSER_KEEP_CURRENT Browser keep current changes.\r
\r
**/\r
UINT32\r
FORM_BROWSER_FORMSET *FormSet;\r
BOOLEAN IsDataChanged;\r
UINT32 DataSavedAction;\r
+ UINT32 ConfirmRet;\r
\r
DataSavedAction = BROWSER_NO_CHANGES;\r
IsDataChanged = FALSE;\r
// If data is changed, prompt user to save or discard it. \r
//\r
do {\r
- DataSavedAction = (UINT32) mFormDisplay->ConfirmDataChange();\r
+ ConfirmRet = (UINT32) mFormDisplay->ConfirmDataChange();\r
\r
- if (DataSavedAction == BROWSER_SAVE_CHANGES) {\r
+ if (ConfirmRet == BROWSER_ACTION_SUBMIT) {\r
SubmitForm (NULL, NULL, SystemLevel);\r
+ DataSavedAction = BROWSER_SAVE_CHANGES;\r
break;\r
- } else if (DataSavedAction == BROWSER_DISCARD_CHANGES) {\r
+ } else if (ConfirmRet == BROWSER_ACTION_DISCARD) {\r
DiscardForm (NULL, NULL, SystemLevel);\r
+ DataSavedAction = BROWSER_DISCARD_CHANGES;\r
+ break;\r
+ } else if (ConfirmRet == BROWSER_ACTION_NONE) {\r
+ DataSavedAction = BROWSER_KEEP_CURRENT;\r
break;\r
}\r
} while (1);\r