CHAR16 *gErrorInfo;\r
UINT16 mCurFakeQestId;\r
FORM_DISPLAY_ENGINE_FORM gDisplayFormData;\r
+BOOLEAN mFinishRetrieveCall = FALSE;\r
\r
/**\r
Evaluate all expressions in a Form.\r
return Status;\r
}\r
\r
- if ((Selection->Handle != mCurrentHiiHandle) ||\r
- (!CompareGuid (&Selection->FormSetGuid, &mCurrentFormSetGuid))) {\r
- gFinishRetrieveCall = FALSE;\r
- }\r
-\r
//\r
// Initialize current settings of Questions in this FormSet\r
//\r
if (((Selection->Handle != mCurrentHiiHandle) ||\r
(!CompareGuid (&Selection->FormSetGuid, &mCurrentFormSetGuid)) ||\r
(Selection->FormId != mCurrentFormId))) {\r
+ //\r
+ // Update Retrieve flag.\r
+ //\r
+ mFinishRetrieveCall = FALSE;\r
+\r
//\r
// Keep current form information\r
//\r
mCurrentFormId = Selection->FormId;\r
\r
if (ConfigAccess != NULL) {\r
- Status = ProcessCallBackFunction (Selection, gCurrentSelection->FormSet, Selection->Form, NULL, EFI_BROWSER_ACTION_FORM_OPEN, FALSE);\r
+ Status = ProcessCallBackFunction (Selection, Selection->FormSet, Selection->Form, NULL, EFI_BROWSER_ACTION_FORM_OPEN, FALSE);\r
if (EFI_ERROR (Status)) {\r
goto Done;\r
}\r
goto Done;\r
}\r
\r
- //\r
- // Finish call RETRIEVE callback for this formset.\r
- //\r
- gFinishRetrieveCall = TRUE;\r
+ if (!mFinishRetrieveCall) {\r
+ //\r
+ // Finish call RETRIEVE callback for this form.\r
+ //\r
+ mFinishRetrieveCall = TRUE;\r
\r
- //\r
- // IFR is updated during callback of read value, force to reparse the IFR binary\r
- //\r
- if (mHiiPackageListUpdated) {\r
- Selection->Action = UI_ACTION_REFRESH_FORMSET;\r
- mHiiPackageListUpdated = FALSE;\r
- break;\r
+ if (ConfigAccess != NULL) {\r
+ Status = ProcessCallBackFunction (Selection, Selection->FormSet, Selection->Form, NULL, EFI_BROWSER_ACTION_RETRIEVE, FALSE);\r
+ if (EFI_ERROR (Status)) {\r
+ goto Done;\r
+ }\r
+\r
+ //\r
+ // IFR is updated during callback of open form, force to reparse the IFR binary\r
+ //\r
+ if (mHiiPackageListUpdated) {\r
+ Selection->Action = UI_ACTION_REFRESH_FORMSET;\r
+ mHiiPackageListUpdated = FALSE;\r
+ break;\r
+ }\r
+ }\r
}\r
\r
//\r
LIST_ENTRY gBrowserHotKeyList = INITIALIZE_LIST_HEAD_VARIABLE (gBrowserHotKeyList);\r
LIST_ENTRY gBrowserStorageList = INITIALIZE_LIST_HEAD_VARIABLE (gBrowserStorageList);\r
\r
-BOOLEAN gFinishRetrieveCall;\r
BOOLEAN gResetRequired;\r
BOOLEAN gExitRequired;\r
BROWSER_SETTING_SCOPE gBrowserSettingScope = FormSetLevel;\r
EFI_GUID ZeroGuid;\r
EFI_STATUS Status;\r
FORM_BROWSER_FORMSET *OldFormset;\r
- BOOLEAN OldRetrieveValue;\r
\r
OldFormset = mSystemLevelFormSet;\r
- OldRetrieveValue = gFinishRetrieveCall;\r
- gFinishRetrieveCall = FALSE;\r
\r
//\r
// Get all the Hii handles\r
//\r
FreePool (HiiHandles);\r
\r
- gFinishRetrieveCall = OldRetrieveValue;\r
mSystemLevelFormSet = OldFormset;\r
}\r
\r
//\r
SaveBrowserContext ();\r
\r
- gFinishRetrieveCall = FALSE;\r
gResetRequired = FALSE;\r
gExitRequired = FALSE;\r
Status = EFI_SUCCESS;\r
EFI_STATUS Status;\r
LIST_ENTRY *Link;\r
FORM_BROWSER_STATEMENT *Question;\r
- UINT8 *BufferValue;\r
- UINTN StorageWidth;\r
\r
Link = GetFirstNode (&Form->StatementListHead);\r
while (!IsNull (&Form->StatementListHead, Link)) {\r
HiiSetString (FormSet->HiiHandle, Question->HiiValue.Value.string, (CHAR16*)Question->BufferValue, NULL);\r
}\r
\r
- //\r
- // Call the Retrieve call back function for all questions.\r
- //\r
- if ((FormSet->ConfigAccess != NULL) && (Selection != NULL) &&\r
- ((Question->QuestionFlags & EFI_IFR_FLAG_CALLBACK) == EFI_IFR_FLAG_CALLBACK) &&\r
- !gFinishRetrieveCall) {\r
- //\r
- // Check QuestionValue does exist.\r
- //\r
- StorageWidth = Question->StorageWidth;\r
- if (Question->BufferValue != NULL) {\r
- BufferValue = Question->BufferValue;\r
- } else {\r
- BufferValue = (UINT8 *) &Question->HiiValue.Value;\r
- }\r
-\r
- //\r
- // For efivarstore storage, initial question value first.\r
- //\r
- if ((Question->Storage != NULL) && (Question->Storage->Type == EFI_HII_VARSTORE_EFI_VARIABLE)) {\r
- Status = gRT->GetVariable (\r
- Question->VariableName,\r
- &Question->Storage->Guid,\r
- NULL,\r
- &StorageWidth,\r
- BufferValue\r
- );\r
- }\r
-\r
- Status = ProcessCallBackFunction(Selection, FormSet, Form, Question, EFI_BROWSER_ACTION_RETRIEVE, TRUE);\r
- }\r
-\r
Link = GetNextNode (&Form->StatementListHead, Link);\r
}\r
\r
\r
extern BOOLEAN gResetRequired;\r
extern BOOLEAN gExitRequired;\r
-extern BOOLEAN gFinishRetrieveCall;\r
extern LIST_ENTRY gBrowserFormSetList;\r
extern LIST_ENTRY gBrowserHotKeyList;\r
extern BROWSER_SETTING_SCOPE gBrowserSettingScope;\r