Reviewed-by: Eric Dong <eric.d...@intel.com> -----Original Message----- From: Bi, Dandan Sent: Monday, January 16, 2017 1:57 PM To: edk2-devel@lists.01.org Cc: Dong, Eric <eric.d...@intel.com>; Gao, Liming <liming....@intel.com>; Yao, Jiewen <jiewen....@intel.com> Subject: [patch 2/3] MdeModulePkg/FileExplorer: Update QuesrionId when Updating FileExplore form
https://bugzilla.tianocore.org/show_bug.cgi?id=342 When user select and enter a directory, File Explorer will update the form based on the new folders and files in the directory. But when creating question opcodes, the question id is same with previous one and this will cause browser to show the highlight menu incorrectly. Cc: Eric Dong <eric.d...@intel.com> Cc: Liming Gao <liming....@intel.com> Cc: Jiewen Yao <jiewen....@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Dandan Bi <dandan...@intel.com> --- MdeModulePkg/Library/FileExplorerLib/FileExplorer.c | 12 ++++++++---- MdeModulePkg/Library/FileExplorerLib/FileExplorer.h | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/MdeModulePkg/Library/FileExplorerLib/FileExplorer.c b/MdeModulePkg/Library/FileExplorerLib/FileExplorer.c index 9cd366d..315868a 100644 --- a/MdeModulePkg/Library/FileExplorerLib/FileExplorer.c +++ b/MdeModulePkg/Library/FileExplorerLib/FileExplorer.c @@ -70,10 +70,11 @@ HII_VENDOR_DEVICE_PATH FeHiiVendorDevicePath = { VOID *mLibStartOpCodeHandle = NULL; VOID *mLibEndOpCodeHandle = NULL; EFI_IFR_GUID_LABEL *mLibStartLabel = NULL; EFI_IFR_GUID_LABEL *mLibEndLabel = NULL; +UINT16 mQuestionIdUpdate; /** This function allows a caller to extract the current configuration for one or more named elements from the target driver. @@ -1181,21 +1182,23 @@ LibUpdateFileExplorePage ( NewFileContext = NULL; LibRefreshUpdateData (); MenuOption = gFileExplorerPrivate.FsOptionMenu; + mQuestionIdUpdate += QUESTION_ID_UPDATE_STEP; + for (Index = 0; Index < MenuOption->MenuNumber; Index++) { NewMenuEntry = LibGetMenuEntry (MenuOption, Index); NewFileContext = (FILE_CONTEXT *) NewMenuEntry->VariableContext; if (!NewFileContext->IsDir) { // // Create Text opcode for directory, also create Text opcode for file in FileExplorerStateBootFromFile. // HiiCreateActionOpCode ( mLibStartOpCodeHandle, - (UINT16) (FILE_OPTION_OFFSET + Index), + (UINT16) (FILE_OPTION_OFFSET + Index + mQuestionIdUpdate), NewMenuEntry->DisplayStringToken, STRING_TOKEN (STR_NULL_STRING), EFI_IFR_FLAG_CALLBACK, 0 ); @@ -1207,11 +1210,11 @@ LibUpdateFileExplorePage ( mLibStartOpCodeHandle, FORM_FILE_EXPLORER_ID, NewMenuEntry->DisplayStringToken, STRING_TOKEN (STR_NULL_STRING), EFI_IFR_FLAG_CALLBACK, - (UINT16) (FILE_OPTION_OFFSET + Index) + (UINT16) (FILE_OPTION_OFFSET + Index + mQuestionIdUpdate) ); } } HiiUpdateForm ( @@ -1242,11 +1245,11 @@ LibUpdateFileExplorer ( FILE_CONTEXT *NewFileContext; EFI_STATUS Status; EFI_FILE_HANDLE FileHandle; Status = EFI_SUCCESS; - FileOptionMask = (UINT16) (FILE_OPTION_MASK & KeyValue); + FileOptionMask = (UINT16) (FILE_OPTION_MASK & KeyValue) - + mQuestionIdUpdate; NewMenuEntry = LibGetMenuEntry (gFileExplorerPrivate.FsOptionMenu, FileOptionMask); NewFileContext = (FILE_CONTEXT *) NewMenuEntry->VariableContext; if (NewFileContext->IsDir) { RemoveEntryList (&NewMenuEntry->Link); @@ -1277,11 +1280,11 @@ LibGetDevicePath ( { UINT16 FileOptionMask; MENU_ENTRY *NewMenuEntry; FILE_CONTEXT *NewFileContext; - FileOptionMask = (UINT16) (FILE_OPTION_MASK & KeyValue); + FileOptionMask = (UINT16) (FILE_OPTION_MASK & KeyValue) - mQuestionIdUpdate; NewMenuEntry = LibGetMenuEntry (gFileExplorerPrivate.FsOptionMenu, FileOptionMask); NewFileContext = (FILE_CONTEXT *) NewMenuEntry->VariableContext; @@ -1326,10 +1329,11 @@ ChooseFile ( if ((ChooseHandler == NULL) && (File == NULL)) { return EFI_INVALID_PARAMETER; } + mQuestionIdUpdate = 0; FileName = NULL; gFileExplorerPrivate.RetDevicePath = NULL; gFileExplorerPrivate.ChooseHandler = ChooseHandler; if (FileType != NULL) { diff --git a/MdeModulePkg/Library/FileExplorerLib/FileExplorer.h b/MdeModulePkg/Library/FileExplorerLib/FileExplorer.h index 4b5f601..ea0ad3d 100644 --- a/MdeModulePkg/Library/FileExplorerLib/FileExplorer.h +++ b/MdeModulePkg/Library/FileExplorerLib/FileExplorer.h @@ -111,11 +111,11 @@ extern UINT8 FileExplorerVfrBin[]; /// Define the maximum characters that will be accepted. /// #define MAX_CHAR 480 #define FILE_OPTION_OFFSET 0x8000 #define FILE_OPTION_MASK 0x7FFF - +#define QUESTION_ID_UPDATE_STEP 200 /** This function processes the results of changes in configuration. When user select a interactive opcode, this callback will be triggered. Based on the Question(QuestionId) that triggers the callback, the corresponding -- 1.9.5.msysgit.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel