From: Dandan Bi Date: Tue, 26 May 2015 11:43:18 +0000 (+0000) Subject: MdeModulePkg:fix browser not call EFI_BROWSER_ACTION_CHANGED X-Git-Tag: edk2-stable201903~9745 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=e6557276f0cf3c114dc881be2478cf724b171e39 MdeModulePkg:fix browser not call EFI_BROWSER_ACTION_CHANGED fix bellow bug: change checkbox from FALSE to TRUE.EFI_BROWSER_ACTION_CHANGED called but when checkbox change back to FALSE,don't call EFI_BROWSER_ACTION_CHANGED Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Dandan Bi Reviewed-by: Eric Dong git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17512 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c b/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c index 637cfda3f6..f1a65b2e89 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c +++ b/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c @@ -2481,7 +2481,7 @@ GetQuestionValueFromForm ( // // Get the question value. // - Status = GetQuestionValue(FormSet, Form, Question, GetSetValueWithHiiDriver); + Status = GetQuestionValue(FormSet, Form, Question, GetSetValueWithEditBuffer); if (EFI_ERROR (Status)) { GetTheVal = FALSE; goto Done; diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c b/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c index 251025b309..b8c5a3919e 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c +++ b/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c @@ -2066,6 +2066,11 @@ ProcessCallBackFunction ( // Status = ValueChangedValidation (gCurrentSelection->FormSet, gCurrentSelection->Form, Statement); if (!EFI_ERROR (Status)) { + // + //check whether the question value changed compared with edit buffer before updating edit buffer + // if changed, set the ValueChanged flag to TRUE,in order to trig the CHANGED callback function + // + IsQuestionValueChanged(gCurrentSelection->FormSet, gCurrentSelection->Form, Statement, GetSetValueWithEditBuffer); // // According the spec, return value from call back of "changing" and // "retrieve" should update to the question's temp buffer. @@ -2103,6 +2108,11 @@ ProcessCallBackFunction ( // InternalStatus = ValueChangedValidation (gCurrentSelection->FormSet, gCurrentSelection->Form, Statement); if (!EFI_ERROR (InternalStatus)) { + // + //check whether the question value changed compared with edit buffer before updating edit buffer + // if changed, set the ValueChanged flag to TRUE,in order to trig the CHANGED callback function + // + IsQuestionValueChanged(gCurrentSelection->FormSet, gCurrentSelection->Form, Statement, GetSetValueWithEditBuffer); SetQuestionValue(FormSet, Form, Statement, GetSetValueWithEditBuffer); } } @@ -2437,10 +2447,6 @@ SetupBrowser ( } } - // - // Verify whether question value has checked, update the ValueChanged flag in Question. - // - IsQuestionValueChanged(gCurrentSelection->FormSet, gCurrentSelection->Form, Statement, GetSetValueWithBuffer); if (!EFI_ERROR (Status) && (Statement->Operand != EFI_IFR_REF_OP) && @@ -2449,6 +2455,11 @@ SetupBrowser ( // Only question value has been changed, browser will trig CHANGED callback. // ProcessCallBackFunction(Selection, Selection->FormSet, Selection->Form, Statement, EFI_BROWSER_ACTION_CHANGED, FALSE); + // + //check whether the question value changed compared with buffer value + //if doesn't change ,set the ValueChanged flag to FALSE ,in order not to display the "configuration changed "information on the screen + // + IsQuestionValueChanged(gCurrentSelection->FormSet, gCurrentSelection->Form, Statement, GetSetValueWithBuffer); } } else { //