@joebigelow / wix / commits / 89042ffe

WIXFEAT:4863 In thmutil editboxes, save the value as a literal string and format the variable when populating it.

Sean Hall committed Jul 30, 2020 at 11:39 UTC 89042ffee375d4e36521045405271f849ae8e951
2 files changed +13 -14
src/dutil/inc/thmutil.h
+1
@@ -36,6 +36,7 @@ typedef HRESULT(CALLBACK *PFNTHM_GET_VARIABLE_STRING)(
36 typedef HRESULT(CALLBACK *PFNTHM_SET_VARIABLE_STRING)(
37 __in_z LPCWSTR wzVariable,
38 __in_z_opt LPCWSTR wzValue,
39 + __in BOOL fFormatted,
40 __in_opt LPVOID pvContext
41 );
42
src/dutil/thmutil.cpp
+12 -14
@@ -1020,7 +1020,7 @@ DAPI_(HRESULT) ThemeShowPageEx(
1020 pSavedVariable = pPage->rgSavedVariables + v;
1021 if (pSavedVariable->wzName)
1022 {
1023 - pTheme->pfnSetStringVariable(pSavedVariable->wzName, pSavedVariable->sczValue, pTheme->pvVariableContext);
1023 + pTheme->pfnSetStringVariable(pSavedVariable->wzName, pSavedVariable->sczValue, FALSE, pTheme->pvVariableContext);
1024 }
1025 }
1026 }
@@ -4128,7 +4128,7 @@ static void OnBrowseDirectory(
4128 }
4129 else if (pTheme->pfnSetStringVariable)
4130 {
4131 - hr = pTheme->pfnSetStringVariable(pAction->BrowseDirectory.sczVariableName, wzPath, pTheme->pvVariableContext);
4131 + hr = pTheme->pfnSetStringVariable(pAction->BrowseDirectory.sczVariableName, wzPath, FALSE, pTheme->pvVariableContext);
4132 ThmExitOnFailure(hr, "Failed to set variable: %ls", pAction->BrowseDirectory.sczVariableName);
4133 }
4134 else if (pTargetControl)
@@ -4233,7 +4233,7 @@ static BOOL OnButtonClicked(
4233 case THEME_CONTROL_TYPE_RADIOBUTTON:
4234 if (pTheme->pfnSetStringVariable && pControl->sczVariable && *pControl->sczVariable && ThemeIsControlChecked(pTheme, pControl->wId))
4235 {
4236 - pTheme->pfnSetStringVariable(pControl->sczVariable, pControl->sczValue, pTheme->pvVariableContext);
4236 + pTheme->pfnSetStringVariable(pControl->sczVariable, pControl->sczValue, FALSE, pTheme->pvVariableContext);
4237 fRefresh = TRUE;
4238 }
4239 break;
@@ -4459,6 +4459,7 @@ static HRESULT ShowControl(
4459 HRESULT hr = S_OK;
4460 DWORD iPageControl = 0;
4461 HWND hwndFocus = NULL;
4462 + LPWSTR sczFormatString = NULL;
4463 LPWSTR sczText = NULL;
4464 THEME_SAVEDVARIABLE* pSavedVariable = NULL;
4465 BOOL fHide = SW_HIDE == nCmdShow;
@@ -4471,7 +4472,7 @@ static HRESULT ShowControl(
4472 hr = ThemeGetTextControl(pTheme, pControl->wId, &sczText);
4473 ThmExitOnFailure(hr, "Failed to get the text for control: %ls", pControl->sczName);
4474
4474 - hr = pTheme->pfnSetStringVariable(pControl->sczName, sczText, pTheme->pvVariableContext);
4475 + hr = pTheme->pfnSetStringVariable(pControl->sczName, sczText, FALSE, pTheme->pvVariableContext);
4476 ThmExitOnFailure(hr, "Failed to set the variable '%ls' to '%ls'", pControl->sczName, sczText);
4477 }
4478
@@ -4621,17 +4622,13 @@ static HRESULT ShowControl(
4622
4623 // If this is an editbox control,
4624 // try to set its default state to the state of a matching named variable.
4624 - if (pTheme->pfnGetStringVariable && THEME_CONTROL_TYPE_EDITBOX == pControl->type)
4625 + if (pTheme->pfnFormatString && THEME_CONTROL_TYPE_EDITBOX == pControl->type)
4626 {
4626 - hr = pTheme->pfnGetStringVariable(pControl->sczName, &sczText, pTheme->pvVariableContext);
4627 - if (E_NOTFOUND == hr)
4628 - {
4629 - ReleaseNullStr(sczText);
4630 - }
4631 - else
4632 - {
4633 - ThmExitOnFailure(hr, "Failed to get string variable: %ls", pControl->sczName);
4634 - }
4627 + hr = StrAllocFormatted(&sczFormatString, L"[%ls]", pControl->sczName);
4628 + ThmExitOnFailure(hr, "Failed to create format string: '%ls'", pControl->sczName);
4629 +
4630 + hr = pTheme->pfnFormatString(sczFormatString, &sczText, pTheme->pvVariableContext);
4631 + ThmExitOnFailure(hr, "Failed to format string: '%ls'", sczFormatString);
4632
4633 if (THEME_SHOW_PAGE_REASON_REFRESH != reason && pPage && pControl->wPageId)
4634 {
@@ -4722,6 +4719,7 @@ static HRESULT ShowControl(
4719 }
4720
4721 LExit:
4722 + ReleaseStr(sczFormatString);
4723 ReleaseStr(sczText);
4724
4725 return hr;