Support call of SendForm() from Callback(), i.e. nested call of SendForm().

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9364 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
xdu2
2009-10-26 03:06:06 +00:00
parent 8b0fc5c1e1
commit ce6d12cce0
4 changed files with 298 additions and 43 deletions

View File

@@ -443,6 +443,64 @@ typedef struct {
LIST_ENTRY FormListHead; // Form list (FORM_BROWSER_FORM)
} FORM_BROWSER_FORMSET;
#define BROWSER_CONTEXT_SIGNATURE SIGNATURE_32 ('B', 'C', 'T', 'X')
typedef struct {
UINTN Signature;
LIST_ENTRY Link;
//
// Globals defined in Setup.c
//
BANNER_DATA *BannerData;
UINTN ClassOfVfr;
UINTN FunctionKeySetting;
BOOLEAN ResetRequired;
BOOLEAN NvUpdateRequired;
UINT16 Direction;
EFI_SCREEN_DESCRIPTOR ScreenDimensions;
CHAR16 *FunctionNineString;
CHAR16 *FunctionTenString;
CHAR16 *EnterString;
CHAR16 *EnterCommitString;
CHAR16 *EnterEscapeString;
CHAR16 *EscapeString;
CHAR16 *SaveFailed;
CHAR16 *MoveHighlight;
CHAR16 *MakeSelection;
CHAR16 *DecNumericInput;
CHAR16 *HexNumericInput;
CHAR16 *ToggleCheckBox;
CHAR16 *PromptForData;
CHAR16 *PromptForPassword;
CHAR16 *PromptForNewPassword;
CHAR16 *ConfirmPassword;
CHAR16 *ConfirmError;
CHAR16 *PassowordInvalid;
CHAR16 *PressEnter;
CHAR16 *EmptyString;
CHAR16 *AreYouSure;
CHAR16 *YesResponse;
CHAR16 *NoResponse;
CHAR16 *MiniString;
CHAR16 *PlusString;
CHAR16 *MinusString;
CHAR16 *AdjustNumber;
CHAR16 *SaveChanges;
CHAR16 *OptionMismatch;
CHAR16 PromptBlockWidth;
CHAR16 OptionBlockWidth;
CHAR16 HelpBlockWidth;
FORM_BROWSER_FORMSET *OldFormSet;
//
// Globals defined in Ui.c
//
LIST_ENTRY MenuOption;
VOID *MenuRefreshHead;
} BROWSER_CONTEXT;
#define BROWSER_CONTEXT_FROM_LINK(a) CR (a, BROWSER_CONTEXT, Link, BROWSER_CONTEXT_SIGNATURE)
extern EFI_HII_DATABASE_PROTOCOL *mHiiDatabase;
extern EFI_HII_STRING_PROTOCOL *mHiiString;
@@ -457,8 +515,6 @@ extern BOOLEAN gNvUpdateRequired;
extern EFI_HII_HANDLE gHiiHandle;
extern UINT16 gDirection;
extern EFI_SCREEN_DESCRIPTOR gScreenDimensions;
extern BOOLEAN gUpArrow;
extern BOOLEAN gDownArrow;
extern FORM_BROWSER_FORMSET *gOldFormSet;
@@ -976,6 +1032,26 @@ GetIfrBinaryData (
OUT UINT8 **BinaryData
);
/**
Save globals used by previous call to SendForm(). SendForm() may be called from
HiiConfigAccess.Callback(), this will cause SendForm() be reentried.
So, save globals of previous call to SendForm() and restore them upon exit.
**/
VOID
SaveBrowserContext (
VOID
);
/**
Restore globals used by previous call to SendForm().
**/
VOID
RestoreBrowserContext (
VOID
);
/**
This is the routine which an external caller uses to direct the browser
where to obtain it's information.