]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Fixed user input arrow down/ page down caused form display highlight menu error.
authorEric Dong <eric.dong@intel.com>
Wed, 26 Nov 2014 02:44:06 +0000 (02:44 +0000)
committerydong10 <ydong10@Edk2>
Wed, 26 Nov 2014 02:44:06 +0000 (02:44 +0000)
When scroll menu to the one not shows in current form, and this menu has option mismatch error, current display engine will not highlight this menu.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16447 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Universal/DisplayEngineDxe/FormDisplay.c
MdeModulePkg/Universal/DisplayEngineDxe/FormDisplay.h
MdeModulePkg/Universal/DisplayEngineDxe/ProcessOptions.c
MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c

index 4be8a964641271bf7f0c41e613c7d46d8653caaa..80b4bfdc4f6d8f78fc20baf62a8a6d8cd2e7e8ec 100644 (file)
@@ -98,8 +98,7 @@ EFI_GUID  gDisplayEngineGuid = {
   0xE38C1029, 0xE38F, 0x45b9, {0x8F, 0x0D, 0xE2, 0xE6, 0x0B, 0xC9, 0xB2, 0x62}\r
 };\r
 \r
   0xE38C1029, 0xE38F, 0x45b9, {0x8F, 0x0D, 0xE2, 0xE6, 0x0B, 0xC9, 0xB2, 0x62}\r
 };\r
 \r
-FORM_ENTRY_INFO               gFormEntryInfo;\r
-UINTN                         gSequence;\r
+BOOLEAN                       gMisMatch;\r
 EFI_SCREEN_DESCRIPTOR         gStatementDimensions;\r
 BOOLEAN                       mStatementLayoutIsChanged = TRUE;\r
 USER_INPUT                    *gUserInput;\r
 EFI_SCREEN_DESCRIPTOR         gStatementDimensions;\r
 BOOLEAN                       mStatementLayoutIsChanged = TRUE;\r
 USER_INPUT                    *gUserInput;\r
@@ -1474,6 +1473,238 @@ FindTopOfScreenMenu (
   return TopOfScreen;\r
 }\r
 \r
   return TopOfScreen;\r
 }\r
 \r
+/**\r
+  Get the index info for this opcode.\r
+\r
+  @param  OpCode      The input opcode for the statement.\r
+\r
+  @retval  The index of this statement.\r
+\r
+**/\r
+UINTN\r
+GetIndexInfoForOpcode (\r
+  IN EFI_IFR_OP_HEADER  *OpCode\r
+  )\r
+{\r
+  LIST_ENTRY                      *NewPos;\r
+  UI_MENU_OPTION                  *MenuOption;\r
+  UINTN                           Index;\r
+\r
+  NewPos = gMenuOption.ForwardLink;\r
+  Index  = 0;\r
+\r
+  for (NewPos = gMenuOption.ForwardLink; NewPos != &gMenuOption; NewPos = NewPos->ForwardLink){\r
+    MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
+\r
+    if (CompareMem (MenuOption->ThisTag->OpCode, OpCode, OpCode->Length) == 0) {\r
+      if (MenuOption->ThisTag->OpCode == OpCode) {\r
+        return Index;\r
+      }\r
+\r
+      Index ++;\r
+    }\r
+  }\r
+\r
+  return Index;\r
+}\r
+\r
+/**\r
+  Is this the saved highlight statement.\r
+\r
+  @param  HighLightedStatement      The input highlight statement.\r
+\r
+  @retval  TRUE   This is the highlight statement.\r
+  @retval  FALSE  This is not the highlight statement.\r
+\r
+**/\r
+BOOLEAN \r
+IsSavedHighlightStatement (\r
+  IN FORM_DISPLAY_ENGINE_STATEMENT  *HighLightedStatement\r
+  )\r
+{\r
+  if ((gFormData->HiiHandle == gHighligthMenuInfo.HiiHandle) &&\r
+      (gFormData->FormId == gHighligthMenuInfo.FormId)) {\r
+    if (gHighligthMenuInfo.HLTQuestionId != 0) {\r
+      return (gHighligthMenuInfo.HLTQuestionId == GetQuestionIdInfo (HighLightedStatement->OpCode));\r
+    } else {\r
+      if (CompareMem (gHighligthMenuInfo.HLTOpCode, HighLightedStatement->OpCode, gHighligthMenuInfo.HLTOpCode->Length) == 0) {\r
+        if (gHighligthMenuInfo.HLTIndex == 0 || gHighligthMenuInfo.HLTIndex == GetIndexInfoForOpcode(HighLightedStatement->OpCode)) {\r
+          return TRUE;\r
+        } else {\r
+          return FALSE;\r
+        }\r
+      }\r
+    }\r
+  }\r
+\r
+  return FALSE;\r
+}\r
+\r
+/**\r
+  Is this the highlight menu.\r
+\r
+  @param  MenuOption      The input Menu option.\r
+\r
+  @retval  TRUE   This is the highlight menu option.\r
+  @retval  FALSE  This is not the highlight menu option.\r
+\r
+**/\r
+BOOLEAN\r
+IsHighLightMenuOption (\r
+  IN UI_MENU_OPTION     *MenuOption\r
+  )\r
+{\r
+  if (gHighligthMenuInfo.HLTQuestionId != 0) {\r
+    if (GetQuestionIdInfo(MenuOption->ThisTag->OpCode) == gHighligthMenuInfo.HLTQuestionId) {\r
+      return (MenuOption->Sequence == gHighligthMenuInfo.HLTSequence);\r
+    }\r
+  } else {\r
+    if(CompareMem (gHighligthMenuInfo.HLTOpCode, MenuOption->ThisTag->OpCode, gHighligthMenuInfo.HLTOpCode->Length) == 0) {\r
+      if (gHighligthMenuInfo.HLTIndex == 0 || gHighligthMenuInfo.HLTIndex == GetIndexInfoForOpcode(MenuOption->ThisTag->OpCode)) {\r
+        return (MenuOption->Sequence == gHighligthMenuInfo.HLTSequence);\r
+      } else {\r
+        return FALSE;\r
+      }\r
+    }\r
+  }\r
+\r
+  return FALSE;\r
+}\r
+\r
+/**\r
+  Find the highlight menu.\r
+\r
+  If the input is NULL, base on the record highlight info in\r
+  gHighligthMenuInfo to find the last highlight menu.\r
+\r
+  @param  HighLightedStatement      The input highlight statement.\r
+\r
+  @retval  The highlight menu index.\r
+\r
+**/\r
+LIST_ENTRY *\r
+FindHighLightMenuOption (\r
+ IN FORM_DISPLAY_ENGINE_STATEMENT  *HighLightedStatement\r
+ )\r
+{\r
+  LIST_ENTRY                      *NewPos;\r
+  UI_MENU_OPTION                  *MenuOption;\r
+\r
+  NewPos = gMenuOption.ForwardLink;\r
+  MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
+\r
+  if (HighLightedStatement != NULL) {\r
+    while (MenuOption->ThisTag != HighLightedStatement) {\r
+      NewPos     = NewPos->ForwardLink;\r
+      if (NewPos == &gMenuOption) {\r
+        //\r
+        // Not Found it, break\r
+        //\r
+        break;\r
+      }\r
+      MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
+    }\r
+\r
+    //\r
+    // Must find the highlight statement.\r
+    //\r
+    ASSERT (NewPos != &gMenuOption);\r
+\r
+  } else {\r
+    while (!IsHighLightMenuOption (MenuOption)) {\r
+      NewPos     = NewPos->ForwardLink;\r
+      if (NewPos == &gMenuOption) {\r
+        //\r
+        // Not Found it, break\r
+        //\r
+        break;\r
+      }\r
+      MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
+    }\r
+\r
+    //\r
+    // Highlight statement has disappear (suppressed/disableed)\r
+    //\r
+    if (NewPos == &gMenuOption) {\r
+      NewPos = NULL;\r
+    }\r
+  }\r
+\r
+  return NewPos;\r
+}\r
+\r
+/**\r
+  Is this the Top of screen menu.\r
+\r
+  @param  MenuOption      The input Menu option.\r
+\r
+  @retval  TRUE   This is the Top of screen menu option.\r
+  @retval  FALSE  This is not the Top of screen menu option.\r
+\r
+**/\r
+BOOLEAN\r
+IsTopOfScreeMenuOption (\r
+  IN UI_MENU_OPTION     *MenuOption\r
+  )\r
+{\r
+  if (gHighligthMenuInfo.TOSQuestionId != 0) {\r
+    return (GetQuestionIdInfo(MenuOption->ThisTag->OpCode) == gHighligthMenuInfo.TOSQuestionId);\r
+  } \r
+\r
+  if(CompareMem (gHighligthMenuInfo.TOSOpCode, MenuOption->ThisTag->OpCode, gHighligthMenuInfo.TOSOpCode->Length) == 0) {\r
+    if (gHighligthMenuInfo.TOSIndex == 0 || gHighligthMenuInfo.TOSIndex == GetIndexInfoForOpcode(MenuOption->ThisTag->OpCode)) {\r
+      return TRUE;\r
+    } else {\r
+      return FALSE;\r
+    }\r
+  }\r
+\r
+  return FALSE;\r
+}\r
+\r
+/**\r
+  Find the Top of screen menu.\r
+\r
+  If the input is NULL, base on the record highlight info in\r
+  gHighligthMenuInfo to find the last highlight menu.\r
+\r
+  @param  HighLightedStatement      The input highlight statement.\r
+\r
+  @retval  The highlight menu index.\r
+\r
+**/\r
+LIST_ENTRY *\r
+FindTopOfScreenMenuOption (\r
+ VOID\r
+ )\r
+{\r
+  LIST_ENTRY                      *NewPos;\r
+  UI_MENU_OPTION                  *MenuOption;\r
+\r
+  NewPos = gMenuOption.ForwardLink;\r
+  MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
+\r
+  while (!IsTopOfScreeMenuOption(MenuOption)) {\r
+    NewPos     = NewPos->ForwardLink;\r
+    if (NewPos == &gMenuOption) {\r
+      //\r
+      // Not Found it, break\r
+      //\r
+      break;\r
+    }\r
+    MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
+  }\r
+\r
+  //\r
+  // Last time top of screen menu has disappeared.\r
+  //\r
+  if (NewPos == &gMenuOption) {\r
+    NewPos = NULL;\r
+  }\r
+\r
+  return NewPos;\r
+}\r
+\r
 /**\r
   Find the first menu which will be show at the top.\r
 \r
 /**\r
   Find the first menu which will be show at the top.\r
 \r
@@ -1491,160 +1722,223 @@ FindTopMenu (
   OUT UINTN                     *SkipValue\r
   )\r
 {\r
   OUT UINTN                     *SkipValue\r
   )\r
 {\r
-  LIST_ENTRY                      *NewPos;\r
   UINTN                           TopRow;\r
   UINTN                           BottomRow;\r
   UINTN                           TopRow;\r
   UINTN                           BottomRow;\r
-  UI_MENU_OPTION                  *SavedMenuOption;\r
+  UI_MENU_OPTION                  *MenuOption;\r
   UINTN                           TmpValue;\r
 \r
   UINTN                           TmpValue;\r
 \r
-  TmpValue  = 0;\r
   TopRow    = gStatementDimensions.TopRow    + SCROLL_ARROW_HEIGHT;\r
   BottomRow = gStatementDimensions.BottomRow - SCROLL_ARROW_HEIGHT;\r
 \r
   TopRow    = gStatementDimensions.TopRow    + SCROLL_ARROW_HEIGHT;\r
   BottomRow = gStatementDimensions.BottomRow - SCROLL_ARROW_HEIGHT;\r
 \r
-  //\r
-  // If not has input highlight statement, just return the first one in this form.\r
-  //\r
-  if (FormData->HighLightedStatement == NULL) {\r
-    *TopOfScreen   = gMenuOption.ForwardLink;\r
-    *HighlightMenu = gMenuOption.ForwardLink;\r
-    if (!IsListEmpty (&gMenuOption)) {\r
-      MoveToNextStatement (FALSE, HighlightMenu, BottomRow - TopRow, TRUE);\r
-    }\r
-    *SkipValue     = 0;\r
-    return;\r
-  }\r
-\r
-  //\r
-  // Now base on the input highlight menu to find the top menu in this page.\r
-  // Will base on the highlight menu show at the bottom to find the top menu.\r
-  //\r
-  NewPos = gMenuOption.ForwardLink;\r
-  SavedMenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
+  if (gMisMatch) {\r
+    //\r
+    // Reenter caused by option mismatch or auto exit caused by refresh form(refresh interval/guid), \r
+    // base on the record highlight info to find the highlight menu.\r
+    //\r
+    ASSERT (gFormData->HiiHandle == gHighligthMenuInfo.HiiHandle &&\r
+            gFormData->FormId == gHighligthMenuInfo.FormId);\r
 \r
 \r
-  while ((SavedMenuOption->ThisTag != FormData->HighLightedStatement) ||\r
-         (SavedMenuOption->Sequence != gSequence)) {\r
-    NewPos     = NewPos->ForwardLink;\r
-    if (NewPos == &gMenuOption) {\r
+    *HighlightMenu = FindHighLightMenuOption(NULL);\r
+    if (*HighlightMenu != NULL) {\r
       //\r
       //\r
-      // Not Found it, break\r
+      // Update skip info for this highlight menu.\r
       //\r
       //\r
-      break;\r
-    }\r
-    SavedMenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
-  }\r
-  ASSERT (SavedMenuOption->ThisTag == FormData->HighLightedStatement);\r
+      MenuOption = MENU_OPTION_FROM_LINK (*HighlightMenu);\r
+      UpdateOptionSkipLines (MenuOption);\r
 \r
 \r
-  *HighlightMenu = NewPos;\r
-\r
-  AdjustDateAndTimePosition(FALSE, &NewPos);\r
-  SavedMenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
-  UpdateOptionSkipLines (SavedMenuOption);\r
+      //\r
+      // Found the last time highlight menu.\r
+      //\r
+      *TopOfScreen = FindTopOfScreenMenuOption();\r
+      if (*TopOfScreen != NULL) {\r
+        //\r
+        // Found the last time selectable top of screen menu.\r
+        //\r
+        AdjustDateAndTimePosition(TRUE, TopOfScreen);\r
+        MenuOption = MENU_OPTION_FROM_LINK (*TopOfScreen);\r
+        UpdateOptionSkipLines (MenuOption);\r
 \r
 \r
-  //\r
-  // FormRefreshEvent != NULL means this form will auto exit at an interval, display engine \r
-  // will try to keep highlight on the current position after this form exit and re-enter.\r
-  //\r
-  // HiiHandle + QuestionId can find the only one question in the system.\r
-  //\r
-  // If this question has question id, save the question id info to find the question.\r
-  // else save the opcode buffer to find it.\r
-  //\r
-  if (gFormData->FormRefreshEvent != NULL && gFormData->HiiHandle == gHighligthMenuInfo.HiiHandle) {\r
-    if (gHighligthMenuInfo.QuestionId != 0) { \r
-      if (gHighligthMenuInfo.QuestionId == GetQuestionIdInfo(SavedMenuOption->ThisTag->OpCode)) {\r
-        BottomRow = gHighligthMenuInfo.DisplayRow + SavedMenuOption->Skip;\r
+        *SkipValue = gHighligthMenuInfo.SkipValue;\r
+      } else {\r
         //\r
         //\r
-        // SkipValue only used for menu at the top of the form.\r
-        // If Highlight menu is not at the top, this value will be update later.\r
+        // Not found last time top of screen menu, so base on current highlight menu\r
+        // to find the new top of screen menu.\r
+        // Make the current highlight menu at the bottom of the form to calculate the\r
+        // top of screen menu.\r
         //\r
         //\r
-        TmpValue = gHighligthMenuInfo.SkipValue;\r
+        if (MenuOption->Skip >= BottomRow - TopRow) {\r
+          *TopOfScreen = *HighlightMenu;\r
+          TmpValue     = 0;\r
+        } else {\r
+          *TopOfScreen = FindTopOfScreenMenu(*HighlightMenu, BottomRow - TopRow - MenuOption->Skip, &TmpValue);\r
+        }\r
+\r
+        *SkipValue   = TmpValue;\r
       }\r
       }\r
-    } else if (gHighligthMenuInfo.OpCode != NULL){\r
-      if (!CompareMem (gHighligthMenuInfo.OpCode, SavedMenuOption->ThisTag->OpCode, gHighligthMenuInfo.OpCode->Length)) {\r
-        BottomRow = gHighligthMenuInfo.DisplayRow + SavedMenuOption->Skip;\r
+    } else {\r
+      //\r
+      // Last time highlight menu has disappear, find the first highlightable menu as the defalut one.\r
+      //\r
+      *HighlightMenu = gMenuOption.ForwardLink;\r
+      if (!IsListEmpty (&gMenuOption)) {\r
+        MoveToNextStatement (FALSE, HighlightMenu, BottomRow - TopRow, TRUE);\r
+      }\r
+      *TopOfScreen   = gMenuOption.ForwardLink;\r
+      *SkipValue = 0;\r
+    }\r
+\r
+    gMisMatch = FALSE;\r
+  } else if (FormData->HighLightedStatement != NULL) {\r
+    if (IsSavedHighlightStatement (FormData->HighLightedStatement)) {\r
+      //\r
+      // Input highlight menu is same as last time highlight menu.\r
+      // Base on last time highlight menu to set the top of screen menu and highlight menu.\r
+      //\r
+      *HighlightMenu = FindHighLightMenuOption(NULL);\r
+      ASSERT (*HighlightMenu != NULL);\r
+\r
+      //\r
+      // Update skip info for this highlight menu.\r
+      //\r
+      MenuOption = MENU_OPTION_FROM_LINK (*HighlightMenu);\r
+      UpdateOptionSkipLines (MenuOption);\r
+      \r
+      *TopOfScreen = FindTopOfScreenMenuOption();\r
+      if (*TopOfScreen == NULL) {\r
         //\r
         //\r
-        // SkipValue only used for menu at the top of the form.\r
-        // If Highlight menu is not at the top, this value will be update later.\r
+        // Not found last time top of screen menu, so base on current highlight menu\r
+        // to find the new top of screen menu.\r
+        // Make the current highlight menu at the bottom of the form to calculate the\r
+        // top of screen menu.\r
         //\r
         //\r
-        TmpValue = gHighligthMenuInfo.SkipValue;\r
+        if (MenuOption->Skip >= BottomRow - TopRow) {\r
+          *TopOfScreen = *HighlightMenu;\r
+          TmpValue     = 0;\r
+        } else {\r
+          *TopOfScreen = FindTopOfScreenMenu(*HighlightMenu, BottomRow - TopRow - MenuOption->Skip, &TmpValue);\r
+        }\r
+\r
+        *SkipValue   = TmpValue;\r
+      } else {\r
+        AdjustDateAndTimePosition(TRUE, TopOfScreen);\r
+        MenuOption = MENU_OPTION_FROM_LINK (*TopOfScreen);\r
+        UpdateOptionSkipLines (MenuOption);\r
+\r
+        *SkipValue = gHighligthMenuInfo.SkipValue;\r
       }\r
       }\r
-    }\r
-  }\r
+      AdjustDateAndTimePosition(TRUE, TopOfScreen);\r
+    } else {\r
+      //\r
+      // Input highlight menu is not save as last time highlight menu.\r
+      //\r
+      *HighlightMenu = FindHighLightMenuOption(FormData->HighLightedStatement);\r
+      MenuOption = MENU_OPTION_FROM_LINK (*HighlightMenu);\r
+      UpdateOptionSkipLines (MenuOption);\r
 \r
 \r
-  if (SavedMenuOption->Skip >= BottomRow - TopRow) {\r
-    *TopOfScreen = NewPos;\r
+      //\r
+      // Make the current highlight menu at the bottom of the form to calculate the\r
+      // top of screen menu.\r
+      //\r
+      if (MenuOption->Skip >= BottomRow - TopRow) {\r
+        *TopOfScreen = *HighlightMenu;\r
+        TmpValue     = 0;\r
+      } else {\r
+        *TopOfScreen = FindTopOfScreenMenu(*HighlightMenu, BottomRow - TopRow - MenuOption->Skip, &TmpValue);\r
+      }\r
+\r
+      *SkipValue   = TmpValue;\r
+    }\r
+    AdjustDateAndTimePosition(TRUE, TopOfScreen);\r
   } else {\r
   } else {\r
-    *TopOfScreen = FindTopOfScreenMenu(NewPos, BottomRow - TopRow - SavedMenuOption->Skip, &TmpValue);\r
+    //\r
+    // If not has input highlight statement, just return the first one in this form.\r
+    //\r
+    *TopOfScreen   = gMenuOption.ForwardLink;\r
+    *HighlightMenu = gMenuOption.ForwardLink;\r
+    if (!IsListEmpty (&gMenuOption)) {\r
+      MoveToNextStatement (FALSE, HighlightMenu, BottomRow - TopRow, TRUE);\r
+    }\r
+    *SkipValue     = 0;\r
   }\r
   }\r
-  AdjustDateAndTimePosition(TRUE, TopOfScreen);\r
-\r
-  *SkipValue   = TmpValue;\r
 }\r
 \r
 /**\r
 }\r
 \r
 /**\r
-  Update highlight menu info.\r
+  Record the highlight menu and top of screen menu info.\r
 \r
 \r
-  @param  MenuOption               The menu opton which is highlight.\r
-  @param  SkipValue                The skipvalue info for this menu.\r
-                                   SkipValue only used for the menu at the top of the form.\r
+  @param  Highlight               The menu opton which is highlight.\r
+  @param  TopOfScreen             The menu opton which is at the top of the form.\r
+  @param  SkipValue               The skip line info for the top of screen menu.\r
 \r
 **/\r
 VOID\r
 UpdateHighlightMenuInfo (\r
 \r
 **/\r
 VOID\r
 UpdateHighlightMenuInfo (\r
-  IN UI_MENU_OPTION            *MenuOption,\r
-  IN UINTN                     SkipValue\r
+  IN  LIST_ENTRY                      *Highlight,\r
+  IN  LIST_ENTRY                      *TopOfScreen,\r
+  IN  UINTN                           SkipValue\r
   )\r
 {\r
   )\r
 {\r
+  UI_MENU_OPTION                  *MenuOption;\r
   FORM_DISPLAY_ENGINE_STATEMENT   *Statement;\r
 \r
   FORM_DISPLAY_ENGINE_STATEMENT   *Statement;\r
 \r
-  //\r
-  // This is the current selected statement\r
-  //\r
-  Statement = MenuOption->ThisTag;\r
+  gHighligthMenuInfo.HiiHandle  = gFormData->HiiHandle;\r
+  gHighligthMenuInfo.FormId     = gFormData->FormId;\r
+  gHighligthMenuInfo.SkipValue  = (UINT16)SkipValue;\r
 \r
 \r
-  //\r
-  // Get the highlight statement.\r
-  //\r
-  gUserInput->SelectedStatement = Statement;\r
-  gSequence = (UINT16) MenuOption->Sequence;\r
+  if (!IsListEmpty (&gMenuOption)) {\r
+    MenuOption = MENU_OPTION_FROM_LINK (Highlight);\r
+    Statement  = MenuOption->ThisTag;\r
 \r
 \r
-  //\r
-  // FormRefreshEvent != NULL means this form will auto exit at an interval, display engine \r
-  // will try to keep highlight on the current position after this form exit and re-enter.\r
-  //\r
-  // HiiHandle + QuestionId can find the only one question in the system.\r
-  //\r
-  // If this question has question id, base on the question id info to find the question.\r
-  // else base on the opcode buffer to find it.\r
-  //\r
-  if (gFormData->FormRefreshEvent != NULL) {\r
-    gHighligthMenuInfo.HiiHandle  = gFormData->HiiHandle;\r
-    gHighligthMenuInfo.QuestionId = GetQuestionIdInfo(Statement->OpCode);\r
+    gUserInput->SelectedStatement = Statement;\r
 \r
 \r
-    //\r
-    // if question id == 0, save the opcode buffer for later use.\r
-    //\r
-    if (gHighligthMenuInfo.QuestionId == 0) {\r
-      if (gHighligthMenuInfo.OpCode != NULL) {\r
-        FreePool (gHighligthMenuInfo.OpCode);\r
+    gHighligthMenuInfo.HLTSequence   = MenuOption->Sequence;\r
+    gHighligthMenuInfo.HLTQuestionId = GetQuestionIdInfo(Statement->OpCode);\r
+    if (gHighligthMenuInfo.HLTQuestionId == 0) {\r
+      //\r
+      // if question id == 0, save the opcode buffer..\r
+      //\r
+      if (gHighligthMenuInfo.HLTOpCode != NULL) {\r
+        FreePool (gHighligthMenuInfo.HLTOpCode);\r
       }\r
       }\r
-      gHighligthMenuInfo.OpCode = AllocateCopyPool (Statement->OpCode->Length, Statement->OpCode);\r
-      ASSERT (gHighligthMenuInfo.OpCode != NULL);\r
+      gHighligthMenuInfo.HLTOpCode = AllocateCopyPool (Statement->OpCode->Length, Statement->OpCode);\r
+      ASSERT (gHighligthMenuInfo.HLTOpCode != NULL);\r
+\r
+      gHighligthMenuInfo.HLTIndex = GetIndexInfoForOpcode(Statement->OpCode);\r
+    }\r
+\r
+    MenuOption = MENU_OPTION_FROM_LINK (TopOfScreen);\r
+    Statement  = MenuOption->ThisTag;\r
+\r
+    gHighligthMenuInfo.TOSQuestionId = GetQuestionIdInfo(Statement->OpCode);\r
+    if (gHighligthMenuInfo.TOSQuestionId == 0) {\r
+      //\r
+      // if question id == 0, save the opcode buffer..\r
+      //\r
+      if (gHighligthMenuInfo.TOSOpCode != NULL) {\r
+        FreePool (gHighligthMenuInfo.TOSOpCode);\r
+      }\r
+      gHighligthMenuInfo.TOSOpCode = AllocateCopyPool (Statement->OpCode->Length, Statement->OpCode);\r
+      ASSERT (gHighligthMenuInfo.TOSOpCode != NULL);\r
+\r
+      gHighligthMenuInfo.TOSIndex = GetIndexInfoForOpcode(Statement->OpCode);\r
     }\r
     }\r
-    gHighligthMenuInfo.DisplayRow = (UINT16) MenuOption->Row;\r
-    gHighligthMenuInfo.SkipValue  = (UINT16) SkipValue;\r
   } else {\r
   } else {\r
-    gHighligthMenuInfo.HiiHandle  = NULL;\r
-    gHighligthMenuInfo.QuestionId = 0;\r
-    if (gHighligthMenuInfo.OpCode != NULL) {\r
-      FreePool (gHighligthMenuInfo.OpCode);\r
-      gHighligthMenuInfo.OpCode = NULL;\r
+    gUserInput->SelectedStatement    = NULL;\r
+\r
+    gHighligthMenuInfo.HLTSequence   = 0;\r
+    gHighligthMenuInfo.HLTQuestionId = 0;\r
+    if (gHighligthMenuInfo.HLTOpCode != NULL) {\r
+      FreePool (gHighligthMenuInfo.HLTOpCode);\r
     }\r
     }\r
-    gHighligthMenuInfo.DisplayRow = 0;\r
-    gHighligthMenuInfo.SkipValue  = 0;\r
-  }\r
+    gHighligthMenuInfo.HLTOpCode     = NULL;\r
+    gHighligthMenuInfo.HLTIndex      = 0;\r
 \r
 \r
-  RefreshKeyHelp(gFormData, Statement, FALSE);\r
+    gHighligthMenuInfo.TOSQuestionId = 0;\r
+    if (gHighligthMenuInfo.TOSOpCode != NULL) {\r
+      FreePool (gHighligthMenuInfo.TOSOpCode);\r
+    }\r
+    gHighligthMenuInfo.TOSOpCode     = NULL;\r
+    gHighligthMenuInfo.TOSIndex      = 0;\r
+  }\r
 }\r
 \r
 /**\r
 }\r
 \r
 /**\r
@@ -2128,6 +2422,10 @@ UiDisplayMenu (
   }\r
 \r
   FindTopMenu(FormData, &TopOfScreen, &NewPos, &SkipValue);\r
   }\r
 \r
   FindTopMenu(FormData, &TopOfScreen, &NewPos, &SkipValue);\r
+  if (!IsListEmpty (&gMenuOption)) {\r
+    NextMenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
+    gUserInput->SelectedStatement = NextMenuOption->ThisTag;\r
+  }\r
 \r
   gST->ConOut->EnableCursor (gST->ConOut, FALSE);\r
 \r
 \r
   gST->ConOut->EnableCursor (gST->ConOut, FALSE);\r
 \r
@@ -2233,7 +2531,11 @@ UiDisplayMenu (
           }\r
 \r
           if (EFI_ERROR (Status)) {\r
           }\r
 \r
           if (EFI_ERROR (Status)) {\r
-            return Status;\r
+            if (gMisMatch) {\r
+              return EFI_SUCCESS;\r
+            } else {\r
+              return Status;\r
+            }\r
           }\r
           //\r
           // 3. Update the row info which will be used by next menu.\r
           }\r
           //\r
           // 3. Update the row info which will be used by next menu.\r
@@ -2296,10 +2598,12 @@ UiDisplayMenu (
       //\r
       ControlFlag = CfUpdateHelpString;\r
 \r
       //\r
       ControlFlag = CfUpdateHelpString;\r
 \r
+      UpdateHighlightMenuInfo(NewPos, TopOfScreen, SkipValue);\r
+\r
       if (SkipHighLight) {\r
       if (SkipHighLight) {\r
-        MenuOption    = SavedMenuOption;\r
         SkipHighLight = FALSE;\r
         SkipHighLight = FALSE;\r
-        UpdateHighlightMenuInfo (MenuOption, TopOfScreen == &MenuOption->Link ? SkipValue : 0);\r
+        MenuOption    = SavedMenuOption;\r
+        RefreshKeyHelp(gFormData, SavedMenuOption->ThisTag, FALSE);\r
         break;\r
       }\r
 \r
         break;\r
       }\r
 \r
@@ -2341,9 +2645,7 @@ UiDisplayMenu (
         // This is the current selected statement\r
         //\r
         MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
         // This is the current selected statement\r
         //\r
         MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
-        Statement = MenuOption->ThisTag;\r
-\r
-        UpdateHighlightMenuInfo (MenuOption, Temp2);\r
+        RefreshKeyHelp(gFormData, MenuOption->ThisTag, FALSE);\r
 \r
         if (!IsSelectable (MenuOption)) {\r
           break;\r
 \r
         if (!IsSelectable (MenuOption)) {\r
           break;\r
@@ -2578,6 +2880,7 @@ UiDisplayMenu (
       }\r
 \r
       if (EventType == UIEventDriver) {\r
       }\r
 \r
       if (EventType == UIEventDriver) {\r
+        gMisMatch = TRUE;\r
         gUserInput->Action = BROWSER_ACTION_NONE;\r
         ControlFlag = CfExit;\r
         break;\r
         gUserInput->Action = BROWSER_ACTION_NONE;\r
         ControlFlag = CfExit;\r
         break;\r
@@ -2785,13 +3088,6 @@ UiDisplayMenu (
         break;\r
       }\r
 \r
         break;\r
       }\r
 \r
-      //\r
-      // When user press ESC, it will try to show another menu, should clean the gSequence info.\r
-      //\r
-      if (gSequence != 0) {\r
-        gSequence = 0;\r
-      }\r
-\r
       gUserInput->Action = BROWSER_ACTION_FORM_EXIT;\r
       ControlFlag = CfExit;\r
       break;\r
       gUserInput->Action = BROWSER_ACTION_FORM_EXIT;\r
       ControlFlag = CfExit;\r
       break;\r
@@ -2904,6 +3200,8 @@ UiDisplayMenu (
       //\r
       AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
       AdjustDateAndTimePosition (TRUE, &NewPos);\r
       //\r
       AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
       AdjustDateAndTimePosition (TRUE, &NewPos);\r
+\r
+      UpdateHighlightMenuInfo(NewPos, TopOfScreen, SkipValue);\r
       break;\r
 \r
     case CfUiPageUp:\r
       break;\r
 \r
     case CfUiPageUp:\r
@@ -2943,6 +3241,8 @@ UiDisplayMenu (
       //\r
       AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
       AdjustDateAndTimePosition (TRUE, &NewPos);\r
       //\r
       AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
       AdjustDateAndTimePosition (TRUE, &NewPos);\r
+\r
+      UpdateHighlightMenuInfo(NewPos, TopOfScreen, SkipValue);\r
       break;\r
 \r
     case CfUiPageDown:\r
       break;\r
 \r
     case CfUiPageDown:\r
@@ -3004,6 +3304,8 @@ UiDisplayMenu (
       //\r
       AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
       AdjustDateAndTimePosition (TRUE, &NewPos);\r
       //\r
       AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
       AdjustDateAndTimePosition (TRUE, &NewPos);\r
+\r
+      UpdateHighlightMenuInfo(NewPos, TopOfScreen, SkipValue);\r
       break;\r
 \r
     case CfUiDown:\r
       break;\r
 \r
     case CfUiDown:\r
@@ -3065,6 +3367,8 @@ UiDisplayMenu (
         //\r
         AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
         AdjustDateAndTimePosition (TRUE, &NewPos);\r
         //\r
         AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
         AdjustDateAndTimePosition (TRUE, &NewPos);\r
+\r
+        UpdateHighlightMenuInfo(NewPos, TopOfScreen, SkipValue);\r
         break;\r
       }        \r
 \r
         break;\r
       }        \r
 \r
@@ -3162,6 +3466,8 @@ UiDisplayMenu (
       //\r
       AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
       AdjustDateAndTimePosition (TRUE, &NewPos);\r
       //\r
       AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
       AdjustDateAndTimePosition (TRUE, &NewPos);\r
+\r
+      UpdateHighlightMenuInfo(NewPos, TopOfScreen, SkipValue);\r
       break;\r
 \r
     case CfUiNoOperation:\r
       break;\r
 \r
     case CfUiNoOperation:\r
@@ -3571,8 +3877,12 @@ UnloadDisplayEngine (
 \r
   FreeDisplayStrings ();\r
 \r
 \r
   FreeDisplayStrings ();\r
 \r
-  if (gHighligthMenuInfo.OpCode != NULL) {\r
-    FreePool (gHighligthMenuInfo.OpCode);\r
+  if (gHighligthMenuInfo.HLTOpCode != NULL) {\r
+    FreePool (gHighligthMenuInfo.HLTOpCode);\r
+  }\r
+\r
+  if (gHighligthMenuInfo.TOSOpCode != NULL) {\r
+    FreePool (gHighligthMenuInfo.TOSOpCode);\r
   }\r
 \r
   return EFI_SUCCESS;\r
   }\r
 \r
   return EFI_SUCCESS;\r
index f369877386ff235a115059fd17367136a8ed7c51..968d293afdd8c07cea309ecdf4165ed2e7b1a5d7 100644 (file)
@@ -63,6 +63,7 @@ extern CHAR16            gPromptBlockWidth;
 extern CHAR16            gOptionBlockWidth;\r
 extern CHAR16            gHelpBlockWidth;\r
 extern CHAR16            *mUnknownString;\r
 extern CHAR16            gOptionBlockWidth;\r
 extern CHAR16            gHelpBlockWidth;\r
 extern CHAR16            *mUnknownString;\r
+extern BOOLEAN           gMisMatch;\r
 \r
 //\r
 // Screen definitions\r
 \r
 //\r
 // Screen definitions\r
@@ -196,9 +197,31 @@ typedef struct {
 \r
 typedef struct {\r
   EFI_HII_HANDLE     HiiHandle;\r
 \r
 typedef struct {\r
   EFI_HII_HANDLE     HiiHandle;\r
-  EFI_QUESTION_ID    QuestionId;\r
-  EFI_IFR_OP_HEADER  *OpCode;\r
-  UINT16             DisplayRow;\r
+  UINT16             FormId;\r
+  \r
+  //\r
+  // Info for the highlight question.\r
+  // HLT means highlight\r
+  //\r
+  // If one statement has questionid, save questionid info to find the question.\r
+  // If one statement not has questionid info, save the opcode info to find the \r
+  // statement. If more than one statement has same opcode in one form(just like\r
+  // empty subtitle info may has more than one info one form), also use Index \r
+  // info to find the statement.\r
+  //\r
+  EFI_QUESTION_ID    HLTQuestionId;\r
+  EFI_IFR_OP_HEADER  *HLTOpCode;\r
+  UINTN              HLTIndex;\r
+  UINTN              HLTSequence;\r
+  \r
+  //\r
+  // Info for the top of screen question.\r
+  // TOS means Top Of Screen\r
+  //\r
+  EFI_QUESTION_ID    TOSQuestionId;\r
+  EFI_IFR_OP_HEADER  *TOSOpCode;\r
+  UINTN              TOSIndex;\r
+\r
   UINT16             SkipValue;\r
 } DISPLAY_HIGHLIGHT_MENU_INFO;\r
 \r
   UINT16             SkipValue;\r
 } DISPLAY_HIGHLIGHT_MENU_INFO;\r
 \r
index 6e9e6ddfcc9637856b5a3746870cef535767454f..84ae03eea70fb3d01b6f361ddd3efd02b5904cb1 100644 (file)
@@ -1034,7 +1034,7 @@ ProcessOptions (
           // Exit current DisplayForm with new value.\r
           //\r
           gUserInput->SelectedStatement = Question;\r
           // Exit current DisplayForm with new value.\r
           //\r
           gUserInput->SelectedStatement = Question;\r
-          \r
+          gMisMatch = TRUE;\r
           ValueArray = AllocateZeroPool (Question->CurrentValue.BufferLen);\r
           ASSERT (ValueArray != NULL);\r
           gUserInput->InputValue.Buffer    = ValueArray;\r
           ValueArray = AllocateZeroPool (Question->CurrentValue.BufferLen);\r
           ASSERT (ValueArray != NULL);\r
           gUserInput->InputValue.Buffer    = ValueArray;\r
@@ -1119,7 +1119,7 @@ ProcessOptions (
           // Exit current DisplayForm with new value.\r
           //\r
           gUserInput->SelectedStatement = Question;\r
           // Exit current DisplayForm with new value.\r
           //\r
           gUserInput->SelectedStatement = Question;\r
-          \r
+          gMisMatch = TRUE;\r
           ValueArray = AllocateCopyPool (Question->CurrentValue.BufferLen, Question->CurrentValue.Buffer);\r
           ASSERT (ValueArray != NULL);\r
           gUserInput->InputValue.Buffer    = ValueArray;\r
           ValueArray = AllocateCopyPool (Question->CurrentValue.BufferLen, Question->CurrentValue.Buffer);\r
           ASSERT (ValueArray != NULL);\r
           gUserInput->InputValue.Buffer    = ValueArray;\r
@@ -1196,7 +1196,7 @@ ProcessOptions (
             break;\r
           }\r
           gUserInput->SelectedStatement = Question;\r
             break;\r
           }\r
           gUserInput->SelectedStatement = Question;\r
-\r
+          gMisMatch = TRUE;\r
           FreePool (*OptionString);\r
           *OptionString = NULL;\r
           return EFI_NOT_FOUND;\r
           FreePool (*OptionString);\r
           *OptionString = NULL;\r
           return EFI_NOT_FOUND;\r
index 7db775e4b4f235762780d60a34c3c53bad35b84c..ad39d22a9dd5884bb8038115f8d4f5fc6e52bfc1 100644 (file)
@@ -1445,21 +1445,20 @@ ProcessQuestionConfig (
   Process the user input data.\r
 \r
   @param UserInput               The user input data.\r
   Process the user input data.\r
 \r
   @param UserInput               The user input data.\r
-  @param ChangeHighlight         Whether need to change the highlight statement.  \r
 \r
   @retval EFI_SUCESSS            This function always return successfully for now.\r
 \r
 **/\r
 EFI_STATUS\r
 ProcessUserInput (\r
 \r
   @retval EFI_SUCESSS            This function always return successfully for now.\r
 \r
 **/\r
 EFI_STATUS\r
 ProcessUserInput (\r
-  IN USER_INPUT               *UserInput,\r
-  IN BOOLEAN                  ChangeHighlight\r
+  IN USER_INPUT               *UserInput\r
   )\r
 {\r
   EFI_STATUS                    Status;\r
   FORM_BROWSER_STATEMENT        *Statement;\r
 \r
   )\r
 {\r
   EFI_STATUS                    Status;\r
   FORM_BROWSER_STATEMENT        *Statement;\r
 \r
-  Status = EFI_SUCCESS;\r
+  Status    = EFI_SUCCESS;\r
+  Statement = NULL;\r
 \r
   //\r
   // When Exit from FormDisplay function, one of the below two cases must be true.\r
 \r
   //\r
   // When Exit from FormDisplay function, one of the below two cases must be true.\r
@@ -1470,62 +1469,35 @@ ProcessUserInput (
   // Remove the last highligh question id, this id will update when show next form.\r
   //\r
   gCurrentSelection->QuestionId = 0;\r
   // Remove the last highligh question id, this id will update when show next form.\r
   //\r
   gCurrentSelection->QuestionId = 0;\r
+  if (UserInput->SelectedStatement != NULL){\r
+    Statement = GetBrowserStatement(UserInput->SelectedStatement);\r
+    ASSERT (Statement != NULL);\r
+\r
+    //\r
+    // This question is the current user select one,record it and later\r
+    // show it as the highlight question.\r
+    //\r
+    gCurrentSelection->CurrentMenu->QuestionId = Statement->QuestionId;\r
+    //\r
+    // For statement like text, actio, it not has question id.\r
+    // So use FakeQuestionId to save the question.\r
+    //\r
+    if (gCurrentSelection->CurrentMenu->QuestionId == 0) {\r
+      mCurFakeQestId = Statement->FakeQuestionId;\r
+    } else {\r
+      mCurFakeQestId = 0;\r
+    }\r
+  }\r
 \r
   //\r
   // First process the Action field in USER_INPUT.\r
   //\r
   if (UserInput->Action != 0) {\r
     Status = ProcessAction (UserInput->Action, UserInput->DefaultId);\r
 \r
   //\r
   // First process the Action field in USER_INPUT.\r
   //\r
   if (UserInput->Action != 0) {\r
     Status = ProcessAction (UserInput->Action, UserInput->DefaultId);\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-\r
-    //\r
-    // Clear the highlight info.\r
-    //\r
     gCurrentSelection->Statement = NULL;\r
     gCurrentSelection->Statement = NULL;\r
-\r
-    if (UserInput->SelectedStatement != NULL) {\r
-      Statement = GetBrowserStatement(UserInput->SelectedStatement);\r
-      ASSERT (Statement != NULL);\r
-      //\r
-      // Save the current highlight menu in the menu history data.\r
-      // which will be used when later browse back to this form.\r
-      //\r
-      gCurrentSelection->CurrentMenu->QuestionId = Statement->QuestionId;\r
-      //\r
-      // For statement like text, actio, it not has question id.\r
-      // So use FakeQuestionId to save the question.\r
-      //\r
-      if (gCurrentSelection->CurrentMenu->QuestionId == 0) {\r
-        mCurFakeQestId = Statement->FakeQuestionId;\r
-      } else {\r
-        mCurFakeQestId = 0;\r
-      }\r
-    }\r
   } else {\r
   } else {\r
-    Statement = GetBrowserStatement(UserInput->SelectedStatement);\r
     ASSERT (Statement != NULL);\r
     ASSERT (Statement != NULL);\r
-\r
     gCurrentSelection->Statement = Statement;\r
     gCurrentSelection->Statement = Statement;\r
-\r
-    if (ChangeHighlight) {\r
-      //\r
-      // This question is the current user select one,record it and later\r
-      // show it as the highlight question.\r
-      //\r
-      gCurrentSelection->CurrentMenu->QuestionId = Statement->QuestionId;\r
-      //\r
-      // For statement like text, actio, it not has question id.\r
-      // So use FakeQuestionId to save the question.\r
-      //\r
-      if (gCurrentSelection->CurrentMenu->QuestionId == 0) {\r
-        mCurFakeQestId = Statement->FakeQuestionId;\r
-      } else {\r
-        mCurFakeQestId = 0;\r
-      }\r
-    }\r
-\r
     switch (Statement->Operand) {\r
     case EFI_IFR_REF_OP:\r
       Status = ProcessGotoOpCode(Statement, gCurrentSelection);\r
     switch (Statement->Operand) {\r
     case EFI_IFR_REF_OP:\r
       Status = ProcessGotoOpCode(Statement, gCurrentSelection);\r
@@ -1612,7 +1584,6 @@ DisplayForm (
   EFI_STATUS               Status;\r
   USER_INPUT               UserInput;\r
   FORM_ENTRY_INFO          *CurrentMenu;\r
   EFI_STATUS               Status;\r
   USER_INPUT               UserInput;\r
   FORM_ENTRY_INFO          *CurrentMenu;\r
-  BOOLEAN                  ChangeHighlight;\r
 \r
   ZeroMem (&UserInput, sizeof (USER_INPUT));\r
 \r
 \r
   ZeroMem (&UserInput, sizeof (USER_INPUT));\r
 \r
@@ -1636,9 +1607,6 @@ DisplayForm (
 \r
   gCurrentSelection->CurrentMenu = CurrentMenu;\r
 \r
 \r
   gCurrentSelection->CurrentMenu = CurrentMenu;\r
 \r
-  //\r
-  // Find currrent highlight statement.\r
-  //\r
   if (gCurrentSelection->QuestionId == 0) {\r
     //\r
     // Highlight not specified, fetch it from cached menu\r
   if (gCurrentSelection->QuestionId == 0) {\r
     //\r
     // Highlight not specified, fetch it from cached menu\r
@@ -1646,9 +1614,6 @@ DisplayForm (
     gCurrentSelection->QuestionId = CurrentMenu->QuestionId;\r
   }\r
 \r
     gCurrentSelection->QuestionId = CurrentMenu->QuestionId;\r
   }\r
 \r
-  //\r
-  // Evaluate all the Expressions in this Form\r
-  //\r
   Status = EvaluateFormExpressions (gCurrentSelection->FormSet, gCurrentSelection->Form);\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   Status = EvaluateFormExpressions (gCurrentSelection->FormSet, gCurrentSelection->Form);\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
@@ -1656,34 +1621,15 @@ DisplayForm (
 \r
   UpdateDisplayFormData ();\r
 \r
 \r
   UpdateDisplayFormData ();\r
 \r
-  //\r
-  // Three possible status maybe return.\r
-  //\r
-  // EFI_INVALID_PARAMETER: The input dimension info is not valid.\r
-  // EFI_NOT_FOUND:         The input value for oneof/orderedlist opcode is not valid\r
-  //                        and an valid value has return.\r
-  // EFI_SUCCESS:           Success shows form and get user input in UserInput paramenter.\r
-  //\r
   ASSERT (gDisplayFormData.BrowserStatus == BROWSER_SUCCESS);\r
   Status = mFormDisplay->FormDisplay (&gDisplayFormData, &UserInput);\r
   ASSERT (gDisplayFormData.BrowserStatus == BROWSER_SUCCESS);\r
   Status = mFormDisplay->FormDisplay (&gDisplayFormData, &UserInput);\r
-  if (EFI_ERROR (Status) && Status != EFI_NOT_FOUND) {\r
+  if (EFI_ERROR (Status)) {\r
     FreeDisplayFormData();\r
     return Status;\r
   }\r
 \r
     FreeDisplayFormData();\r
     return Status;\r
   }\r
 \r
-  //\r
-  // If status is EFI_SUCCESS, means user has change the highlight menu and new user input return.\r
-  //                           in this case, browser need to change the highlight menu.\r
-  // If status is EFI_NOT_FOUND, means the input DisplayFormData has error for oneof/orderedlist \r
-  //                          opcode and new valid value has return, browser core need to adjust\r
-  //                          value for this opcode and shows this form again.\r
-  //\r
-  ChangeHighlight = (Status == EFI_SUCCESS ? TRUE :FALSE);\r
-\r
-  Status = ProcessUserInput (&UserInput, ChangeHighlight);\r
-\r
+  Status = ProcessUserInput (&UserInput);\r
   FreeDisplayFormData();\r
   FreeDisplayFormData();\r
-\r
   return Status;\r
 }\r
 \r
   return Status;\r
 }\r
 \r