From 46a9c5068966a7fe0187f83a04b15e22f0b22522 Mon Sep 17 00:00:00 2001 From: kichik Date: Thu, 10 Apr 2008 17:58:56 +0000 Subject: [PATCH] make sure at least one language is specified without creating a dialog git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@5597 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/LangDLL/LangDLL.c | 50 ++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/Contrib/LangDLL/LangDLL.c b/Contrib/LangDLL/LangDLL.c index 28e349a9..a932918b 100644 --- a/Contrib/LangDLL/LangDLL.c +++ b/Contrib/LangDLL/LangDLL.c @@ -23,6 +23,7 @@ int dofont; int docp; int langs_num; +int visible_langs_num; struct lang { char *name; @@ -38,12 +39,9 @@ BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) switch (uMsg) { case WM_INITDIALOG: // add languages - for (i = langs_num - 1; i >= 0; i--) { + for (i = visible_langs_num - 1; i >= 0; i--) { int cbi; - if (langs[i].cp != 0 && langs[i].cp != GetACP()) - continue; - cbi = SendDlgItemMessage(hwndDlg, IDC_LANGUAGE, CB_ADDSTRING, 0, (LPARAM) langs[i].name); SendDlgItemMessage(hwndDlg, IDC_LANGUAGE, CB_SETITEMDATA, cbi, (LPARAM) langs[i].id); @@ -52,12 +50,6 @@ BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) selected_language = langs[i].name; } } - // empty list box? - if (SendDlgItemMessage(hwndDlg, IDC_LANGUAGE, CB_GETCOUNT, 0, 0) == 0) { - pushstring("no languages available"); - EndDialog(hwndDlg, 0); - break; - } // select the current language if (selected_language) SendDlgItemMessage(hwndDlg, IDC_LANGUAGE, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) selected_language); @@ -171,6 +163,9 @@ void __declspec(dllexport) LangDialog(HWND hwndParent, int string_size, // zero languages? if (!langs_num) return; + // initialize visible languages count + visible_langs_num = 0; + // allocate language struct langs = (struct lang *)GlobalAlloc(GPTR, langs_num*sizeof(struct lang)); if (!langs) return; @@ -178,19 +173,29 @@ void __declspec(dllexport) LangDialog(HWND hwndParent, int string_size, // fill language struct for (i = 0; i < langs_num; i++) { if (popstring(temp)) return; - langs[i].name = GlobalAlloc(GPTR, lstrlen(temp)+1); - if (!langs[i].name) return; - lstrcpy(langs[i].name, temp); + langs[visible_langs_num].name = GlobalAlloc(GPTR, lstrlen(temp)+1); + if (!langs[visible_langs_num].name) return; + lstrcpy(langs[visible_langs_num].name, temp); if (popstring(temp)) return; - langs[i].id = GlobalAlloc(GPTR, lstrlen(temp)+1); - if (!langs[i].id) return; - lstrcpy(langs[i].id, temp); + langs[visible_langs_num].id = GlobalAlloc(GPTR, lstrlen(temp)+1); + if (!langs[visible_langs_num].id) return; + lstrcpy(langs[visible_langs_num].id, temp); if (docp) { if (popstring(temp)) return; - langs[i].cp = myatoi(temp); + langs[visible_langs_num].cp = myatoi(temp); + } + + if (!docp || langs[visible_langs_num].cp == GetACP() || langs[visible_langs_num].cp == 0) + { + visible_langs_num++; + } + else + { + GlobalFree(langs[visible_langs_num].name); + GlobalFree(langs[visible_langs_num].id); } } @@ -200,10 +205,17 @@ void __declspec(dllexport) LangDialog(HWND hwndParent, int string_size, } // start dialog - DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DIALOG), 0, DialogProc); + if (visible_langs_num > 0) + { + DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DIALOG), 0, DialogProc); + } + else + { + pushstring(""); + } // free structs - for (i = 0; i < langs_num; i++) { + for (i = 0; i < visible_langs_num; i++) { GlobalFree(langs[i].name); GlobalFree(langs[i].id); }