]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/SetupBrowserDxe/InputHandler.c
Refine the logic about processing options for oneof opcode.
[mirror_edk2.git] / MdeModulePkg / Universal / SetupBrowserDxe / InputHandler.c
index 720efb9a04331f927d9785792570dff0dd9a841e..844590770a68d9a867bf4294dc189a48dad2dc67 100644 (file)
@@ -1023,10 +1023,10 @@ GetSelectionInputPopUp (
     for (Index = 0; Index < OptionCount; Index++) {\r
       OneOfOption = QUESTION_OPTION_FROM_LINK (Link);\r
       Link = GetNextNode (&Question->OptionListHead, Link);\r
-      if ((OneOfOption->SuppressExpression == NULL) ||\r
-            EvaluateExpressionList(OneOfOption->SuppressExpression, FALSE, NULL, NULL) == ExpressFalse) {\r
-        RemoveEntryList (&OneOfOption->Link);\r
-        InsertHeadList (&Question->OptionListHead, &OneOfOption->Link);\r
+      if ((OneOfOption->SuppressExpression != NULL) &&\r
+          EvaluateExpressionList(OneOfOption->SuppressExpression, FALSE, NULL, NULL) > ExpressFalse) {\r
+        continue;\r
+      } else {\r
         PopUpMenuLines++;\r
       }\r
     }\r
@@ -1040,6 +1040,13 @@ GetSelectionInputPopUp (
   Link = GetFirstNode (&Question->OptionListHead);\r
   for (Index = 0; Index < PopUpMenuLines; Index++) {\r
     OneOfOption = QUESTION_OPTION_FROM_LINK (Link);\r
+    Link = GetNextNode (&Question->OptionListHead, Link);\r
+\r
+    if (!OrderedList && (OneOfOption->SuppressExpression != NULL) &&\r
+        EvaluateExpressionList(OneOfOption->SuppressExpression, FALSE, NULL, NULL) > ExpressFalse) {\r
+      Index--;\r
+      continue;\r
+    }\r
 \r
     StringPtr = GetToken (OneOfOption->Text, MenuOption->Handle);\r
     if (StrLen (StringPtr) > PopUpWidth) {\r
@@ -1053,8 +1060,6 @@ GetSelectionInputPopUp (
       //\r
       HighlightOptionIndex = Index;\r
     }\r
-\r
-    Link = GetNextNode (&Question->OptionListHead, Link);\r
   }\r
 \r
   //\r
@@ -1123,6 +1128,13 @@ GetSelectionInputPopUp (
     Link = GetFirstNode (&Question->OptionListHead);\r
     for (Index = 0; Index < TopOptionIndex; Index++) {\r
       Link = GetNextNode (&Question->OptionListHead, Link);\r
+\r
+      OneOfOption = QUESTION_OPTION_FROM_LINK (Link);\r
+      if (!OrderedList && (OneOfOption->SuppressExpression != NULL) &&\r
+          EvaluateExpressionList(OneOfOption->SuppressExpression, FALSE, NULL, NULL) > ExpressFalse) {\r
+        Index--;\r
+        continue;\r
+      }\r
     }\r
 \r
     //\r
@@ -1133,6 +1145,12 @@ GetSelectionInputPopUp (
       OneOfOption = QUESTION_OPTION_FROM_LINK (Link);\r
       Link = GetNextNode (&Question->OptionListHead, Link);\r
 \r
+      if (!OrderedList && (OneOfOption->SuppressExpression != NULL) &&\r
+          EvaluateExpressionList(OneOfOption->SuppressExpression, FALSE, NULL, NULL) > ExpressFalse) {\r
+        Index--;\r
+        continue;\r
+      }\r
+\r
       StringPtr = GetToken (OneOfOption->Text, MenuOption->Handle);\r
       ASSERT (StringPtr != NULL);\r
       //\r
@@ -1384,10 +1402,17 @@ WaitForKeyStroke (
 {\r
   EFI_STATUS  Status;\r
 \r
-  do {\r
-    UiWaitForSingleEvent (gST->ConIn->WaitForKey, 0, 0);\r
+  while (TRUE) {\r
     Status = gST->ConIn->ReadKeyStroke (gST->ConIn, Key);\r
-  } while (EFI_ERROR(Status));\r
+    if (!EFI_ERROR (Status)) {\r
+      break;\r
+    }\r
 \r
+    if (Status != EFI_NOT_READY) {\r
+      continue;\r
+    }\r
+\r
+    UiWaitForSingleEvent (gST->ConIn->WaitForKey, 0, 0);\r
+  }\r
   return Status;\r
 }\r