From: Hugh McMaster Subject: [PATCH 3/4] wineconsole: Allow users to enable and disable Insert Mode via the user dialog Message-Id: Date: Tue, 30 Jun 2015 20:05:37 +1000 --- programs/wineconsole/dialog.c | 5 +++++ programs/wineconsole/wineconsole.c | 30 +++++++++++++++++++++++++++++- programs/wineconsole/wineconsole.rc | 1 + programs/wineconsole/wineconsole_res.h | 1 + 4 files changed, 36 insertions(+), 1 deletion(-) diff --git a/programs/wineconsole/dialog.c b/programs/wineconsole/dialog.c index 8573d07..493990d 100644 --- a/programs/wineconsole/dialog.c +++ b/programs/wineconsole/dialog.c @@ -76,6 +76,8 @@ static INT_PTR WINAPI WCUSER_OptionDlgProc(HWND hDlg, UINT msg, WPARAM wParam, L SetDlgItemInt(hDlg, IDC_OPT_HIST_SIZE, di->config.history_size, FALSE); SendDlgItemMessageW(hDlg, IDC_OPT_HIST_NODOUBLE, BM_SETCHECK, (di->config.history_nodup) ? BST_CHECKED : BST_UNCHECKED, 0); + SendDlgItemMessageW(hDlg, IDC_OPT_INSERT_MODE, BM_SETCHECK, + (di->config.insert_mode) ? BST_CHECKED : BST_UNCHECKED, 0); SendDlgItemMessageW(hDlg, IDC_OPT_CONF_CTRL, BM_SETCHECK, (di->config.menu_mask & MK_CONTROL) ? BST_CHECKED : BST_UNCHECKED, 0); SendDlgItemMessageW(hDlg, IDC_OPT_CONF_SHIFT, BM_SETCHECK, @@ -121,6 +123,9 @@ static INT_PTR WINAPI WCUSER_OptionDlgProc(HWND hDlg, UINT msg, WPARAM wParam, L val = (IsDlgButtonChecked(hDlg, IDC_OPT_HIST_NODOUBLE) & BST_CHECKED) != 0; di->config.history_nodup = val; + val = (IsDlgButtonChecked(hDlg, IDC_OPT_INSERT_MODE) & BST_CHECKED) != 0; + di->config.insert_mode = val; + val = 0; if (IsDlgButtonChecked(hDlg, IDC_OPT_CONF_CTRL) & BST_CHECKED) val |= MK_CONTROL; if (IsDlgButtonChecked(hDlg, IDC_OPT_CONF_SHIFT) & BST_CHECKED) val |= MK_SHIFT; diff --git a/programs/wineconsole/wineconsole.c b/programs/wineconsole/wineconsole.c index ed5f816..edb133e 100644 --- a/programs/wineconsole/wineconsole.c +++ b/programs/wineconsole/wineconsole.c @@ -150,6 +150,23 @@ static BOOL WINECON_SetHistoryMode(HANDLE hConIn, int mode) } /****************************************************************** + * WINECON_SetInsertMode + * + * + */ +static void WINECON_SetInsertMode(HANDLE hConIn, unsigned int enable) +{ + DWORD mode; + + GetConsoleMode(hConIn, &mode); + if (enable) + mode |= ENABLE_INSERT_MODE|ENABLE_EXTENDED_FLAGS; + else + mode &= ~ENABLE_INSERT_MODE; + SetConsoleMode(hConIn, mode); +} + +/****************************************************************** * WINECON_GetConsoleTitle * * @@ -397,6 +414,11 @@ void WINECON_SetConfig(struct inner_data* data, const struct config_data* cf data->curcfg.history_nodup = cfg->history_nodup; WINECON_SetHistoryMode(data->hConIn, cfg->history_nodup); } + if (data->curcfg.insert_mode != cfg->insert_mode) + { + data->curcfg.insert_mode = cfg->insert_mode; + WINECON_SetInsertMode(data->hConIn, cfg->insert_mode); + } data->curcfg.menu_mask = cfg->menu_mask; data->curcfg.quick_edit = cfg->quick_edit; if (1 /* FIXME: font info has changed */) @@ -533,7 +555,8 @@ static void WINECON_Delete(struct inner_data* data) */ static BOOL WINECON_GetServerConfig(struct inner_data* data) { - BOOL ret; + BOOL ret; + DWORD mode; SERVER_START_REQ(get_console_input_info) { @@ -545,6 +568,11 @@ static BOOL WINECON_GetServerConfig(struct inner_data* data) } SERVER_END_REQ; if (!ret) return FALSE; + + GetConsoleMode(data->hConIn, &mode); + data->curcfg.insert_mode = (mode & (ENABLE_INSERT_MODE|ENABLE_EXTENDED_FLAGS)) == + (ENABLE_INSERT_MODE|ENABLE_EXTENDED_FLAGS); + SERVER_START_REQ(get_console_output_info) { req->handle = wine_server_obj_handle( data->hConOut ); diff --git a/programs/wineconsole/wineconsole.rc b/programs/wineconsole/wineconsole.rc index 4dd06b7..8155cde 100644 --- a/programs/wineconsole/wineconsole.rc +++ b/programs/wineconsole/wineconsole.rc @@ -66,6 +66,7 @@ FONT 8, "MS Shell Dlg" GROUPBOX "Console", -1, 80, 5, 120, 54, BS_GROUPBOX AUTOCHECKBOX "&Quick edit", IDC_OPT_QUICK_EDIT, 84, 18, 70, 10, WS_TABSTOP + AUTOCHECKBOX "&Insert mode", IDC_OPT_INSERT_MODE, 84, 30, 70, 10, WS_TABSTOP GROUPBOX "Popup menu", -1, 5, 61, 70, 42, BS_GROUPBOX AUTOCHECKBOX "&Control", IDC_OPT_CONF_CTRL, 9, 74, 60, 10, WS_TABSTOP diff --git a/programs/wineconsole/wineconsole_res.h b/programs/wineconsole/wineconsole_res.h index ac62b58..8261fd5 100644 --- a/programs/wineconsole/wineconsole_res.h +++ b/programs/wineconsole/wineconsole_res.h @@ -70,6 +70,7 @@ #define IDC_OPT_CONF_CTRL 0x0107 #define IDC_OPT_CONF_SHIFT 0x0108 #define IDC_OPT_QUICK_EDIT 0x0109 +#define IDC_OPT_INSERT_MODE 0x0110 #define IDC_FNT_LIST_FONT 0x0201 #define IDC_FNT_LIST_SIZE 0x0202 -- 1.9.1