mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/BMMUiLib: Remove old useless data before new save action
There exits the case that when saving changes in form A, the old saved data in form B are not cleaned, will be saved again with the new save. Thus incorrect UI behavior will be shown. This patch is to remove some useless data. https://bugzilla.tianocore.org/show_bug.cgi?id=385 Cc: Eric Dong <eric.dong@intel.com> Cc: Liming Gao <liming.gao@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Dandan Bi <dandan.bi@intel.com> Reviewed-by: Eric Dong <eric.dong@intel.com>
This commit is contained in:
parent
bf342907c8
commit
85520606ad
|
@ -1,7 +1,7 @@
|
||||||
/** @file
|
/** @file
|
||||||
The functions for Boot Maintainence Main menu.
|
The functions for Boot Maintainence Main menu.
|
||||||
|
|
||||||
Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -1214,9 +1214,11 @@ BootMaintCallback (
|
||||||
}
|
}
|
||||||
|
|
||||||
if (QuestionId == KEY_VALUE_SAVE_AND_EXIT_BOOT) {
|
if (QuestionId == KEY_VALUE_SAVE_AND_EXIT_BOOT) {
|
||||||
|
CleanUselessBeforeSubmit (Private);
|
||||||
CurrentFakeNVMap->BootOptionChanged = FALSE;
|
CurrentFakeNVMap->BootOptionChanged = FALSE;
|
||||||
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT;
|
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT;
|
||||||
} else if (QuestionId == KEY_VALUE_SAVE_AND_EXIT_DRIVER) {
|
} else if (QuestionId == KEY_VALUE_SAVE_AND_EXIT_DRIVER) {
|
||||||
|
CleanUselessBeforeSubmit (Private);
|
||||||
CurrentFakeNVMap->DriverOptionChanged = FALSE;
|
CurrentFakeNVMap->DriverOptionChanged = FALSE;
|
||||||
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT;
|
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT;
|
||||||
} else if (QuestionId == KEY_VALUE_NO_SAVE_AND_EXIT_DRIVER) {
|
} else if (QuestionId == KEY_VALUE_NO_SAVE_AND_EXIT_DRIVER) {
|
||||||
|
@ -1269,6 +1271,7 @@ BootMaintCallback (
|
||||||
case KEY_VALUE_SAVE_AND_EXIT:
|
case KEY_VALUE_SAVE_AND_EXIT:
|
||||||
case KEY_VALUE_NO_SAVE_AND_EXIT:
|
case KEY_VALUE_NO_SAVE_AND_EXIT:
|
||||||
if (QuestionId == KEY_VALUE_SAVE_AND_EXIT) {
|
if (QuestionId == KEY_VALUE_SAVE_AND_EXIT) {
|
||||||
|
CleanUselessBeforeSubmit (Private);
|
||||||
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT;
|
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT;
|
||||||
} else if (QuestionId == KEY_VALUE_NO_SAVE_AND_EXIT) {
|
} else if (QuestionId == KEY_VALUE_NO_SAVE_AND_EXIT) {
|
||||||
DiscardChangeHandler (Private, CurrentFakeNVMap);
|
DiscardChangeHandler (Private, CurrentFakeNVMap);
|
||||||
|
@ -1370,6 +1373,36 @@ DiscardChangeHandler (
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
This function is to clean some useless data before submit changes.
|
||||||
|
|
||||||
|
@param Private The BMM context data.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
CleanUselessBeforeSubmit (
|
||||||
|
IN BMM_CALLBACK_DATA *Private
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT16 Index;
|
||||||
|
if (Private->BmmPreviousPageId != FORM_BOOT_DEL_ID) {
|
||||||
|
for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {
|
||||||
|
if (Private->BmmFakeNvData.BootOptionDel[Index] && !Private->BmmFakeNvData.BootOptionDelMark[Index]) {
|
||||||
|
Private->BmmFakeNvData.BootOptionDel[Index] = FALSE;
|
||||||
|
Private->BmmOldFakeNVData.BootOptionDel[Index] = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Private->BmmPreviousPageId != FORM_DRV_DEL_ID) {
|
||||||
|
for (Index = 0; Index < DriverOptionMenu.MenuNumber; Index++) {
|
||||||
|
if (Private->BmmFakeNvData.DriverOptionDel[Index] && !Private->BmmFakeNvData.DriverOptionDelMark[Index]) {
|
||||||
|
Private->BmmFakeNvData.DriverOptionDel[Index] = FALSE;
|
||||||
|
Private->BmmOldFakeNVData.DriverOptionDel[Index] = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
||||||
Update the menus in the BMM page.
|
Update the menus in the BMM page.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/** @file
|
/** @file
|
||||||
Header file for boot maintenance module.
|
Header file for boot maintenance module.
|
||||||
|
|
||||||
Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -1049,6 +1049,18 @@ DiscardChangeHandler (
|
||||||
IN BMM_FAKE_NV_DATA *CurrentFakeNVMap
|
IN BMM_FAKE_NV_DATA *CurrentFakeNVMap
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
This function is to clean some useless data before submit changes.
|
||||||
|
|
||||||
|
@param Private The BMM context data.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
CleanUselessBeforeSubmit (
|
||||||
|
IN BMM_CALLBACK_DATA *Private
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Dispatch the display to the next page based on NewPageId.
|
Dispatch the display to the next page based on NewPageId.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue