Commit d07cec30 authored by Rémi Bernon's avatar Rémi Bernon Committed by Alexandre Julliard

imm32: Reorder control flow in ImmGetImeMenuItemsA.

parent ad2ca1e9
...@@ -2668,72 +2668,62 @@ BOOL WINAPI ImmUnregisterWordW( HKL hkl, const WCHAR *readingW, DWORD style, con ...@@ -2668,72 +2668,62 @@ BOOL WINAPI ImmUnregisterWordW( HKL hkl, const WCHAR *readingW, DWORD style, con
/*********************************************************************** /***********************************************************************
* ImmGetImeMenuItemsA (IMM32.@) * ImmGetImeMenuItemsA (IMM32.@)
*/ */
DWORD WINAPI ImmGetImeMenuItemsA( HIMC hIMC, DWORD dwFlags, DWORD dwType, DWORD WINAPI ImmGetImeMenuItemsA( HIMC himc, DWORD flags, DWORD type, IMEMENUITEMINFOA *parentA,
LPIMEMENUITEMINFOA lpImeParentMenu, LPIMEMENUITEMINFOA lpImeMenu, IMEMENUITEMINFOA *menuA, DWORD size )
DWORD dwSize)
{ {
InputContextData *data = get_imc_data(hIMC); InputContextData *data = get_imc_data( himc );
TRACE("(%p, %li, %li, %p, %p, %li):\n", hIMC, dwFlags, dwType, DWORD ret;
lpImeParentMenu, lpImeMenu, dwSize);
TRACE( "himc %p, flags %#lx, type %lu, parentA %p, menuA %p, size %lu.\n",
himc, flags, type, parentA, menuA, size );
if (!data) if (!data)
{ {
SetLastError(ERROR_INVALID_HANDLE); SetLastError( ERROR_INVALID_HANDLE );
return 0; return 0;
} }
if (data->immKbd->hIME && data->immKbd->pImeGetImeMenuItems) if (!data->immKbd->hIME || !data->immKbd->pImeGetImeMenuItems) return 0;
if (!is_himc_ime_unicode( data ) || (!parentA && !menuA))
ret = data->immKbd->pImeGetImeMenuItems( himc, flags, type, (IMEMENUITEMINFOW *)parentA,
(IMEMENUITEMINFOW *)menuA, size );
else
{ {
if (!is_himc_ime_unicode(data) || (!lpImeParentMenu && !lpImeMenu)) IMEMENUITEMINFOW tmpW, *menuW, *parentW = parentA ? &tmpW : NULL;
return data->immKbd->pImeGetImeMenuItems(hIMC, dwFlags, dwType,
(IMEMENUITEMINFOW*)lpImeParentMenu, if (!menuA) menuW = NULL;
(IMEMENUITEMINFOW*)lpImeMenu, dwSize);
else else
{ {
IMEMENUITEMINFOW lpImeParentMenuW; int count = size / sizeof(LPIMEMENUITEMINFOA);
IMEMENUITEMINFOW *lpImeMenuW, *parent = NULL; size = count * sizeof(IMEMENUITEMINFOW);
DWORD rc; menuW = HeapAlloc( GetProcessHeap(), 0, size );
}
if (lpImeParentMenu)
parent = &lpImeParentMenuW;
if (lpImeMenu)
{
int count = dwSize / sizeof(LPIMEMENUITEMINFOA);
dwSize = count * sizeof(IMEMENUITEMINFOW);
lpImeMenuW = HeapAlloc(GetProcessHeap(), 0, dwSize);
}
else
lpImeMenuW = NULL;
rc = data->immKbd->pImeGetImeMenuItems(hIMC, dwFlags, dwType, ret = data->immKbd->pImeGetImeMenuItems( himc, flags, type, parentW, menuW, size );
parent, lpImeMenuW, dwSize);
if (lpImeParentMenu) if (parentA)
{ {
memcpy(lpImeParentMenu,&lpImeParentMenuW,sizeof(IMEMENUITEMINFOA)); memcpy( parentA, parentW, sizeof(IMEMENUITEMINFOA) );
lpImeParentMenu->hbmpItem = lpImeParentMenuW.hbmpItem; parentA->hbmpItem = parentW->hbmpItem;
WideCharToMultiByte(CP_ACP, 0, lpImeParentMenuW.szString, WideCharToMultiByte( CP_ACP, 0, parentW->szString, -1, parentA->szString,
-1, lpImeParentMenu->szString, IMEMENUITEM_STRING_SIZE, IMEMENUITEM_STRING_SIZE, NULL, NULL );
NULL, NULL); }
} if (menuA && ret)
if (lpImeMenu && rc) {
unsigned int i;
for (i = 0; i < ret; i++)
{ {
unsigned int i; memcpy( &menuA[i], &menuW[1], sizeof(IMEMENUITEMINFOA) );
for (i = 0; i < rc; i++) menuA[i].hbmpItem = menuW[i].hbmpItem;
{ WideCharToMultiByte( CP_ACP, 0, menuW[i].szString, -1, menuA[i].szString,
memcpy(&lpImeMenu[i],&lpImeMenuW[1],sizeof(IMEMENUITEMINFOA)); IMEMENUITEM_STRING_SIZE, NULL, NULL );
lpImeMenu[i].hbmpItem = lpImeMenuW[i].hbmpItem;
WideCharToMultiByte(CP_ACP, 0, lpImeMenuW[i].szString,
-1, lpImeMenu[i].szString, IMEMENUITEM_STRING_SIZE,
NULL, NULL);
}
} }
HeapFree(GetProcessHeap(),0,lpImeMenuW);
return rc;
} }
HeapFree( GetProcessHeap(), 0, menuW );
} }
else
return 0; return ret;
} }
/*********************************************************************** /***********************************************************************
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment