return FALSE;\r
}\r
\r
-/**\r
- Check whether the storage data for current form set is changed.\r
-\r
- @param FormSet FormSet data structure.\r
-\r
- @retval TRUE Data is changed.\r
- @retval FALSE Data is not changed.\r
-**/\r
-BOOLEAN \r
-IsStorageDataChangedForFormSet (\r
- IN FORM_BROWSER_FORMSET *FormSet\r
- )\r
-{\r
- LIST_ENTRY *Link;\r
- FORMSET_STORAGE *Storage;\r
- BROWSER_STORAGE *BrowserStorage;\r
- CHAR16 *ConfigRespNew;\r
- CHAR16 *ConfigRespOld;\r
- BOOLEAN RetVal;\r
-\r
- RetVal = FALSE;\r
- ConfigRespNew = NULL;\r
- ConfigRespOld = NULL;\r
-\r
- //\r
- // Request current settings from Configuration Driver\r
- //\r
- Link = GetFirstNode (&FormSet->StorageListHead);\r
- while (!IsNull (&FormSet->StorageListHead, Link)) {\r
- Storage = FORMSET_STORAGE_FROM_LINK (Link);\r
- Link = GetNextNode (&FormSet->StorageListHead, Link);\r
-\r
- BrowserStorage = Storage->BrowserStorage;\r
-\r
- if (BrowserStorage->Type == EFI_HII_VARSTORE_EFI_VARIABLE) {\r
- continue;\r
- }\r
-\r
- if (Storage->ElementCount == 0) {\r
- continue;\r
- }\r
-\r
- StorageToConfigResp (BrowserStorage, &ConfigRespNew, Storage->ConfigRequest, TRUE);\r
- StorageToConfigResp (BrowserStorage, &ConfigRespOld, Storage->ConfigRequest, FALSE);\r
- ASSERT (ConfigRespNew != NULL && ConfigRespOld != NULL);\r
-\r
- if (StrCmp (ConfigRespNew, ConfigRespOld) != 0) {\r
- RetVal = TRUE;\r
- }\r
-\r
- FreePool (ConfigRespNew);\r
- ConfigRespNew = NULL;\r
-\r
- FreePool (ConfigRespOld);\r
- ConfigRespOld = NULL;\r
-\r
- if (RetVal) {\r
- break;\r
- }\r
- }\r
-\r
- return RetVal;\r
-}\r
-\r
/**\r
Find menu which will show next time.\r
\r
\r
Status = EFI_SUCCESS;\r
ActionRequest = EFI_BROWSER_ACTION_REQUEST_NONE;\r
- \r
- if ((Statement->QuestionFlags & EFI_IFR_FLAG_CALLBACK) != EFI_IFR_FLAG_CALLBACK) {\r
+\r
+ if (((Statement->QuestionFlags & EFI_IFR_FLAG_CALLBACK) != EFI_IFR_FLAG_CALLBACK) || ConfigAccess == NULL) {\r
return EFI_UNSUPPORTED;\r
}\r
\r
// for each question with callback flag.\r
// New form may be the first form, or the different form after another form close.\r
//\r
- if ((ConfigAccess != NULL) &&\r
- ((Selection->Handle != mCurrentHiiHandle) ||\r
+ if (((Selection->Handle != mCurrentHiiHandle) ||\r
(!CompareGuid (&Selection->FormSetGuid, &mCurrentFormSetGuid)) ||\r
(Selection->FormId != mCurrentFormId))) {\r
//\r
CopyGuid (&mCurrentFormSetGuid, &Selection->FormSetGuid);\r
mCurrentFormId = Selection->FormId;\r
\r
- Status = ProcessCallBackFunction (Selection, gCurrentSelection->FormSet, Selection->Form, NULL, EFI_BROWSER_ACTION_FORM_OPEN, FALSE);\r
- if (EFI_ERROR (Status)) {\r
- goto Done;\r
- }\r
+ if (ConfigAccess != NULL) {\r
+ Status = ProcessCallBackFunction (Selection, gCurrentSelection->FormSet, Selection->Form, NULL, EFI_BROWSER_ACTION_FORM_OPEN, 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
+ // 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
}\r
\r
+ //\r
+ // Verify whether question value has checked, update the ValueChanged flag in Question.\r
+ //\r
+ IsQuestionValueChanged(gCurrentSelection->FormSet, gCurrentSelection->Form, Statement, GetSetValueWithBuffer);\r
+\r
if (!EFI_ERROR (Status) && Statement->Operand != EFI_IFR_REF_OP) {\r
ProcessCallBackFunction(Selection, Selection->FormSet, Selection->Form, Statement, EFI_BROWSER_ACTION_CHANGED, FALSE);\r
}\r
} else if (Statement->Operand != EFI_IFR_PASSWORD_OP) {\r
SetQuestionValue (gCurrentSelection->FormSet, gCurrentSelection->Form, Statement, GetSetValueWithEditBuffer);\r
+ //\r
+ // Verify whether question value has checked, update the ValueChanged flag in Question.\r
+ //\r
+ IsQuestionValueChanged(gCurrentSelection->FormSet, gCurrentSelection->Form, Statement, GetSetValueWithBuffer);\r
}\r
\r
- //\r
- // Verify whether question value has checked, update the ValueChanged flag in Question.\r
- //\r
- IsQuestionValueChanged(gCurrentSelection->FormSet, gCurrentSelection->Form, Statement, GetSetValueWithBuffer);\r
-\r
//\r
// If question has EFI_IFR_FLAG_RESET_REQUIRED flag and without storage and process question success till here, \r
// trig the gResetFlag.\r