mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 01:15:09 +00:00
[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:
parent
a465b60e7f
commit
16e06b89aa
3 changed files with 72 additions and 49 deletions
|
@ -117,40 +117,27 @@ AppearancePage_OnInit(HWND hwndDlg)
|
||||||
g->pThemes = LoadThemes();
|
g->pThemes = LoadThemes();
|
||||||
if (g->pThemes)
|
if (g->pThemes)
|
||||||
{
|
{
|
||||||
PTHEME pLoadedTheme = NULL;
|
BOOL bLoadedTheme = FALSE;
|
||||||
|
|
||||||
if (g_GlobalData.pwszAction &&
|
if (g_GlobalData.pwszAction &&
|
||||||
g_GlobalData.pwszFile &&
|
g_GlobalData.pwszFile &&
|
||||||
wcscmp(g_GlobalData.pwszAction, L"OpenMSTheme") == 0)
|
wcscmp(g_GlobalData.pwszAction, L"OpenMSTheme") == 0)
|
||||||
{
|
{
|
||||||
/* Check if the theme specified was already loaded */
|
bLoadedTheme = FindOrAppendTheme(g->pThemes,
|
||||||
for (pTheme = g->pThemes; pTheme; pTheme = pTheme->NextTheme)
|
g_GlobalData.pwszFile,
|
||||||
{
|
NULL,
|
||||||
if (pTheme->ThemeFileName && wcsicmp(pTheme->ThemeFileName, g_GlobalData.pwszFile) == 0)
|
NULL,
|
||||||
{
|
&g->ActiveTheme);
|
||||||
pLoadedTheme = pTheme;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pTheme->NextTheme)
|
if (bLoadedTheme)
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!pLoadedTheme)
|
|
||||||
{
|
{
|
||||||
/* Load it now and insert it in the list */
|
g->bThemeChanged = TRUE;
|
||||||
pLoadedTheme = LoadTheme(g_GlobalData.pwszFile, g_GlobalData.pwszFile);
|
g->bSchemeChanged = TRUE;
|
||||||
if (pLoadedTheme)
|
|
||||||
pTheme->NextTheme = pLoadedTheme;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pLoadedTheme)
|
PostMessageW(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0);
|
||||||
{
|
|
||||||
g->ActiveTheme.ThemeActive = TRUE;
|
AppearancePage_LoadSelectedScheme(hwndDlg, g);
|
||||||
g->ActiveTheme.Theme = pLoadedTheme;
|
|
||||||
g->ActiveTheme.Color = pLoadedTheme->ColoursList;
|
|
||||||
g->ActiveTheme.Size = pLoadedTheme->SizesList;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -137,6 +137,7 @@ int SchemeGetMetric(COLOR_SCHEME *scheme, int id);
|
||||||
PLOGFONTW SchemeGetFont(COLOR_SCHEME *scheme, int id);
|
PLOGFONTW SchemeGetFont(COLOR_SCHEME *scheme, int id);
|
||||||
PTHEME LoadTheme(IN LPCWSTR pszThemeFileName,IN LPCWSTR pszThemeName);
|
PTHEME LoadTheme(IN LPCWSTR pszThemeFileName,IN LPCWSTR pszThemeName);
|
||||||
PTHEME LoadThemes(VOID);
|
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 GetActiveTheme(PTHEME pThemeList, PTHEME_SELECTION pSelectedTheme);
|
||||||
BOOL GetActiveClassicTheme(PTHEME pThemeList, PTHEME_SELECTION pSelectedTheme);
|
BOOL GetActiveClassicTheme(PTHEME pThemeList, PTHEME_SELECTION pSelectedTheme);
|
||||||
BOOL LoadCurrentScheme(PCOLOR_SCHEME scheme);
|
BOOL LoadCurrentScheme(PCOLOR_SCHEME scheme);
|
||||||
|
|
|
@ -783,9 +783,62 @@ LoadThemes(VOID)
|
||||||
return pClassicTheme;
|
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
|
* 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
|
BOOL
|
||||||
GetActiveTheme(IN PTHEME pThemeList, OUT PTHEME_SELECTION pSelectedTheme)
|
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 szThemeFileName[MAX_PATH];
|
||||||
WCHAR szColorBuff[MAX_PATH];
|
WCHAR szColorBuff[MAX_PATH];
|
||||||
WCHAR szSizeBuff[MAX_PATH];
|
WCHAR szSizeBuff[MAX_PATH];
|
||||||
PTHEME pTheme;
|
|
||||||
HRESULT hret;
|
HRESULT hret;
|
||||||
|
|
||||||
ZeroMemory(pSelectedTheme, sizeof(THEME_SELECTION));
|
|
||||||
|
|
||||||
/* Retrieve the name of the current theme */
|
/* Retrieve the name of the current theme */
|
||||||
hret = GetCurrentThemeName(szThemeFileName,
|
hret = GetCurrentThemeName(szThemeFileName,
|
||||||
MAX_PATH,
|
MAX_PATH,
|
||||||
|
@ -805,25 +855,10 @@ GetActiveTheme(IN PTHEME pThemeList, OUT PTHEME_SELECTION pSelectedTheme)
|
||||||
MAX_PATH,
|
MAX_PATH,
|
||||||
szSizeBuff,
|
szSizeBuff,
|
||||||
MAX_PATH);
|
MAX_PATH);
|
||||||
if (FAILED(hret)) return FALSE;
|
if (FAILED(hret))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
for (pTheme = pThemeList; pTheme; pTheme = pTheme->NextTheme)
|
return FindOrAppendTheme(pThemeList, szThemeFileName, szColorBuff, szSizeBuff, pSelectedTheme);
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue