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;