From: Mohamad Al-Jaf mohamadaljaf@gmail.com
--- dlls/windows.ui/tests/uisettings.c | 4 ++-- programs/winecfg/resource.h | 27 ++++++++++++------------ programs/winecfg/theme.c | 33 +++++++++++++++++++++++++++++- programs/winecfg/winecfg.rc | 8 +++++--- 4 files changed, 53 insertions(+), 19 deletions(-)
diff --git a/dlls/windows.ui/tests/uisettings.c b/dlls/windows.ui/tests/uisettings.c index bd1e7a02d20..9711d93d051 100644 --- a/dlls/windows.ui/tests/uisettings.c +++ b/dlls/windows.ui/tests/uisettings.c @@ -152,14 +152,14 @@ static void test_UISettings(void) type = UIColorType_Foreground; hr = IUISettings3_GetColorValue( uisettings3, type, &value ); ok( hr == S_OK, "GetColorValue returned %#lx\n", hr ); - todo_wine ok( value.A == 255 && value.R == 255 && value.G == 255 && value.B == 255, + ok( value.A == 255 && value.R == 255 && value.G == 255 && value.B == 255, "got unexpected value.A == %d value.R == %d value.G == %d value.B == %d\n", value.A, value.R, value.G, value.B );
reset_color( &value ); type = UIColorType_Background; hr = IUISettings3_GetColorValue( uisettings3, type, &value ); ok( hr == S_OK, "GetColorValue returned %#lx\n", hr ); - todo_wine ok( value.A == 255 && value.R == 0 && value.G == 0 && value.B == 0, + ok( value.A == 255 && value.R == 0 && value.G == 0 && value.B == 0, "got unexpected value.A == %d value.R == %d value.G == %d value.B == %d\n", value.A, value.R, value.G, value.B );
done: diff --git a/programs/winecfg/resource.h b/programs/winecfg/resource.h index dd46bc71b40..8d7ff909bf6 100644 --- a/programs/winecfg/resource.h +++ b/programs/winecfg/resource.h @@ -163,19 +163,20 @@ #define IDC_THEME_SIZECOMBO 1403 #define IDC_THEME_SIZETEXT 1404 #define IDC_THEME_THEMECOMBO 1405 -#define IDC_THEME_INSTALL 1406 -#define IDC_LIST_SFPATHS 1407 -#define IDC_LINK_SFPATH 1408 -#define IDC_EDIT_SFPATH 1409 -#define IDC_BROWSE_SFPATH 1410 -#define IDC_SYSPARAM_COMBO 1411 -#define IDC_SYSPARAM_SIZE_TEXT 1412 -#define IDC_SYSPARAM_SIZE 1413 -#define IDC_SYSPARAM_SIZE_UD 1414 -#define IDC_SYSPARAM_COLOR_TEXT 1415 -#define IDC_SYSPARAM_COLOR 1416 -#define IDC_SYSPARAM_FONT 1417 -#define IDC_ENABLE_FILE_ASSOCIATIONS 1418 +#define IDC_THEME_APPCOMBO 1406 +#define IDC_THEME_INSTALL 1407 +#define IDC_LIST_SFPATHS 1408 +#define IDC_LINK_SFPATH 1409 +#define IDC_EDIT_SFPATH 1410 +#define IDC_BROWSE_SFPATH 1411 +#define IDC_SYSPARAM_COMBO 1412 +#define IDC_SYSPARAM_SIZE_TEXT 1413 +#define IDC_SYSPARAM_SIZE 1414 +#define IDC_SYSPARAM_SIZE_UD 1415 +#define IDC_SYSPARAM_COLOR_TEXT 1416 +#define IDC_SYSPARAM_COLOR 1417 +#define IDC_SYSPARAM_FONT 1418 +#define IDC_ENABLE_FILE_ASSOCIATIONS 1419
#define IDC_SYSPARAMS_BUTTON 8400 #define IDC_SYSPARAMS_BUTTON_TEXT 8401 diff --git a/programs/winecfg/theme.c b/programs/winecfg/theme.c index bbc4d3cc11f..1817fa373ae 100644 --- a/programs/winecfg/theme.c +++ b/programs/winecfg/theme.c @@ -45,6 +45,22 @@ WINE_DEFAULT_DEBUG_CHANNEL(winecfg);
/* UXTHEME functions not in the headers */
+static const WCHAR *subkey = L"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize"; +static const WCHAR *name = L"AppsUseLightTheme"; +static const HKEY root = HKEY_CURRENT_USER; + +typedef struct +{ + DWORD value; + const WCHAR *descr; +} AppTheme; + +AppTheme app_themes[] = +{ + { 0, L"Dark" }, + { 1, L"Light" }, +}; + typedef struct tagTHEMENAMES { WCHAR szName[MAX_PATH+1]; @@ -421,6 +437,13 @@ static void enable_size_and_color_controls (HWND dialog, BOOL enable)
static void init_dialog (HWND dialog) { + WCHAR *buf = get_reg_key(root, subkey, name, L"\0001"); + int state = wcscmp(buf, L""); + + SendDlgItemMessageW(dialog, IDC_THEME_APPCOMBO, CB_RESETCONTENT, 0, 0); + SendDlgItemMessageW(dialog, IDC_THEME_APPCOMBO, CB_ADDSTRING, 0, (LPARAM)app_themes[0].descr); + SendDlgItemMessageW(dialog, IDC_THEME_APPCOMBO, CB_ADDSTRING, 0, (LPARAM)app_themes[1].descr); + SendDlgItemMessageW(dialog, IDC_THEME_APPCOMBO, CB_SETCURSEL, state, 0); SendDlgItemMessageW(dialog, IDC_SYSPARAM_SIZE_UD, UDM_SETBUDDY, (WPARAM)GetDlgItem(dialog, IDC_SYSPARAM_SIZE), 0); } @@ -450,7 +473,9 @@ static void update_dialog (HWND dialog) }
static void on_theme_changed(HWND dialog) { - int index = SendMessageW (GetDlgItem (dialog, IDC_THEME_THEMECOMBO), + int index; + + index = SendMessageW (GetDlgItem (dialog, IDC_THEME_THEMECOMBO), CB_GETCURSEL, 0, 0); if (!update_color_and_size (index, GetDlgItem (dialog, IDC_THEME_COLORCOMBO), GetDlgItem (dialog, IDC_THEME_SIZECOMBO))) @@ -463,6 +488,11 @@ static void on_theme_changed(HWND dialog) { { enable_size_and_color_controls (dialog, TRUE); } + + index = SendMessageW (GetDlgItem (dialog, IDC_THEME_APPCOMBO), + CB_GETCURSEL, 0, 0); + set_reg_key_dword(root, subkey, name, index); + theme_dirty = TRUE; }
@@ -1148,6 +1178,7 @@ ThemeDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) if (updating_ui) break; switch (LOWORD(wParam)) { + case IDC_THEME_APPCOMBO: case IDC_THEME_THEMECOMBO: on_theme_changed(hDlg); break; case IDC_THEME_COLORCOMBO: /* fall through */ case IDC_THEME_SIZECOMBO: theme_dirty = TRUE; break; diff --git a/programs/winecfg/winecfg.rc b/programs/winecfg/winecfg.rc index 8775b3b691b..cf04a947e3b 100644 --- a/programs/winecfg/winecfg.rc +++ b/programs/winecfg/winecfg.rc @@ -283,9 +283,11 @@ STYLE WS_CHILD | WS_DISABLED FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Appearance",IDC_STATIC,8,4,244,90 - LTEXT "&Theme:",IDC_STATIC,15,15,130,8 - COMBOBOX IDC_THEME_THEMECOMBO,15,25,130,60,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&Install theme...",IDC_THEME_INSTALL,152,25,93,13 + LTEXT "System &Theme:",IDC_STATIC,15,15,70,8 + COMBOBOX IDC_THEME_THEMECOMBO,15,25,70,60,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "App &Theme:",IDC_STATIC,90,15,70,8 + COMBOBOX IDC_THEME_APPCOMBO,90,25,70,60,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&Install theme...",IDC_THEME_INSTALL,165,25,80,13 LTEXT "&Color:",IDC_THEME_COLORTEXT,15,40,105,8 COMBOBOX IDC_THEME_COLORCOMBO,15,50,105,60,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "&Size:",IDC_THEME_SIZETEXT,126,40,120,8