From 9d3af7547bb790d39157dd36dfa862a1abf47beb Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Mon, 8 Nov 2021 15:24:46 -0600 Subject: Go back to thmutil not interfering with wixstdba controls. --- src/api/burn/balutil/inc/BAFunctions.h | 1 + src/api/burn/balutil/inc/BalBaseBAFunctions.h | 3 +- src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h | 2 +- src/api/burn/balutil/inc/IBAFunctions.h | 3 +- .../WixStandardBootstrapperApplication.cpp | 28 +++++++++++++++- src/libs/dutil/WixToolset.DUtil/inc/thmutil.h | 5 ++- src/libs/dutil/WixToolset.DUtil/thmutil.cpp | 38 ++++++++++------------ src/samples/thmviewer/display.cpp | 7 ++-- .../Manual/BafThmutilTesting/BafThmUtilTesting.cpp | 3 +- 9 files changed, 61 insertions(+), 29 deletions(-) (limited to 'src') diff --git a/src/api/burn/balutil/inc/BAFunctions.h b/src/api/burn/balutil/inc/BAFunctions.h index 149a12f8..21cace1f 100644 --- a/src/api/burn/balutil/inc/BAFunctions.h +++ b/src/api/burn/balutil/inc/BAFunctions.h @@ -141,6 +141,7 @@ struct BA_FUNCTIONS_ONTHEMECONTROLLOADING_RESULTS DWORD cbSize; BOOL fProcessed; WORD wId; + BOOL fDisableAutomaticFunctionality; }; struct BA_FUNCTIONS_ONTHEMECONTROLWMCOMMAND_ARGS diff --git a/src/api/burn/balutil/inc/BalBaseBAFunctions.h b/src/api/burn/balutil/inc/BalBaseBAFunctions.h index 1493253b..2866f6b0 100644 --- a/src/api/burn/balutil/inc/BalBaseBAFunctions.h +++ b/src/api/burn/balutil/inc/BalBaseBAFunctions.h @@ -835,7 +835,8 @@ public: // IBAFunctions virtual STDMETHODIMP OnThemeControlLoading( __in LPCWSTR /*wzName*/, __inout BOOL* /*pfProcessed*/, - __inout WORD* /*pwId*/ + __inout WORD* /*pwId*/, + __inout BOOL* /*pfDisableAutomaticFunctionality*/ ) { return S_OK; diff --git a/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h b/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h index 135f7c76..e841c660 100644 --- a/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h +++ b/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h @@ -30,7 +30,7 @@ static HRESULT BalBaseBAFunctionsProcOnThemeControlLoading( __inout BA_FUNCTIONS_ONTHEMECONTROLLOADING_RESULTS* pResults ) { - return pBAFunctions->OnThemeControlLoading(pArgs->wzName, &pResults->fProcessed, &pResults->wId); + return pBAFunctions->OnThemeControlLoading(pArgs->wzName, &pResults->fProcessed, &pResults->wId, &pResults->fDisableAutomaticFunctionality); } static HRESULT BalBaseBAFunctionsProcOnThemeControlWmCommand( diff --git a/src/api/burn/balutil/inc/IBAFunctions.h b/src/api/burn/balutil/inc/IBAFunctions.h index 50126ba1..ea6c116b 100644 --- a/src/api/burn/balutil/inc/IBAFunctions.h +++ b/src/api/burn/balutil/inc/IBAFunctions.h @@ -35,7 +35,8 @@ DECLARE_INTERFACE_IID_(IBAFunctions, IBootstrapperApplication, "0FB445ED-17BD-49 STDMETHOD(OnThemeControlLoading)( __in LPCWSTR wzName, __inout BOOL* pfProcessed, - __inout WORD* pwId + __inout WORD* pwId, + __inout BOOL* pfDisableAutomaticFunctionality ) = 0; // OnThemeControlWmCommand - Called when WM_COMMAND is received for a control. diff --git a/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp b/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp index 4d819c7d..6a8bb2b8 100644 --- a/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp +++ b/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp @@ -2927,6 +2927,7 @@ private: fProcessed = TRUE; pResults->wId = pAssignControl->wId; + pResults->fDisableAutomaticFunctionality = pAssignControl->fDisableAutomaticFunctionality; ExitFunction(); } } @@ -2938,6 +2939,7 @@ private: themeControlLoadingResults.cbSize = sizeof(themeControlLoadingResults); themeControlLoadingResults.wId = pResults->wId; + themeControlLoadingResults.fDisableAutomaticFunctionality = pResults->fDisableAutomaticFunctionality; hr = m_pfnBAFunctionsProc(BA_FUNCTIONS_MESSAGE_ONTHEMECONTROLLOADING, &themeControlLoadingArgs, &themeControlLoadingResults, m_pvBAFunctionsProcContext); @@ -2953,6 +2955,7 @@ private: { fProcessed = TRUE; pResults->wId = themeControlLoadingResults.wId; + pResults->fDisableAutomaticFunctionality = themeControlLoadingResults.fDisableAutomaticFunctionality; } } } @@ -4040,7 +4043,7 @@ LExit: BalExitOnNullWithLastError(pfnBAFunctionsCreate, hr, "Failed to get BAFunctionsCreate entry-point from: %ls", sczBafPath); bafCreateArgs.cbSize = sizeof(bafCreateArgs); - bafCreateArgs.qwBAFunctionsAPIVersion = MAKEQWORDVERSION(2021, 9, 20, 0); + bafCreateArgs.qwBAFunctionsAPIVersion = MAKEQWORDVERSION(2021, 11, 8, 0); bafCreateArgs.pBootstrapperCreateArgs = &m_createArgs; bafCreateResults.cbSize = sizeof(bafCreateResults); @@ -4138,138 +4141,161 @@ public: pAssignControl->wId = WIXSTDBA_CONTROL_INSTALL_BUTTON; pAssignControl->wzName = L"InstallButton"; pAssignControl->ppControl = &m_pControlInstallButton; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlInstallButton = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_EULA_RICHEDIT; pAssignControl->wzName = L"EulaRichedit"; pAssignControl->ppControl = &m_pControlEulaRichedit; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlEulaRichedit = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_EULA_LINK; pAssignControl->wzName = L"EulaHyperlink"; pAssignControl->ppControl = &m_pControlEulaHyperlink; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlEulaHyperlink = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_EULA_ACCEPT_CHECKBOX; pAssignControl->wzName = L"EulaAcceptCheckbox"; pAssignControl->ppControl = &m_pControlEulaAcceptCheckbox; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlEulaAcceptCheckbox = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_REPAIR_BUTTON; pAssignControl->wzName = L"RepairButton"; pAssignControl->ppControl = &m_pControlRepairButton; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlRepairButton = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_UNINSTALL_BUTTON; pAssignControl->wzName = L"UninstallButton"; pAssignControl->ppControl = &m_pControlUninstallButton; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlUninstallButton = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_CACHE_PROGRESS_PACKAGE_TEXT; pAssignControl->wzName = L"CacheProgressPackageText"; pAssignControl->ppControl = &m_pControlCacheProgressPackageText; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlCacheProgressPackageText = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_CACHE_PROGRESS_BAR; pAssignControl->wzName = L"CacheProgressbar"; pAssignControl->ppControl = &m_pControlCacheProgressbar; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlCacheProgressbar = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_CACHE_PROGRESS_TEXT; pAssignControl->wzName = L"CacheProgressText"; pAssignControl->ppControl = &m_pControlCacheProgressText; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlCacheProgressText = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_EXECUTE_PROGRESS_PACKAGE_TEXT; pAssignControl->wzName = L"ExecuteProgressPackageText"; pAssignControl->ppControl = &m_pControlExecuteProgressPackageText; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlExecuteProgressPackageText = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_EXECUTE_PROGRESS_BAR; pAssignControl->wzName = L"ExecuteProgressbar"; pAssignControl->ppControl = &m_pControlExecuteProgressbar; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlExecuteProgressbar = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_EXECUTE_PROGRESS_TEXT; pAssignControl->wzName = L"ExecuteProgressText"; pAssignControl->ppControl = &m_pControlExecuteProgressText; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlExecuteProgressText = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_EXECUTE_PROGRESS_ACTIONDATA_TEXT; pAssignControl->wzName = L"ExecuteProgressActionDataText"; pAssignControl->ppControl = &m_pControlExecuteProgressActionDataText; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlExecuteProgressActionDataText = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_OVERALL_PROGRESS_PACKAGE_TEXT; pAssignControl->wzName = L"OverallProgressPackageText"; pAssignControl->ppControl = &m_pControlOverallProgressPackageText; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlOverallProgressPackageText = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_OVERALL_PROGRESS_BAR; pAssignControl->wzName = L"OverallProgressbar"; pAssignControl->ppControl = &m_pControlOverallProgressbar; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlOverallProgressbar = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_OVERALL_CALCULATED_PROGRESS_BAR; pAssignControl->wzName = L"OverallCalculatedProgressbar"; pAssignControl->ppControl = &m_pControlOverallCalculatedProgressbar; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlOverallCalculatedProgressbar = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_OVERALL_PROGRESS_TEXT; pAssignControl->wzName = L"OverallProgressText"; pAssignControl->ppControl = &m_pControlOverallProgressText; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlOverallProgressText = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_PROGRESS_CANCEL_BUTTON; pAssignControl->wzName = L"ProgressCancelButton"; pAssignControl->ppControl = &m_pControlProgressCancelButton; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlProgressCancelButton = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_LAUNCH_BUTTON; pAssignControl->wzName = L"LaunchButton"; pAssignControl->ppControl = &m_pControlLaunchButton; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlLaunchButton = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_SUCCESS_RESTART_BUTTON; pAssignControl->wzName = L"SuccessRestartButton"; pAssignControl->ppControl = &m_pControlSuccessRestartButton; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlSuccessRestartButton = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_FAILURE_LOGFILE_LINK; pAssignControl->wzName = L"FailureLogFileLink"; pAssignControl->ppControl = &m_pControlFailureLogFileLink; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlFailureLogFileLink = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_FAILURE_MESSAGE_TEXT; pAssignControl->wzName = L"FailureMessageText"; pAssignControl->ppControl = &m_pControlFailureMessageText; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlFailureMessageText = NULL; ++pAssignControl; pAssignControl->wId = WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON; pAssignControl->wzName = L"FailureRestartButton"; pAssignControl->ppControl = &m_pControlFailureRestartButton; + pAssignControl->fDisableAutomaticFunctionality = TRUE; m_pControlFailureRestartButton = NULL; C_ASSERT(LAST_WIXSTDBA_CONTROL == WIXSTDBA_CONTROL_FAILURE_RESTART_BUTTON + 1); diff --git a/src/libs/dutil/WixToolset.DUtil/inc/thmutil.h b/src/libs/dutil/WixToolset.DUtil/inc/thmutil.h index 2f0bfeac..8cf7dc92 100644 --- a/src/libs/dutil/WixToolset.DUtil/inc/thmutil.h +++ b/src/libs/dutil/WixToolset.DUtil/inc/thmutil.h @@ -196,6 +196,7 @@ struct THEME_ASSIGN_CONTROL_ID WORD wId; // id to apply to control LPCWSTR wzName; // name of control to match const THEME_CONTROL** ppControl; + BOOL fDisableAutomaticFunctionality; // prevent declarative functionality from interfering with the application's imperative code }; const WORD THEME_FIRST_ASSIGN_CONTROL_ID = 0x4000; // Recommended first control id to be assigned. @@ -223,7 +224,7 @@ typedef struct _THEME_CONTROL LPWSTR sczEnableCondition; LPWSTR sczVisibleCondition; - BOOL fDisableVariableFunctionality; + BOOL fDisableAutomaticFunctionality; union { @@ -470,6 +471,8 @@ typedef struct _THEME_LOADINGCONTROL_RESULTS // The values [100, THEME_FIRST_ASSIGN_CONTROL_ID) are reserved for thmutil. // Due to this value being packed into 16 bits for many system window messages, this is restricted to a WORD. WORD wId; + // Used to prevent declarative functionality from interfering with the application's imperative code. + BOOL fDisableAutomaticFunctionality; } THEME_LOADINGCONTROL_RESULTS; diff --git a/src/libs/dutil/WixToolset.DUtil/thmutil.cpp b/src/libs/dutil/WixToolset.DUtil/thmutil.cpp index 74c1a8b0..b76d6483 100644 --- a/src/libs/dutil/WixToolset.DUtil/thmutil.cpp +++ b/src/libs/dutil/WixToolset.DUtil/thmutil.cpp @@ -295,7 +295,8 @@ static void UnloadThemeControls( static HRESULT OnLoadingControl( __in THEME* pTheme, __in const THEME_CONTROL* pControl, - __inout WORD* pwId + __inout WORD* pwId, + __inout BOOL* pfDisableAutomaticFunctionality ); static HRESULT LoadControls( __in THEME* pTheme, @@ -3432,9 +3433,6 @@ static HRESULT ParseControl( pControl->dwInternalStyle |= INTERNAL_CONTROL_STYLE_HIDE_WHEN_DISABLED; } - hr = XmlGetYesNoAttribute(pixn, L"DisableAutomaticBehavior", &pControl->fDisableVariableFunctionality); - ThmExitOnOptionalXmlQueryFailure(hr, fXmlFound, "Failed when querying control DisableAutomaticBehavior attribute."); - hr = ParseActions(pixn, pControl); ThmExitOnFailure(hr, "Failed to parse action nodes of the control."); @@ -5002,6 +5000,7 @@ static void OnBrowseDirectory( { // Since editbox changes aren't immediately saved off, we have to treat them differently. THEME_CONTROL* pTargetControl = NULL; + BOOL fSetVariable = NULL != pTheme->pfnSetStringVariable; for (DWORD i = 0; i < pTheme->cControls; ++i) { @@ -5015,21 +5014,18 @@ static void OnBrowseDirectory( } } - if (pTargetControl && THEME_CONTROL_TYPE_EDITBOX == pTargetControl->type && !pTargetControl->fDisableVariableFunctionality) + if (pTargetControl && !pTargetControl->fDisableAutomaticFunctionality && (!fSetVariable || THEME_CONTROL_TYPE_EDITBOX == pTargetControl->type)) { + fSetVariable = FALSE; hr = ThemeSetTextControl(pTargetControl, wzPath); - ThmExitOnFailure(hr, "Failed to set text on editbox: %ls", pTargetControl->sczName); + ThmExitOnFailure(hr, "Failed to set text on control: %ls", pTargetControl->sczName); } - else if (pTheme->pfnSetStringVariable) + + if (fSetVariable) { hr = pTheme->pfnSetStringVariable(pAction->BrowseDirectory.sczVariableName, wzPath, FALSE, pTheme->pvVariableContext); ThmExitOnFailure(hr, "Failed to set variable: %ls", pAction->BrowseDirectory.sczVariableName); } - else if (pTargetControl) - { - hr = ThemeSetTextControl(pTargetControl, wzPath); - ThmExitOnFailure(hr, "Failed to set text on control: %ls", pTargetControl->sczName); - } ThemeShowPageEx(pTheme, pTheme->dwCurrentPageId, SW_SHOW, THEME_SHOW_PAGE_REASON_REFRESH); } @@ -5051,7 +5047,7 @@ static BOOL OnButtonClicked( if (THEME_CONTROL_TYPE_BUTTON == pControl->type || THEME_CONTROL_TYPE_COMMANDLINK == pControl->type) { - if (pControl->cActions) + if (!pControl->fDisableAutomaticFunctionality && pControl->cActions) { fHandled = TRUE; THEME_ACTION* pChosenAction = pControl->pDefaultAction; @@ -5109,7 +5105,7 @@ static BOOL OnButtonClicked( } } } - else if (!pControl->fDisableVariableFunctionality && (pTheme->pfnSetNumericVariable || pTheme->pfnSetStringVariable)) + else if (!pControl->fDisableAutomaticFunctionality && (pTheme->pfnSetNumericVariable || pTheme->pfnSetStringVariable)) { BOOL fRefresh = FALSE; @@ -5564,7 +5560,7 @@ static HRESULT ShowControl( THEME_PAGE* pPage = ThemeGetPage(pTheme, dwPageId); // Save the editbox value if necessary (other control types save their values immediately). - if (pTheme->pfnSetStringVariable && !pControl->fDisableVariableFunctionality && + if (pTheme->pfnSetStringVariable && !pControl->fDisableAutomaticFunctionality && fSaveEditboxes && THEME_CONTROL_TYPE_EDITBOX == pControl->type && pControl->sczName && *pControl->sczName) { hr = ThemeGetTextControl(pControl, &sczText); @@ -5591,7 +5587,7 @@ static HRESULT ShowControl( BOOL fEnabled = !(pControl->dwInternalStyle & INTERNAL_CONTROL_STYLE_DISABLED); BOOL fVisible = !(pControl->dwInternalStyle & INTERNAL_CONTROL_STYLE_HIDDEN); - if (!pControl->fDisableVariableFunctionality) + if (!pControl->fDisableAutomaticFunctionality) { if (pTheme->pfnEvaluateCondition) { @@ -6017,7 +6013,8 @@ static LRESULT CALLBACK StaticOwnerDrawWndProc( static HRESULT OnLoadingControl( __in THEME* pTheme, __in const THEME_CONTROL* pControl, - __inout WORD* pwId + __inout WORD* pwId, + __inout BOOL* pfDisableAutomaticFunctionality ) { HRESULT hr = S_OK; @@ -6037,6 +6034,7 @@ static HRESULT OnLoadingControl( if (SUCCEEDED(hr)) { *pwId = loadingControlResults.wId; + *pfDisableAutomaticFunctionality = loadingControlResults.fDisableAutomaticFunctionality; } } @@ -6238,7 +6236,7 @@ static HRESULT LoadControls( // Default control ids to the next id, unless there is a specific id to assign to a control. WORD wControlId = THEME_FIRST_AUTO_ASSIGN_CONTROL_ID; - hr = OnLoadingControl(pTheme, pControl, &wControlId); + hr = OnLoadingControl(pTheme, pControl, &wControlId, &pControl->fDisableAutomaticFunctionality); ThmExitOnFailure(hr, "ThmLoadingControl failed."); // This range is reserved for thmutil. The process will run out of available window handles before reaching the end of the range. @@ -6256,7 +6254,7 @@ static HRESULT LoadControls( BOOL fDisabled = pControl->dwStyle & WS_DISABLED; // If the control is supposed to be initially visible and it has a VisibleCondition, check if it's true. - if (fVisible && pControl->sczVisibleCondition && pTheme->pfnEvaluateCondition && !pControl->fDisableVariableFunctionality) + if (fVisible && pControl->sczVisibleCondition && pTheme->pfnEvaluateCondition && !pControl->fDisableAutomaticFunctionality) { hr = pTheme->pfnEvaluateCondition(pControl->sczVisibleCondition, &fVisible, pTheme->pvVariableContext); ThmExitOnFailure(hr, "Failed to evaluate VisibleCondition: %ls", pControl->sczVisibleCondition); @@ -6275,7 +6273,7 @@ static HRESULT LoadControls( } // If the control is supposed to be initially enabled and it has an EnableCondition, check if it's true. - if (!fDisabled && pControl->sczEnableCondition && pTheme->pfnEvaluateCondition && !pControl->fDisableVariableFunctionality) + if (!fDisabled && pControl->sczEnableCondition && pTheme->pfnEvaluateCondition && !pControl->fDisableAutomaticFunctionality) { BOOL fEnable = TRUE; diff --git a/src/samples/thmviewer/display.cpp b/src/samples/thmviewer/display.cpp index f40b50b5..444c6cfb 100644 --- a/src/samples/thmviewer/display.cpp +++ b/src/samples/thmviewer/display.cpp @@ -327,9 +327,10 @@ static BOOL DisplayOnThmLoadedControl( } else if (THEME_CONTROL_TYPE_PROGRESSBAR == pControl->type) { - DWORD dwId = ::SetTimer(pTheme->hwndParent, reinterpret_cast(pControl), 500, NULL); - dwId = dwId; // prevents warning in "ship" build. - Assert(dwId == pControl->wId); + UINT_PTR timerId = reinterpret_cast(pControl); + UINT_PTR id = ::SetTimer(pTheme->hwndParent, timerId, 500, NULL); + id = id; // prevents warning in "ship" build. + Assert(id == timerId); } LExit: diff --git a/src/test/burn/TestData/Manual/BafThmutilTesting/BafThmUtilTesting.cpp b/src/test/burn/TestData/Manual/BafThmutilTesting/BafThmUtilTesting.cpp index 6c37fbd8..7c533fea 100644 --- a/src/test/burn/TestData/Manual/BafThmutilTesting/BafThmUtilTesting.cpp +++ b/src/test/burn/TestData/Manual/BafThmutilTesting/BafThmUtilTesting.cpp @@ -46,7 +46,8 @@ public: // IBAFunctions virtual STDMETHODIMP OnThemeControlLoading( __in LPCWSTR wzName, __inout BOOL* pfProcessed, - __inout WORD* pwId + __inout WORD* pwId, + __inout BOOL* /*pfDisableAutomaticFunctionality*/ ) { if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, wzName, -1, L"InstallTestButton", -1)) -- cgit v1.2.3-55-g6feb