/****************************************************************** * WINECON_RegSaveHelper * * */ static void WINECON_RegSaveHelper(HKEY hConKey, const struct config_data* cfg) { DWORD val; WINECON_DumpConfig("save", cfg); val = cfg->cursor_size; RegSetValueExW(hConKey, wszCursorSize, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); val = cfg->cursor_visible; RegSetValueExW(hConKey, wszCursorVisible, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); val = cfg->edition_mode; RegSetValueExW(hConKey, wszEditionMode, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); val = cfg->exit_on_die; RegSetValueExW(hConKey, wszExitOnDie, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); RegSetValueExW(hConKey, wszFaceName, 0, REG_SZ, (LPBYTE)&cfg->face_name, sizeof(cfg->face_name)); val = MAKELONG(cfg->cell_width, cfg->cell_height); RegSetValueExW(hConKey, wszFontSize, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); val = cfg->font_weight; RegSetValueExW(hConKey, wszFontWeight, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); val = cfg->history_size; RegSetValueExW(hConKey, wszHistoryBufferSize, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); val = cfg->history_nodup; RegSetValueExW(hConKey, wszHistoryNoDup, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); val = cfg->insert_mode; RegSetValueExW(hConKey, wszInsertMode, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); val = cfg->menu_mask; RegSetValueExW(hConKey, wszMenuMask, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); val = cfg->quick_edit; RegSetValueExW(hConKey, wszQuickEdit, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); val = MAKELONG(cfg->sb_width, cfg->sb_height); RegSetValueExW(hConKey, wszScreenBufferSize, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); val = cfg->def_attr; RegSetValueExW(hConKey, wszScreenColors, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); val = MAKELONG(cfg->win_width, cfg->win_height); RegSetValueExW(hConKey, wszWindowSize, 0, REG_DWORD, (LPBYTE)&val, sizeof(val)); }
/****************************************************************** * WINECON_RegLoad * * */ void WINECON_RegLoad(const WCHAR* appname, struct config_data* cfg) { HKEY hConKey; WINE_TRACE("loading %s registry settings.\n", appname ? wine_dbgstr_w(appname) : "default"); /* first set default values */ cfg->cursor_size = 25; cfg->cursor_visible = 1; cfg->exit_on_die = 1; memset(cfg->face_name, 0, sizeof(cfg->face_name)); cfg->cell_height = 12; cfg->cell_width = 8; cfg->font_weight = 0; cfg->history_size = 50; cfg->history_nodup = 0; cfg->insert_mode = 1; cfg->menu_mask = 0; cfg->quick_edit = 0; cfg->sb_height = 25; cfg->sb_width = 80; cfg->def_attr = 0x000F; cfg->win_height = 25; cfg->win_width = 80; cfg->win_pos.X = 0; cfg->win_pos.Y = 0; cfg->edition_mode = 0; cfg->registry = NULL; /* then read global settings */ if (!RegOpenKeyW(HKEY_CURRENT_USER, wszConsole, &hConKey)) { WINECON_RegLoadHelper(hConKey, cfg); /* if requested, load part related to console title */ if (appname) { HKEY hAppKey; cfg->registry = WINECON_CreateKeyName(appname); if (!RegOpenKeyW(hConKey, cfg->registry, &hAppKey)) { WINECON_RegLoadHelper(hAppKey, cfg); RegCloseKey(hAppKey); } } RegCloseKey(hConKey); } WINECON_DumpConfig("load", cfg); }
/****************************************************************** * WCUSER_GetProperties * * Runs the dialog box to set up the wineconsole options */ BOOL WCUSER_GetProperties(struct inner_data* data, BOOL current) { HPROPSHEETPAGE psPage[3]; PROPSHEETPAGE psp; PROPSHEETHEADER psHead; WCHAR buff[256]; WNDCLASS wndclass; static const WCHAR szFntPreview[] = {'W','i','n','e','C','o','n','F','o','n','t','P','r','e','v','i','e','w',0}; static const WCHAR szColorPreview[] = {'W','i','n','e','C','o','n','C','o','l','o','r','P','r','e','v','i','e','w',0}; struct dialog_info di; struct config_data defcfg; struct config_data* refcfg; BOOL save, modify_session; InitCommonControls(); di.data = data; if (current) { refcfg = &data->curcfg; save = FALSE; } else { WINECON_RegLoad(NULL, refcfg = &defcfg); save = TRUE; } di.config = *refcfg; di.nFont = 0; di.font = NULL; modify_session = FALSE; wndclass.style = 0; wndclass.lpfnWndProc = WCUSER_FontPreviewProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = sizeof (DWORD_PTR); /* for hFont */ wndclass.hInstance = GetModuleHandle(NULL); wndclass.hIcon = 0; wndclass.hCursor = LoadCursor(0, IDC_ARROW); wndclass.hbrBackground = GetStockObject(BLACK_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szFntPreview; RegisterClass(&wndclass); wndclass.style = 0; wndclass.lpfnWndProc = WCUSER_ColorPreviewProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = sizeof(DWORD); wndclass.hInstance = GetModuleHandle(NULL); wndclass.hIcon = 0; wndclass.hCursor = LoadCursor(0, IDC_ARROW); wndclass.hbrBackground = GetStockObject(BLACK_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szColorPreview; RegisterClass(&wndclass); memset(&psp, 0, sizeof(psp)); psp.dwSize = sizeof(psp); psp.dwFlags = 0; psp.hInstance = wndclass.hInstance; psp.lParam = (LPARAM)&di; psp.u.pszTemplate = MAKEINTRESOURCE(IDD_OPTION); psp.pfnDlgProc = WCUSER_OptionDlgProc; psPage[0] = CreatePropertySheetPage(&psp); psp.u.pszTemplate = MAKEINTRESOURCE(IDD_FONT); psp.pfnDlgProc = WCUSER_FontDlgProc; psPage[1] = CreatePropertySheetPage(&psp); psp.u.pszTemplate = MAKEINTRESOURCE(IDD_CONFIG); psp.pfnDlgProc = WCUSER_ConfigDlgProc; psPage[2] = CreatePropertySheetPage(&psp); memset(&psHead, 0, sizeof(psHead)); psHead.dwSize = sizeof(psHead); if (!LoadString(GetModuleHandle(NULL), (current) ? IDS_DLG_TIT_CURRENT : IDS_DLG_TIT_DEFAULT, buff, sizeof(buff) / sizeof(buff[0]))) { buff[0] = 'S'; buff[1] = 'e'; buff[2] = 't'; buff[3] = 'u'; buff[4] = 'p'; buff[5] = '\0'; } psHead.pszCaption = buff; psHead.nPages = 3; psHead.hwndParent = data->hWnd; psHead.u3.phpage = psPage; psHead.dwFlags = PSH_NOAPPLYNOW; WINECON_DumpConfig("init", refcfg); PropertySheet(&psHead); if (memcmp(refcfg, &di.config, sizeof(*refcfg)) == 0) return TRUE; WINECON_DumpConfig("ref", refcfg); WINECON_DumpConfig("cur", &di.config); if (refcfg == &data->curcfg) { switch (DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_SAVE_SETTINGS), data->hWnd, WCUSER_SaveDlgProc)) { case IDC_SAV_SAVE: save = TRUE; modify_session = TRUE; break; case IDC_SAV_SESSION: modify_session = TRUE; break; case IDCANCEL: break; default: WINE_ERR("ooch\n"); } } if (modify_session) WINECON_SetConfig(data, &di.config); if (save) WINECON_RegSave(&di.config); return TRUE; }