Dmitry Timoshkov : kernel32: Implement EnumUILanguages.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Feb 7 14:20:11 CST 2006
Module: wine
Branch: refs/heads/master
Commit: e6a734a9795d623c459ed461ef46524005aa64ae
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=e6a734a9795d623c459ed461ef46524005aa64ae
Author: Dmitry Timoshkov <dmitry at codeweavers.com>
Date: Tue Feb 7 21:17:06 2006 +0100
kernel32: Implement EnumUILanguages.
---
dlls/kernel/locale.c | 71 ++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 57 insertions(+), 14 deletions(-)
diff --git a/dlls/kernel/locale.c b/dlls/kernel/locale.c
index cf65b4a..80293ac 100644
--- a/dlls/kernel/locale.c
+++ b/dlls/kernel/locale.c
@@ -1784,7 +1784,7 @@ BOOL WINAPI IsValidLocale( LCID lcid, DW
static BOOL CALLBACK enum_lang_proc_a( HMODULE hModule, LPCSTR type,
- LPCSTR name, WORD LangID, LONG lParam )
+ LPCSTR name, WORD LangID, LONG_PTR lParam )
{
LOCALE_ENUMPROCA lpfnLocaleEnum = (LOCALE_ENUMPROCA)lParam;
char buf[20];
@@ -1794,7 +1794,7 @@ static BOOL CALLBACK enum_lang_proc_a( H
}
static BOOL CALLBACK enum_lang_proc_w( HMODULE hModule, LPCWSTR type,
- LPCWSTR name, WORD LangID, LONG lParam )
+ LPCWSTR name, WORD LangID, LONG_PTR lParam )
{
static const WCHAR formatW[] = {'%','0','8','x',0};
LOCALE_ENUMPROCW lpfnLocaleEnum = (LOCALE_ENUMPROCW)lParam;
@@ -3184,12 +3184,46 @@ BOOL WINAPI SetUserGeoID( GEOID GeoID )
return FALSE;
}
+typedef struct
+{
+ union
+ {
+ UILANGUAGE_ENUMPROCA procA;
+ UILANGUAGE_ENUMPROCW procW;
+ } u;
+ DWORD flags;
+ LONG_PTR param;
+} ENUM_UILANG_CALLBACK;
+
+static BOOL CALLBACK enum_uilang_proc_a( HMODULE hModule, LPCSTR type,
+ LPCSTR name, WORD LangID, LONG_PTR lParam )
+{
+ ENUM_UILANG_CALLBACK *enum_uilang = (ENUM_UILANG_CALLBACK *)lParam;
+ char buf[20];
+
+ sprintf(buf, "%08x", (UINT)LangID);
+ return enum_uilang->u.procA( buf, enum_uilang->param );
+}
+
+static BOOL CALLBACK enum_uilang_proc_w( HMODULE hModule, LPCWSTR type,
+ LPCWSTR name, WORD LangID, LONG_PTR lParam )
+{
+ static const WCHAR formatW[] = {'%','0','8','x',0};
+ ENUM_UILANG_CALLBACK *enum_uilang = (ENUM_UILANG_CALLBACK *)lParam;
+ WCHAR buf[20];
+
+ sprintfW( buf, formatW, (UINT)LangID );
+ return enum_uilang->u.procW( buf, enum_uilang->param );
+}
+
/******************************************************************************
* EnumUILanguagesA (KERNEL32.@)
*/
BOOL WINAPI EnumUILanguagesA(UILANGUAGE_ENUMPROCA pUILangEnumProc, DWORD dwFlags, LONG_PTR lParam)
{
- static char value[] = "0409";
+ ENUM_UILANG_CALLBACK enum_uilang;
+
+ TRACE("%p, %lx, %lx\n", pUILangEnumProc, dwFlags, lParam);
if(!pUILangEnumProc) {
SetLastError(ERROR_INVALID_PARAMETER);
@@ -3200,11 +3234,14 @@ BOOL WINAPI EnumUILanguagesA(UILANGUAGE_
return FALSE;
}
- FIXME("%p, %lx, %lx calling pUILangEnumProc with %s\n",
- pUILangEnumProc, dwFlags, lParam, debugstr_a(value));
-
- pUILangEnumProc( value, lParam );
- return(TRUE);
+ enum_uilang.u.procA = pUILangEnumProc;
+ enum_uilang.flags = dwFlags;
+ enum_uilang.param = lParam;
+
+ EnumResourceLanguagesA( kernel32_handle, (LPCSTR)RT_STRING,
+ (LPCSTR)LOCALE_ILANGUAGE, enum_uilang_proc_a,
+ (LONG_PTR)&enum_uilang);
+ return TRUE;
}
/******************************************************************************
@@ -3212,7 +3249,10 @@ BOOL WINAPI EnumUILanguagesA(UILANGUAGE_
*/
BOOL WINAPI EnumUILanguagesW(UILANGUAGE_ENUMPROCW pUILangEnumProc, DWORD dwFlags, LONG_PTR lParam)
{
- static WCHAR value[] = {'0','4','0','9',0};
+ ENUM_UILANG_CALLBACK enum_uilang;
+
+ TRACE("%p, %lx, %lx\n", pUILangEnumProc, dwFlags, lParam);
+
if(!pUILangEnumProc) {
SetLastError(ERROR_INVALID_PARAMETER);
@@ -3223,11 +3263,14 @@ BOOL WINAPI EnumUILanguagesW(UILANGUAGE_
return FALSE;
}
- FIXME("%p, %lx, %lx calling pUILangEnumProc with %s\n",
- pUILangEnumProc, dwFlags, lParam, debugstr_w(value));
-
- pUILangEnumProc( value, lParam );
- return(TRUE);
+ enum_uilang.u.procW = pUILangEnumProc;
+ enum_uilang.flags = dwFlags;
+ enum_uilang.param = lParam;
+
+ EnumResourceLanguagesW( kernel32_handle, (LPCWSTR)RT_STRING,
+ (LPCWSTR)LOCALE_ILANGUAGE, enum_uilang_proc_w,
+ (LONG_PTR)&enum_uilang);
+ return TRUE;
}
INT WINAPI GetGeoInfoW(GEOID GeoId, GEOTYPE GeoType, LPWSTR lpGeoData,
More information about the wine-cvs
mailing list