* Double-click to copy on Vista+

* Don't include \0 in count from GetLocaleInfo


git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6816 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
anders_k 2016-12-10 17:04:34 +00:00
parent deb811e453
commit 82c714e853
2 changed files with 12 additions and 12 deletions

View file

@ -19,7 +19,7 @@ History
Reference
=========
https://msdn.microsoft.com/en-us/library/windows/desktop/dd318693(v=vs.85).aspx#Language Identifier Constants and Strings
https://msdn.microsoft.com/library/dd318693#Language Identifier Constants and Strings
https://wayback.archive.org/web/20021221200122/http://msdn.microsoft.com/library/en-us/intl/nls_8rse.asp#LOCALE_* (95/98/ME/NT4/2000/XP)
*/
@ -66,7 +66,7 @@ static INT_PTR StrToIntptr(LPCTSTR s, bool ForceHex = false)
typedef struct { WORD id; LPCSTR name; } INTLNG; // Storing the names as ASCII saves 4 KiB
#define IL(p, s, pn, sn) { MAKELANGID(p, s), #pn ":" #sn }
static const INTLNG g_IntLoc[] = {
static const INTLNG g_IntLang[] = {
//(0x00, 0x00, NEUTRAL, NEUTRAL),
//(0x00, 0x01, NEUTRAL, DEFAULT),
IL(0x7f, 0x00, INVARIANT, NEUTRAL), // Invariant locale
@ -247,7 +247,7 @@ static BOOL CALLBACK EnumSysLocalesProc(LPTSTR lpLocaleString)
if (!retval) // LOCALE_SENGLISHDISPLAYNAME is Win7+
{
GetLocaleInfo(lcid, LOCALE_SENGCOUNTRY|LOCALE_NOUSEROVERRIDE, buf2, cchbuf2);
retval = GetLocaleInfo(lcid, LOCALE_SENGLANGUAGE|LOCALE_NOUSEROVERRIDE, buf1, cchbuf1);
if ((retval = GetLocaleInfo(lcid, LOCALE_SENGLANGUAGE|LOCALE_NOUSEROVERRIDE, buf1, cchbuf1))) --retval;
retval += wsprintf(buf1+retval, retval ? TEXT(" (%s)") : TEXT("?"), buf2);
}
AddLocale(g_hList, buf1, lid);
@ -265,15 +265,15 @@ static void InitIntLangList(HWND hCtl)
{
g_hList = hCtl;
SendMessage(hCtl, CB_SETCUEBANNER, 0, (LPARAM) L"Select a language...");
for (UINT i = 0; i < sizeof(g_IntLoc)/sizeof(INTLNG); ++i)
for (UINT i = 0; i < sizeof(g_IntLang)/sizeof(INTLNG); ++i)
{
#ifdef UNICODE
WCHAR name[200];
wsprintf(name, L"%S", g_IntLoc[i].name);
wsprintf(name, L"%S", g_IntLang[i].name);
#else
LPCTSTR name = g_IntLoc[i].name;
LPCTSTR name = g_IntLang[i].name;
#endif
AddLocale(hCtl, name, g_IntLoc[i].id);
AddLocale(hCtl, name, g_IntLang[i].id);
}
}
@ -285,7 +285,7 @@ static void OnLanguageChanged(HWND hDlg)
HWND hList = g_hList;
INT idx = SendMessage(hList, CB_GETCURSEL, 0, 0);
UINT lid = SendMessage(hList, CB_GETITEMDATA, idx, 0), lcid = MAKELCID(lid, SORT_DEFAULT);
UINT lid = SendMessage(hList, CB_GETITEMDATA, idx, 0), lcid = MAKELCID(lid, SORT_DEFAULT), retval;
EnableWindow(GetDlgItem(hDlg, IDOK), idx != CB_ERR);
if (idx == CB_ERR)
{
@ -295,17 +295,17 @@ static void OnLanguageChanged(HWND hDlg)
return ;
}
UINT retval = GetLocaleInfo(lcid, LOCALE_SNATIVEDISPLAYNAME|LOCALE_NOUSEROVERRIDE, buf1, cchbuf1);
if ((retval = GetLocaleInfo(lcid, LOCALE_SNATIVEDISPLAYNAME|LOCALE_NOUSEROVERRIDE, buf1, cchbuf1))) --retval;
if (!retval) // LOCALE_SNATIVEDISPLAYNAME is Win7+
{
GetLocaleInfo(lcid, LOCALE_SNATIVECTRYNAME|LOCALE_NOUSEROVERRIDE, buf2, cchbuf2);
retval = GetLocaleInfo(lcid, LOCALE_SNATIVELANGNAME|LOCALE_NOUSEROVERRIDE, buf1, cchbuf1);
if ((retval = GetLocaleInfo(lcid, LOCALE_SNATIVELANGNAME|LOCALE_NOUSEROVERRIDE, buf1, cchbuf1))) --retval;
retval += wsprintf(buf1+retval, retval ? TEXT(" (%s)") : TEXT("?"), buf2);
}
if (retval && GetLocaleInfo(lcid, LOCALE_SNAME|LOCALE_NOUSEROVERRIDE, buf2, cchbuf2) && *buf2)
{
wsprintf(buf1+retval-1, TEXT(" [%s]"), buf2);
wsprintf(buf1+retval, TEXT(" [%s]"), buf2);
}
SetDlgItemText(hDlg, IDC_INFO, buf1);

View file

@ -67,7 +67,7 @@ BEGIN
COMBOBOX IDC_SOURCE, 7, 7, 171, 100, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_SYSLANGLIST, 7, 24, 171, 100, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_INTLANGLIST, 7, 24, 171, 100, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP
LTEXT "", IDC_INFO, 7, 41, 171, 8
CONTROL "", IDC_INFO, "STATIC", SS_LEFT | SS_NOTIFY | WS_CHILD | WS_VISIBLE | WS_GROUP, 7, 41, 171, 8 // SS_NOTIFY enables double-click to copy on Vista+
LTEXT "Language ID:", -1, 7, 51, 45, 8
CONTROL "", IDC_LANGID, "EDIT", ES_LEFT | ES_READONLY | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 58, 51, 119, 8
LTEXT "Codepage:", -1, 7, 61, 45, 8