summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c
diff options
context:
space:
mode:
Diffstat (limited to 'MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c')
-rw-r--r--MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c68
1 files changed, 64 insertions, 4 deletions
diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c b/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c
index aa1fedc7b4..c86fdf5856 100644
--- a/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c
+++ b/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c
@@ -178,7 +178,7 @@ UpdateStatement (
**/
VOID
EFIAPI
-RefreshEventNotify(
+RefreshEventNotifyForStatement(
IN EFI_EVENT Event,
IN VOID *Context
)
@@ -190,6 +190,23 @@ RefreshEventNotify(
gBS->SignalEvent (mValueChangedEvent);
}
+/**
+ Refresh the questions within this form.
+
+ @param Event The event which has this function related.
+ @param Context The input context info related to this event or the status code return to the caller.
+**/
+VOID
+EFIAPI
+RefreshEventNotifyForForm(
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ gCurrentSelection->Action = UI_ACTION_REFRESH_FORMSET;
+
+ gBS->SignalEvent (mValueChangedEvent);
+}
/**
Create refresh hook event for statement which has refresh event or interval.
@@ -198,7 +215,7 @@ RefreshEventNotify(
**/
VOID
-CreateRefreshEvent (
+CreateRefreshEventForStatement (
IN FORM_BROWSER_STATEMENT *Statement
)
{
@@ -212,7 +229,7 @@ CreateRefreshEvent (
Status = gBS->CreateEventEx (
EVT_NOTIFY_SIGNAL,
TPL_CALLBACK,
- RefreshEventNotify,
+ RefreshEventNotifyForStatement,
Statement,
&Statement->RefreshGuid,
&RefreshEvent);
@@ -225,6 +242,39 @@ CreateRefreshEvent (
}
/**
+ Create refresh hook event for statement which has refresh event or interval.
+
+ @param Statement The statement need to check.
+
+**/
+VOID
+CreateRefreshEventForForm (
+ IN FORM_BROWSER_FORM *Form
+ )
+{
+ EFI_STATUS Status;
+ EFI_EVENT RefreshEvent;
+ FORM_BROWSER_REFRESH_EVENT_NODE *EventNode;
+
+ //
+ // If question has refresh guid, create the notify function.
+ //
+ Status = gBS->CreateEventEx (
+ EVT_NOTIFY_SIGNAL,
+ TPL_CALLBACK,
+ RefreshEventNotifyForForm,
+ Form,
+ &Form->RefreshGuid,
+ &RefreshEvent);
+ ASSERT_EFI_ERROR (Status);
+
+ EventNode = AllocateZeroPool (sizeof (FORM_BROWSER_REFRESH_EVENT_NODE));
+ ASSERT (EventNode != NULL);
+ EventNode->RefreshEvent = RefreshEvent;
+ InsertTailList(&mRefreshEventList, &EventNode->Link);
+}
+
+/**
Initialize the Display statement structure data.
@@ -308,7 +358,7 @@ InitializeDisplayStatement (
// Create the refresh event process function.
//
if (!CompareGuid (&Statement->RefreshGuid, &gZeroGuid)) {
- CreateRefreshEvent (Statement);
+ CreateRefreshEventForStatement (Statement);
}
//
@@ -560,6 +610,16 @@ AddStatementToDisplayForm (
}
//
+ // Create the refresh event process function for Form.
+ //
+ if (!CompareGuid (&gCurrentSelection->Form->RefreshGuid, &gZeroGuid)) {
+ CreateRefreshEventForForm (gCurrentSelection->Form);
+ if (gDisplayFormData.FormRefreshEvent == NULL) {
+ gDisplayFormData.FormRefreshEvent = mValueChangedEvent;
+ }
+ }
+
+ //
// Update hotkey list field.
//
if (gBrowserSettingScope == SystemLevel || FormEditable) {