From 89042ffee375d4e36521045405271f849ae8e951 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Thu, 30 Jul 2020 11:39:22 -0600 Subject: WIXFEAT:4863 In thmutil editboxes, save the value as a literal string and format the variable when populating it. --- src/dutil/inc/thmutil.h | 1 + src/dutil/thmutil.cpp | 26 ++++++++++++-------------- 2 files changed, 13 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/dutil/inc/thmutil.h b/src/dutil/inc/thmutil.h index 00fa1381..11eac9c2 100644 --- a/src/dutil/inc/thmutil.h +++ b/src/dutil/inc/thmutil.h @@ -36,6 +36,7 @@ typedef HRESULT(CALLBACK *PFNTHM_GET_VARIABLE_STRING)( typedef HRESULT(CALLBACK *PFNTHM_SET_VARIABLE_STRING)( __in_z LPCWSTR wzVariable, __in_z_opt LPCWSTR wzValue, + __in BOOL fFormatted, __in_opt LPVOID pvContext ); diff --git a/src/dutil/thmutil.cpp b/src/dutil/thmutil.cpp index 6025749e..046bdc32 100644 --- a/src/dutil/thmutil.cpp +++ b/src/dutil/thmutil.cpp @@ -1020,7 +1020,7 @@ DAPI_(HRESULT) ThemeShowPageEx( pSavedVariable = pPage->rgSavedVariables + v; if (pSavedVariable->wzName) { - pTheme->pfnSetStringVariable(pSavedVariable->wzName, pSavedVariable->sczValue, pTheme->pvVariableContext); + pTheme->pfnSetStringVariable(pSavedVariable->wzName, pSavedVariable->sczValue, FALSE, pTheme->pvVariableContext); } } } @@ -4128,7 +4128,7 @@ static void OnBrowseDirectory( } else if (pTheme->pfnSetStringVariable) { - hr = pTheme->pfnSetStringVariable(pAction->BrowseDirectory.sczVariableName, wzPath, pTheme->pvVariableContext); + hr = pTheme->pfnSetStringVariable(pAction->BrowseDirectory.sczVariableName, wzPath, FALSE, pTheme->pvVariableContext); ThmExitOnFailure(hr, "Failed to set variable: %ls", pAction->BrowseDirectory.sczVariableName); } else if (pTargetControl) @@ -4233,7 +4233,7 @@ static BOOL OnButtonClicked( case THEME_CONTROL_TYPE_RADIOBUTTON: if (pTheme->pfnSetStringVariable && pControl->sczVariable && *pControl->sczVariable && ThemeIsControlChecked(pTheme, pControl->wId)) { - pTheme->pfnSetStringVariable(pControl->sczVariable, pControl->sczValue, pTheme->pvVariableContext); + pTheme->pfnSetStringVariable(pControl->sczVariable, pControl->sczValue, FALSE, pTheme->pvVariableContext); fRefresh = TRUE; } break; @@ -4459,6 +4459,7 @@ static HRESULT ShowControl( HRESULT hr = S_OK; DWORD iPageControl = 0; HWND hwndFocus = NULL; + LPWSTR sczFormatString = NULL; LPWSTR sczText = NULL; THEME_SAVEDVARIABLE* pSavedVariable = NULL; BOOL fHide = SW_HIDE == nCmdShow; @@ -4471,7 +4472,7 @@ static HRESULT ShowControl( hr = ThemeGetTextControl(pTheme, pControl->wId, &sczText); ThmExitOnFailure(hr, "Failed to get the text for control: %ls", pControl->sczName); - hr = pTheme->pfnSetStringVariable(pControl->sczName, sczText, pTheme->pvVariableContext); + hr = pTheme->pfnSetStringVariable(pControl->sczName, sczText, FALSE, pTheme->pvVariableContext); ThmExitOnFailure(hr, "Failed to set the variable '%ls' to '%ls'", pControl->sczName, sczText); } @@ -4621,17 +4622,13 @@ static HRESULT ShowControl( // If this is an editbox control, // try to set its default state to the state of a matching named variable. - if (pTheme->pfnGetStringVariable && THEME_CONTROL_TYPE_EDITBOX == pControl->type) + if (pTheme->pfnFormatString && THEME_CONTROL_TYPE_EDITBOX == pControl->type) { - hr = pTheme->pfnGetStringVariable(pControl->sczName, &sczText, pTheme->pvVariableContext); - if (E_NOTFOUND == hr) - { - ReleaseNullStr(sczText); - } - else - { - ThmExitOnFailure(hr, "Failed to get string variable: %ls", pControl->sczName); - } + hr = StrAllocFormatted(&sczFormatString, L"[%ls]", pControl->sczName); + ThmExitOnFailure(hr, "Failed to create format string: '%ls'", pControl->sczName); + + hr = pTheme->pfnFormatString(sczFormatString, &sczText, pTheme->pvVariableContext); + ThmExitOnFailure(hr, "Failed to format string: '%ls'", sczFormatString); if (THEME_SHOW_PAGE_REASON_REFRESH != reason && pPage && pControl->wPageId) { @@ -4722,6 +4719,7 @@ static HRESULT ShowControl( } LExit: + ReleaseStr(sczFormatString); ReleaseStr(sczText); return hr; -- cgit v1.2.3-55-g6feb