+/*
+ * windlg.c - dialogs for PuTTY(tel), including the configuration dialog.
+ */
+
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
static char **events = NULL;
static int nevents = 0, negsize = 0;
-extern Config cfg; /* defined in window.c */
+extern Conf *conf; /* defined in window.c */
#define PRINTER_DISABLED_STRING "None (printing disabled)"
wc.style = CS_DBLCLKS | CS_SAVEBITS | CS_BYTEALIGNWINDOW;
wc.lpfnWndProc = DefDlgProc;
wc.cbClsExtra = 0;
-#ifdef LONG_PTR
wc.cbWndExtra = DLGWINDOWEXTRA + 2*sizeof(LONG_PTR);
-#else
- wc.cbWndExtra = DLGWINDOWEXTRA + 8;
-#endif
wc.hInstance = hinst;
wc.hIcon = NULL;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
newitem = TreeView_InsertItem(faff->treeview, &ins);
if (level > 0)
TreeView_Expand(faff->treeview, faff->lastat[level - 1],
- TVE_EXPAND);
+ (level > 1 ? TVE_COLLAPSE : TVE_EXPAND));
faff->lastat[level] = newitem;
for (i = level + 1; i < 4; i++)
faff->lastat[i] = NULL;
create_controls(hwnd, ""); /* Open and Cancel buttons etc */
SetWindowText(hwnd, dp.wintitle);
SetWindowLongPtr(hwnd, GWLP_USERDATA, 0);
- if (help_path)
+ if (has_help())
SetWindowLongPtr(hwnd, GWL_EXSTYLE,
GetWindowLongPtr(hwnd, GWL_EXSTYLE) |
WS_EX_CONTEXTHELP);
if (item)
DestroyWindow(item);
}
- requested_help = FALSE;
SendMessage(hwnd, WM_SETICON, (WPARAM) ICON_BIG,
(LPARAM) LoadIcon(hinst, MAKEINTRESOURCE(IDI_CFGICON)));
/*
ret = 0;
return ret;
case WM_HELP:
- if (help_path) {
- if (winctrl_context_help(&dp, hwnd,
- ((LPHELPINFO)lParam)->iCtrlId))
- requested_help = TRUE;
- else
- MessageBeep(0);
- }
+ if (!winctrl_context_help(&dp, hwnd,
+ ((LPHELPINFO)lParam)->iCtrlId))
+ MessageBeep(0);
break;
case WM_CLOSE:
- if (requested_help) {
- WinHelp(hwnd, help_path, HELP_QUIT, 0);
- requested_help = FALSE;
- }
+ quit_help(hwnd);
SaneEndDialog(hwnd, 0);
return 0;
void show_help(HWND hwnd)
{
- if (help_path) {
- WinHelp(hwnd, help_path,
- help_has_contents ? HELP_FINDER : HELP_CONTENTS,
- 0);
- requested_help = TRUE;
- }
+ launch_help(hwnd, NULL);
}
void defuse_showwindow(void)
ctrlbox = ctrl_new_box();
setup_config_box(ctrlbox, FALSE, 0, 0);
- win_setup_config_box(ctrlbox, &dp.hwnd, (help_path != NULL), FALSE);
+ win_setup_config_box(ctrlbox, &dp.hwnd, has_help(), FALSE, 0);
dp_init(&dp);
winctrl_init(&ctrls_base);
winctrl_init(&ctrls_panel);
dp_add_tree(&dp, &ctrls_panel);
dp.wintitle = dupprintf("%s Configuration", appname);
dp.errtitle = dupprintf("%s Error", appname);
- dp.data = &cfg;
+ dp.data = conf;
+ dlg_auto_set_fixed_pitch_flag(&dp);
dp.shortcuts['g'] = TRUE; /* the treeview: `Cate&gory' */
ret =
int do_reconfig(HWND hwnd, int protcfginfo)
{
- Config backup_cfg;
- int ret;
+ Conf *backup_conf;
+ int ret, protocol;
- backup_cfg = cfg; /* structure copy */
+ backup_conf = conf_copy(conf);
ctrlbox = ctrl_new_box();
- setup_config_box(ctrlbox, TRUE, cfg.protocol, protcfginfo);
- win_setup_config_box(ctrlbox, &dp.hwnd, (help_path != NULL), TRUE);
+ protocol = conf_get_int(conf, CONF_protocol);
+ setup_config_box(ctrlbox, TRUE, protocol, protcfginfo);
+ win_setup_config_box(ctrlbox, &dp.hwnd, has_help(), TRUE, protocol);
dp_init(&dp);
winctrl_init(&ctrls_base);
winctrl_init(&ctrls_panel);
dp_add_tree(&dp, &ctrls_panel);
dp.wintitle = dupprintf("%s Reconfiguration", appname);
dp.errtitle = dupprintf("%s Error", appname);
- dp.data = &cfg;
+ dp.data = conf;
+ dlg_auto_set_fixed_pitch_flag(&dp);
dp.shortcuts['g'] = TRUE; /* the treeview: `Cate&gory' */
ret = SaneDialogBox(hinst, MAKEINTRESOURCE(IDD_MAINBOX), NULL,
dp_cleanup(&dp);
if (!ret)
- cfg = backup_cfg; /* structure copy */
+ conf_copy_into(conf, backup_conf);
+
+ conf_free(backup_conf);
return ret;
}
if (ret == 0) /* success - key matched OK */
return 1;
- if (ret == 2) { /* key was different */
+ else if (ret == 2) { /* key was different */
int mbret;
char *text = dupprintf(wrongmsg, appname, keytype, fingerprint,
appname);
return 1;
} else if (mbret == IDNO)
return 1;
- return 0;
- }
- if (ret == 1) { /* key was absent */
+ } else if (ret == 1) { /* key was absent */
int mbret;
char *text = dupprintf(absentmsg, keytype, fingerprint, appname);
char *caption = dupprintf(mbtitle, appname);
return 1;
} else if (mbret == IDNO)
return 1;
- return 0;
}
+ return 0; /* abandon the connection */
}
/*
title = dupprintf(mbtitle, appname);
mbret = MessageBox(NULL, message, title,
MB_ICONWARNING | MB_YESNO | MB_DEFBUTTON2);
+ socket_reselect_all();
sfree(message);
sfree(title);
if (mbret == IDYES)
* Ask whether to wipe a session log file before writing to it.
* Returns 2 for wipe, 1 for append, 0 for cancel (don't log).
*/
-int askappend(void *frontend, Filename filename,
+int askappend(void *frontend, Filename *filename,
void (*callback)(void *ctx, int result), void *ctx)
{
static const char msgtemplate[] =
char *mbtitle;
int mbret;
- message = dupprintf(msgtemplate, FILENAME_MAX, filename.path);
+ message = dupprintf(msgtemplate, FILENAME_MAX, filename->path);
mbtitle = dupprintf("%s Log to File", appname);
mbret = MessageBox(NULL, message, mbtitle,
MB_ICONQUESTION | MB_YESNOCANCEL | MB_DEFBUTTON3);
+ socket_reselect_all();
+
sfree(message);
sfree(mbtitle);
MessageBox(NULL, msg, title, MB_OK);
+ socket_reselect_all();
+
sfree(msg);
sfree(title);
}