[DESK.CPL] -Addendum to 74506 which was a bit rushed. Make it possible to apply a theme that was opened by double click. Also add the active theme in the list of themes if it was not enumerated in the themes directory.

svn path=/trunk/; revision=74511
This commit is contained in:
Giannis Adamopoulos 2017-05-09 08:13:49 +00:00
parent a465b60e7f
commit 16e06b89aa
3 changed files with 72 additions and 49 deletions

View file

@ -117,40 +117,27 @@ AppearancePage_OnInit(HWND hwndDlg)
g->pThemes = LoadThemes();
if (g->pThemes)
{
PTHEME pLoadedTheme = NULL;
BOOL bLoadedTheme = FALSE;
if (g_GlobalData.pwszAction &&
g_GlobalData.pwszFile &&
wcscmp(g_GlobalData.pwszAction, L"OpenMSTheme") == 0)
{
/* Check if the theme specified was already loaded */
for (pTheme = g->pThemes; pTheme; pTheme = pTheme->NextTheme)
{
if (pTheme->ThemeFileName && wcsicmp(pTheme->ThemeFileName, g_GlobalData.pwszFile) == 0)
{
pLoadedTheme = pTheme;
break;
}
if (!pTheme->NextTheme)
break;
}
if (!pLoadedTheme)
{
/* Load it now and insert it in the list */
pLoadedTheme = LoadTheme(g_GlobalData.pwszFile, g_GlobalData.pwszFile);
if (pLoadedTheme)
pTheme->NextTheme = pLoadedTheme;
}
bLoadedTheme = FindOrAppendTheme(g->pThemes,
g_GlobalData.pwszFile,
NULL,
NULL,
&g->ActiveTheme);
}
if (pLoadedTheme)
if (bLoadedTheme)
{
g->ActiveTheme.ThemeActive = TRUE;
g->ActiveTheme.Theme = pLoadedTheme;
g->ActiveTheme.Color = pLoadedTheme->ColoursList;
g->ActiveTheme.Size = pLoadedTheme->SizesList;
g->bThemeChanged = TRUE;
g->bSchemeChanged = TRUE;
PostMessageW(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0);
AppearancePage_LoadSelectedScheme(hwndDlg, g);
}
else
{

View file

@ -137,6 +137,7 @@ int SchemeGetMetric(COLOR_SCHEME *scheme, int id);
PLOGFONTW SchemeGetFont(COLOR_SCHEME *scheme, int id);
PTHEME LoadTheme(IN LPCWSTR pszThemeFileName,IN LPCWSTR pszThemeName);
PTHEME LoadThemes(VOID);
BOOL FindOrAppendTheme(IN PTHEME pThemeList, IN LPCWSTR pwszThemeFileName, IN LPCWSTR pwszColorBuff, IN LPCWSTR pwszSizeBuff, OUT PTHEME_SELECTION pSelectedTheme);
BOOL GetActiveTheme(PTHEME pThemeList, PTHEME_SELECTION pSelectedTheme);
BOOL GetActiveClassicTheme(PTHEME pThemeList, PTHEME_SELECTION pSelectedTheme);
BOOL LoadCurrentScheme(PCOLOR_SCHEME scheme);

View file

@ -783,9 +783,62 @@ LoadThemes(VOID)
return pClassicTheme;
}
/*
* FindSelectedTheme: Finds the specified theme in the list of themes
* or loads it if it was not loaded already.
*/
BOOL
FindOrAppendTheme(IN PTHEME pThemeList,
IN LPCWSTR pwszThemeFileName,
IN LPCWSTR pwszColorBuff,
IN LPCWSTR pwszSizeBuff,
OUT PTHEME_SELECTION pSelectedTheme)
{
PTHEME pTheme;
PTHEME pFoundTheme = NULL;
ZeroMemory(pSelectedTheme, sizeof(THEME_SELECTION));
for (pTheme = pThemeList; pTheme; pTheme = pTheme->NextTheme)
{
if (pTheme->ThemeFileName &&
_wcsicmp(pTheme->ThemeFileName, pwszThemeFileName) == 0)
{
pFoundTheme = pTheme;
break;
}
if (pTheme->NextTheme == NULL)
break;
}
if (!pFoundTheme)
{
pFoundTheme = LoadTheme(pwszThemeFileName, pwszThemeFileName);
if (!pFoundTheme)
return FALSE;
pTheme->NextTheme = pFoundTheme;
}
pSelectedTheme->ThemeActive = TRUE;
pSelectedTheme->Theme = pFoundTheme;
if (pwszColorBuff)
pSelectedTheme->Color = FindStyle(pFoundTheme->ColoursList, pwszColorBuff);
else
pSelectedTheme->Color = pFoundTheme->ColoursList;
if (pwszSizeBuff)
pSelectedTheme->Size = FindStyle(pFoundTheme->SizesList, pwszSizeBuff);
else
pSelectedTheme->Size = pFoundTheme->SizesList;
return TRUE;
}
/*
* GetActiveTheme: Gets the active theme and populates pSelectedTheme
* with entries from the list of loaded themes
* with entries from the list of loaded themes.
*/
BOOL
GetActiveTheme(IN PTHEME pThemeList, OUT PTHEME_SELECTION pSelectedTheme)
@ -793,11 +846,8 @@ GetActiveTheme(IN PTHEME pThemeList, OUT PTHEME_SELECTION pSelectedTheme)
WCHAR szThemeFileName[MAX_PATH];
WCHAR szColorBuff[MAX_PATH];
WCHAR szSizeBuff[MAX_PATH];
PTHEME pTheme;
HRESULT hret;
ZeroMemory(pSelectedTheme, sizeof(THEME_SELECTION));
/* Retrieve the name of the current theme */
hret = GetCurrentThemeName(szThemeFileName,
MAX_PATH,
@ -805,25 +855,10 @@ GetActiveTheme(IN PTHEME pThemeList, OUT PTHEME_SELECTION pSelectedTheme)
MAX_PATH,
szSizeBuff,
MAX_PATH);
if (FAILED(hret)) return FALSE;
if (FAILED(hret))
return FALSE;
for (pTheme = pThemeList; pTheme; pTheme = pTheme->NextTheme)
{
if (pTheme->ThemeFileName &&
_wcsicmp(pTheme->ThemeFileName, szThemeFileName) == 0)
{
break;
}
}
if (pTheme == NULL) return FALSE;
pSelectedTheme->ThemeActive = TRUE;
pSelectedTheme->Theme = pTheme;
pSelectedTheme->Color = FindStyle(pTheme->ColoursList, szColorBuff);
pSelectedTheme->Size = FindStyle(pTheme->SizesList, szSizeBuff);
return TRUE;
return FindOrAppendTheme(pThemeList, szThemeFileName, szColorBuff, szSizeBuff, pSelectedTheme);
}
/*