X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdeModulePkg%2FUniversal%2FSetupBrowserDxe%2FSetup.c;h=11c9589cebad2c5130d30c1b704c1ece19ccbb6f;hp=c7c7f9ae43eb780aede99081c6d567d51693f717;hb=27bace9b3ee288a2befb63a405cc0882882ef136;hpb=3e108dfd7dcd495732e86d2d1339364033512ecf diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c index c7c7f9ae43..11c9589ceb 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c +++ b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c @@ -4902,21 +4902,27 @@ IsBrowserDataModified ( LIST_ENTRY *Link; FORM_BROWSER_FORMSET *FormSet; - if (gCurrentSelection == NULL) { - return FALSE; - } - switch (gBrowserSettingScope) { case FormLevel: + if (gCurrentSelection == NULL) { + return FALSE; + } return IsNvUpdateRequiredForForm (gCurrentSelection->Form); case FormSetLevel: + if (gCurrentSelection == NULL) { + return FALSE; + } return IsNvUpdateRequiredForFormSet (gCurrentSelection->FormSet); case SystemLevel: Link = GetFirstNode (&gBrowserFormSetList); while (!IsNull (&gBrowserFormSetList, Link)) { FormSet = FORM_BROWSER_FORMSET_FROM_LINK (Link); + if (!ValidateFormSet(FormSet)) { + continue; + } + if (IsNvUpdateRequiredForFormSet (FormSet)) { return TRUE; } @@ -4946,19 +4952,27 @@ ExecuteAction ( IN UINT16 DefaultId ) { - EFI_STATUS Status; + EFI_STATUS Status; + FORM_BROWSER_FORMSET *FormSet; + FORM_BROWSER_FORM *Form; - if (gCurrentSelection == NULL) { + if (gBrowserSettingScope < SystemLevel && gCurrentSelection == NULL) { return EFI_NOT_READY; } - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; + FormSet = NULL; + Form = NULL; + if (gBrowserSettingScope < SystemLevel) { + FormSet = gCurrentSelection->FormSet; + Form = gCurrentSelection->Form; + } // // Executet the discard action. // if ((Action & BROWSER_ACTION_DISCARD) != 0) { - Status = DiscardForm (gCurrentSelection->FormSet, gCurrentSelection->Form, gBrowserSettingScope); + Status = DiscardForm (FormSet, Form, gBrowserSettingScope); if (EFI_ERROR (Status)) { return Status; } @@ -4968,7 +4982,7 @@ ExecuteAction ( // Executet the difault action. // if ((Action & BROWSER_ACTION_DEFAULT) != 0) { - Status = ExtractDefault (gCurrentSelection->FormSet, gCurrentSelection->Form, DefaultId, gBrowserSettingScope, GetDefaultForAll, NULL, FALSE); + Status = ExtractDefault (FormSet, Form, DefaultId, gBrowserSettingScope, GetDefaultForAll, NULL, FALSE); if (EFI_ERROR (Status)) { return Status; } @@ -4978,7 +4992,7 @@ ExecuteAction ( // Executet the submit action. // if ((Action & BROWSER_ACTION_SUBMIT) != 0) { - Status = SubmitForm (gCurrentSelection->FormSet, gCurrentSelection->Form, gBrowserSettingScope); + Status = SubmitForm (FormSet, Form, gBrowserSettingScope); if (EFI_ERROR (Status)) { return Status; } @@ -4995,7 +5009,7 @@ ExecuteAction ( // Executet the exit action. // if ((Action & BROWSER_ACTION_EXIT) != 0) { - DiscardForm (gCurrentSelection->FormSet, gCurrentSelection->Form, gBrowserSettingScope); + DiscardForm (FormSet, Form, gBrowserSettingScope); if (gBrowserSettingScope == SystemLevel) { if (ExitHandlerFunction != NULL) { ExitHandlerFunction (); @@ -5015,6 +5029,7 @@ ExecuteAction ( @retval BROWSER_NO_CHANGES No browser data is changed. @retval BROWSER_SAVE_CHANGES The changed browser data is saved. @retval BROWSER_DISCARD_CHANGES The changed browser data is discard. + @retval BROWSER_KEEP_CURRENT Browser keep current changes. **/ UINT32 @@ -5027,6 +5042,7 @@ SaveReminder ( FORM_BROWSER_FORMSET *FormSet; BOOLEAN IsDataChanged; UINT32 DataSavedAction; + UINT32 ConfirmRet; DataSavedAction = BROWSER_NO_CHANGES; IsDataChanged = FALSE; @@ -5054,13 +5070,18 @@ SaveReminder ( // If data is changed, prompt user to save or discard it. // do { - DataSavedAction = (UINT32) mFormDisplay->ConfirmDataChange(); + ConfirmRet = (UINT32) mFormDisplay->ConfirmDataChange(); - if (DataSavedAction == BROWSER_SAVE_CHANGES) { + if (ConfirmRet == BROWSER_ACTION_SUBMIT) { SubmitForm (NULL, NULL, SystemLevel); + DataSavedAction = BROWSER_SAVE_CHANGES; break; - } else if (DataSavedAction == BROWSER_DISCARD_CHANGES) { + } else if (ConfirmRet == BROWSER_ACTION_DISCARD) { DiscardForm (NULL, NULL, SystemLevel); + DataSavedAction = BROWSER_DISCARD_CHANGES; + break; + } else if (ConfirmRet == BROWSER_ACTION_NONE) { + DataSavedAction = BROWSER_KEEP_CURRENT; break; } } while (1);