ChangeSet ID: 21077 CVSROOT: /opt/cvs-commit Module name: wine Changes by: julliard@winehq.org 2005/11/03 05:32:52
Modified files: programs/wineconsole: wineconsole.c winecon_private.h dialog.c
Log message: Eric Pouech eric.pouech@wanadoo.fr Fixed wineconsole startup when restoring registry settings.
Patch: http://cvs.winehq.org/patch.py?id=21077
Old revision New revision Changes Path 1.38 1.39 +55 -13 wine/programs/wineconsole/wineconsole.c 1.13 1.14 +1 -1 wine/programs/wineconsole/winecon_private.h 1.22 1.23 +1 -1 wine/programs/wineconsole/dialog.c
Index: wine/programs/wineconsole/wineconsole.c diff -u -p wine/programs/wineconsole/wineconsole.c:1.38 wine/programs/wineconsole/wineconsole.c:1.39 --- wine/programs/wineconsole/wineconsole.c:1.38 3 Nov 2005 11:32:52 -0000 +++ wine/programs/wineconsole/wineconsole.c 3 Nov 2005 11:32:52 -0000 @@ -372,10 +372,9 @@ int WINECON_GrabChanges(struct inner_dat * of server side equivalent and visual parts. * If force is FALSE, only the changed items are modified. */ -void WINECON_SetConfig(struct inner_data* data, - const struct config_data* cfg, BOOL force) +void WINECON_SetConfig(struct inner_data* data, const struct config_data* cfg) { - if (force || data->curcfg.cursor_size != cfg->cursor_size || + if (data->curcfg.cursor_size != cfg->cursor_size || data->curcfg.cursor_visible != cfg->cursor_visible) { CONSOLE_CURSOR_INFO cinfo; @@ -390,23 +389,23 @@ void WINECON_SetConfig(struct inner_ /* this shall update (through notif) curcfg */ SetConsoleCursorInfo(data->hConOut, &cinfo); } - if (force || data->curcfg.history_size != cfg->history_size) + if (data->curcfg.history_size != cfg->history_size) { data->curcfg.history_size = cfg->history_size; WINECON_SetHistorySize(data->hConIn, cfg->history_size); } - if (force || data->curcfg.history_nodup != cfg->history_nodup) + if (data->curcfg.history_nodup != cfg->history_nodup) { data->curcfg.history_nodup = cfg->history_nodup; WINECON_SetHistoryMode(data->hConIn, cfg->history_nodup); } data->curcfg.menu_mask = cfg->menu_mask; data->curcfg.quick_edit = cfg->quick_edit; - if (force || 1 /* FIXME: font info has changed */) + if (1 /* FIXME: font info has changed */) { data->fnSetFont(data, cfg->face_name, cfg->cell_height, cfg->font_weight); } - if (force || data->curcfg.def_attr != cfg->def_attr) + if (data->curcfg.def_attr != cfg->def_attr) { data->curcfg.def_attr = cfg->def_attr; SetConsoleTextAttribute(data->hConOut, cfg->def_attr); @@ -420,8 +419,8 @@ void WINECON_SetConfig(struct inner_ * for <B> (window / ScreenBuffer) * The Change<A><B> actually modify the <B> dimension of <A>. */ -#define TstSBfWidth() (force || data->curcfg.sb_width != cfg->sb_width) -#define TstWinWidth() (force || data->curcfg.win_width != cfg->win_width) +#define TstSBfWidth() (data->curcfg.sb_width != cfg->sb_width) +#define TstWinWidth() (data->curcfg.win_width != cfg->win_width)
#define ChgSBfWidth() do {c.X = cfg->sb_width; \ c.Y = data->curcfg.sb_height;\ @@ -432,8 +431,8 @@ void WINECON_SetConfig(struct inner_ pos.Bottom = 0; \ SetConsoleWindowInfo(data->hConOut, FALSE, &pos);\ } while (0) -#define TstSBfHeight() (force || data->curcfg.sb_height != cfg->sb_height) -#define TstWinHeight() (force || data->curcfg.win_height != cfg->win_height) +#define TstSBfHeight() (data->curcfg.sb_height != cfg->sb_height) +#define TstWinHeight() (data->curcfg.win_height != cfg->win_height)
/* since we're going to apply height after width is done, we use width as defined * in cfg, and not in data->curcfg because if won't be updated yet */ @@ -495,7 +494,7 @@ void WINECON_SetConfig(struct inner_ #undef ChgWinHeight
data->curcfg.exit_on_die = cfg->exit_on_die; - if (force || data->curcfg.edition_mode != cfg->edition_mode) + if (data->curcfg.edition_mode != cfg->edition_mode) { data->curcfg.edition_mode = cfg->edition_mode; WINECON_SetEditionMode(data->hConIn, cfg->edition_mode); @@ -524,6 +523,48 @@ static void WINECON_Delete(struct inner_ }
/****************************************************************** + * WINECON_GetServerConfig + * + * Fills data->curcfg with the actual configuration running in the server + * (getting real information on the server, and not relying on cached + * information in data) + */ +static BOOL WINECON_GetServerConfig(struct inner_data* data) +{ + BOOL ret; + + SERVER_START_REQ(get_console_input_info) + { + req->handle = data->hConIn; + ret = !wine_server_call_err( req ); + data->curcfg.history_size = reply->history_size; + data->curcfg.history_nodup = reply->history_mode; + data->curcfg.edition_mode = reply->edition_mode; + } + SERVER_END_REQ; + if (!ret) return FALSE; + SERVER_START_REQ(get_console_output_info) + { + req->handle = data->hConOut; + ret = !wine_server_call_err( req ); + data->curcfg.cursor_size = reply->cursor_size; + data->curcfg.cursor_visible = reply->cursor_visible; + data->curcfg.def_attr = reply->attr; + data->curcfg.sb_width = reply->width; + data->curcfg.sb_height = reply->height; + data->curcfg.win_width = reply->win_right - reply->win_left + 1; + data->curcfg.win_height = reply->win_bottom - reply->win_top + 1; + } + SERVER_END_REQ; + WINECON_DumpConfig("first cfg: ", &data->curcfg); + data->cells = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, + data->curcfg.sb_width * data->curcfg.sb_height * sizeof(CHAR_INFO)); + if (!data->cells) WINECON_Fatal("OOM\n"); + + return ret; +} + +/****************************************************************** * WINECON_Init * * Initialisation part I. Creation of server object (console input and @@ -613,7 +654,8 @@ static struct inner_data* WINECON_Init(H switch ((*backend)(data)) { case init_success: - WINECON_SetConfig(data, &cfg, TRUE); + WINECON_GetServerConfig(data); + WINECON_SetConfig(data, &cfg); data->curcfg.registry = cfg.registry; WINECON_DumpConfig("fint", &data->curcfg); return data; Index: wine/programs/wineconsole/winecon_private.h diff -u -p wine/programs/wineconsole/winecon_private.h:1.13 wine/programs/wineconsole/winecon_private.h:1.14 --- wine/programs/wineconsole/winecon_private.h:1.13 3 Nov 2005 11:32:52 -0000 +++ wine/programs/wineconsole/winecon_private.h 3 Nov 2005 11:32:52 -0000 @@ -85,7 +85,7 @@ extern BOOL WINECON_GetConsoleTitle(HAND extern void WINECON_FetchCells(struct inner_data* data, int upd_tp, int upd_bm); extern int WINECON_GrabChanges(struct inner_data* data); extern VOID WINECON_SetConfig(struct inner_data* data, - const struct config_data* cfg, BOOL force); + const struct config_data* cfg); /* from registry.c */ extern void WINECON_RegLoad(const WCHAR* appname, struct config_data* cfg); extern void WINECON_RegSave(const struct config_data* cfg); Index: wine/programs/wineconsole/dialog.c diff -u -p wine/programs/wineconsole/dialog.c:1.22 wine/programs/wineconsole/dialog.c:1.23 --- wine/programs/wineconsole/dialog.c:1.22 3 Nov 2005 11:32:52 -0000 +++ wine/programs/wineconsole/dialog.c 3 Nov 2005 11:32:52 -0000 @@ -844,7 +844,7 @@ BOOL WCUSER_GetProperties(struct inner_d } }
- if (modify_session) WINECON_SetConfig(data, &di.config, FALSE); + if (modify_session) WINECON_SetConfig(data, &di.config); if (save) WINECON_RegSave(&di.config);
return TRUE;