Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15032
6f19259b-4bc3-4df7-8a09-
765794883524
#define BROWSER_NO_CHANGES 0\r
#define BROWSER_SAVE_CHANGES 1\r
#define BROWSER_DISCARD_CHANGES 2\r
#define BROWSER_NO_CHANGES 0\r
#define BROWSER_SAVE_CHANGES 1\r
#define BROWSER_DISCARD_CHANGES 2\r
+#define BROWSER_KEEP_CURRENT 3\r
\r
//\r
// Browser actions. They can be cominbed together. \r
\r
//\r
// Browser actions. They can be cominbed together. \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_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
LIST_ENTRY *Link;\r
FORM_BROWSER_FORMSET *FormSet;\r
\r
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
switch (gBrowserSettingScope) {\r
case FormLevel:\r
+ if (gCurrentSelection == NULL) {\r
+ return FALSE;\r
+ }\r
return IsNvUpdateRequiredForForm (gCurrentSelection->Form);\r
\r
case FormSetLevel:\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
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
if (IsNvUpdateRequiredForFormSet (FormSet)) {\r
return TRUE;\r
}\r
IN UINT16 DefaultId\r
)\r
{\r
IN UINT16 DefaultId\r
)\r
{\r
+ EFI_STATUS Status;\r
+ FORM_BROWSER_FORMSET *FormSet;\r
+ FORM_BROWSER_FORM *Form;\r
- if (gCurrentSelection == NULL) {\r
+ if (gBrowserSettingScope < SystemLevel && gCurrentSelection == NULL) {\r
return EFI_NOT_READY;\r
}\r
\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
\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
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
// Executet the difault action.\r
//\r
if ((Action & BROWSER_ACTION_DEFAULT) != 0) {\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
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
// Executet the submit action.\r
//\r
if ((Action & BROWSER_ACTION_SUBMIT) != 0) {\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
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
// Executet the exit action.\r
//\r
if ((Action & BROWSER_ACTION_EXIT) != 0) {\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
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_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
FORM_BROWSER_FORMSET *FormSet;\r
BOOLEAN IsDataChanged;\r
UINT32 DataSavedAction;\r
FORM_BROWSER_FORMSET *FormSet;\r
BOOLEAN IsDataChanged;\r
UINT32 DataSavedAction;\r
\r
DataSavedAction = BROWSER_NO_CHANGES;\r
IsDataChanged = FALSE;\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
// 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
- if (DataSavedAction == BROWSER_SAVE_CHANGES) {\r
+ if (ConfirmRet == BROWSER_ACTION_SUBMIT) {\r
SubmitForm (NULL, NULL, SystemLevel);\r
SubmitForm (NULL, NULL, SystemLevel);\r
+ DataSavedAction = BROWSER_SAVE_CHANGES;\r
- } else if (DataSavedAction == BROWSER_DISCARD_CHANGES) {\r
+ } else if (ConfirmRet == BROWSER_ACTION_DISCARD) {\r
DiscardForm (NULL, NULL, SystemLevel);\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
break;\r
}\r
} while (1);\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_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