mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-09 17:38:00 +00:00
c4c4d2c5cb
This parameter was undocumented, and Windows-specific: its semantics date from before PuTTY was cross-platform, and are "Pass this flags parameter straight through to the Win32 API's conversion functions". So in Windows platform code you can pass flags like MB_USEGLYPHCHARS, but in cross-platform code, you dare not pass anything nonzero at all because the Unix frontend won't recognise it (or, likely, even compile). I've kept the flag for now in the underlying mb_to_wc / wc_to_mb functions. Partly that's because there's one place in the Windows code where the parameter _is_ used; mostly, it's because I'm about to replace those functions anyway, so there's no point in editing all the call sites twice.
72 lines
2.1 KiB
C
72 lines
2.1 KiB
C
/*
|
|
* Enhanced version of the MessageBox API function. Permits enabling a
|
|
* Help button by setting helpctxid to a context id in the help file
|
|
* relevant to this dialog box. Also permits setting the 'utf8' flag
|
|
* to indicate that the char strings given as 'text' and 'caption' are
|
|
* encoded in UTF-8 rather than the system code page.
|
|
*/
|
|
|
|
#include "putty.h"
|
|
|
|
static HWND message_box_owner;
|
|
|
|
/* Callback function to launch context help. */
|
|
static VOID CALLBACK message_box_help_callback(LPHELPINFO lpHelpInfo)
|
|
{
|
|
const char *context = NULL;
|
|
#define CHECK_CTX(name) \
|
|
do { \
|
|
if (lpHelpInfo->dwContextId == WINHELP_CTXID_ ## name) \
|
|
context = WINHELP_CTX_ ## name; \
|
|
} while (0)
|
|
CHECK_CTX(errors_hostkey_absent);
|
|
CHECK_CTX(errors_hostkey_changed);
|
|
CHECK_CTX(errors_cantloadkey);
|
|
CHECK_CTX(option_cleanup);
|
|
CHECK_CTX(pgp_fingerprints);
|
|
#undef CHECK_CTX
|
|
if (context)
|
|
launch_help(message_box_owner, context);
|
|
}
|
|
|
|
int message_box(HWND owner, LPCTSTR text, LPCTSTR caption, DWORD style,
|
|
bool utf8, DWORD helpctxid)
|
|
{
|
|
MSGBOXPARAMSW mbox;
|
|
|
|
/*
|
|
* We use MessageBoxIndirect() because it allows us to specify a
|
|
* callback function for the Help button.
|
|
*/
|
|
mbox.cbSize = sizeof(mbox);
|
|
/* Assumes the globals `hinst' and `hwnd' have sensible values. */
|
|
mbox.hInstance = hinst;
|
|
mbox.dwLanguageId = LANG_NEUTRAL;
|
|
|
|
mbox.hwndOwner = message_box_owner = owner;
|
|
|
|
wchar_t *wtext, *wcaption;
|
|
if (utf8) {
|
|
wtext = decode_utf8_to_wide_string(text);
|
|
wcaption = decode_utf8_to_wide_string(caption);
|
|
} else {
|
|
wtext = dup_mb_to_wc(DEFAULT_CODEPAGE, text);
|
|
wcaption = dup_mb_to_wc(DEFAULT_CODEPAGE, caption);
|
|
}
|
|
mbox.lpszText = wtext;
|
|
mbox.lpszCaption = wcaption;
|
|
|
|
mbox.dwStyle = style;
|
|
|
|
mbox.dwContextHelpId = helpctxid;
|
|
if (helpctxid != 0 && has_help()) mbox.dwStyle |= MB_HELP;
|
|
mbox.lpfnMsgBoxCallback = &message_box_help_callback;
|
|
|
|
int toret = MessageBoxIndirectW(&mbox);
|
|
|
|
sfree(wtext);
|
|
sfree(wcaption);
|
|
|
|
return toret;
|
|
}
|