summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Universal
diff options
context:
space:
mode:
authorxdu2 <xdu2@6f19259b-4bc3-4df7-8a09-765794883524>2009-10-26 03:04:31 +0000
committerxdu2 <xdu2@6f19259b-4bc3-4df7-8a09-765794883524>2009-10-26 03:04:31 +0000
commitf4a2af1f4d093fae5beba4872406b85bb07b34bf (patch)
treeb9cfac17b712aea2803297f6c78d8ec78f0dbf33 /MdeModulePkg/Universal
parent3dde743f62960c866737e8d96f05eb298d4aeca1 (diff)
downloadedk2-f4a2af1f4d093fae5beba4872406b85bb07b34bf.zip
edk2-f4a2af1f4d093fae5beba4872406b85bb07b34bf.tar.gz
edk2-f4a2af1f4d093fae5beba4872406b85bb07b34bf.tar.bz2
Add support for newly defined Browser action type EFI_BROWSER_ACTION_FORM_OPEN and EFI_BROWSER_ACTION_FORM_CLOSE in UEFI spec.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9362 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Universal')
-rw-r--r--MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c81
1 files changed, 80 insertions, 1 deletions
diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c b/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c
index fc8bae2..5b8fc89 100644
--- a/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c
+++ b/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c
@@ -867,6 +867,52 @@ SetupBrowser (
}
//
+ // Before display the formset, invoke ConfigAccess.Callback() with EFI_BROWSER_ACTION_FORM_OPEN
+ //
+ ConfigAccess = Selection->FormSet->ConfigAccess;
+ if ((ConfigAccess != NULL) && (Selection->Action != UI_ACTION_REFRESH_FORMSET)) {
+ ActionRequest = EFI_BROWSER_ACTION_REQUEST_NONE;
+ mHiiPackageListUpdated = FALSE;
+ Status = ConfigAccess->Callback (
+ ConfigAccess,
+ EFI_BROWSER_ACTION_FORM_OPEN,
+ 0,
+ EFI_IFR_TYPE_UNDEFINED,
+ NULL,
+ &ActionRequest
+ );
+
+ if (!EFI_ERROR (Status)) {
+ switch (ActionRequest) {
+ case EFI_BROWSER_ACTION_REQUEST_RESET:
+ gResetRequired = TRUE;
+ break;
+
+ case EFI_BROWSER_ACTION_REQUEST_SUBMIT:
+ //
+ // Till now there is no uncommitted data, so ignore this request
+ //
+ break;
+
+ case EFI_BROWSER_ACTION_REQUEST_EXIT:
+ Selection->Action = UI_ACTION_EXIT;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ if (mHiiPackageListUpdated) {
+ //
+ // IFR is updated during callback, force to reparse the IFR binary
+ //
+ Selection->Action = UI_ACTION_REFRESH_FORMSET;
+ goto Done;
+ }
+ }
+
+ //
// Initialize current settings of Questions in this FormSet
//
Status = InitializeCurrentSetting (Selection->FormSet);
@@ -944,7 +990,6 @@ SetupBrowser (
HiiValue->Value.string = NewString ((CHAR16 *) Statement->BufferValue, Selection->FormSet->HiiHandle);
}
- ConfigAccess = Selection->FormSet->ConfigAccess;
if (ConfigAccess == NULL) {
return EFI_UNSUPPORTED;
}
@@ -1009,6 +1054,40 @@ SetupBrowser (
} while (Selection->Action == UI_ACTION_REFRESH_FORM);
//
+ // Before exit the formset, invoke ConfigAccess.Callback() with EFI_BROWSER_ACTION_FORM_CLOSE
+ //
+ if ((ConfigAccess != NULL) && (Selection->Action == UI_ACTION_EXIT)) {
+ ActionRequest = EFI_BROWSER_ACTION_REQUEST_NONE;
+ Status = ConfigAccess->Callback (
+ ConfigAccess,
+ EFI_BROWSER_ACTION_FORM_CLOSE,
+ 0,
+ EFI_IFR_TYPE_UNDEFINED,
+ NULL,
+ &ActionRequest
+ );
+
+ if (!EFI_ERROR (Status)) {
+ switch (ActionRequest) {
+ case EFI_BROWSER_ACTION_REQUEST_RESET:
+ gResetRequired = TRUE;
+ break;
+
+ case EFI_BROWSER_ACTION_REQUEST_SUBMIT:
+ SubmitForm (Selection->FormSet, Selection->Form);
+ break;
+
+ case EFI_BROWSER_ACTION_REQUEST_EXIT:
+ gNvUpdateRequired = FALSE;
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ //
// Record the old formset
//
if (gOldFormSet != NULL) {