Cygwin/X: Make the keyboard layout detection logging a bit clearer

Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
Reviewed-by: Colin Harrison <colin.harrison@virgin.net>
This commit is contained in:
Jon TURNEY 2010-07-18 13:42:29 +01:00
parent 57ca09441e
commit ae99a6f895

View File

@ -240,6 +240,7 @@ Bool
winConfigKeyboard (DeviceIntPtr pDevice) winConfigKeyboard (DeviceIntPtr pDevice)
{ {
char layoutName[KL_NAMELENGTH]; char layoutName[KL_NAMELENGTH];
unsigned char layoutFriendlyName[256];
static unsigned int layoutNum = 0; static unsigned int layoutNum = 0;
int keyboardType; int keyboardType;
#ifdef XWIN_XF86CONFIG #ifdef XWIN_XF86CONFIG
@ -299,11 +300,32 @@ winConfigKeyboard (DeviceIntPtr pDevice)
if (LoadKeyboardLayout("00000409", KLF_ACTIVATE) != NULL) if (LoadKeyboardLayout("00000409", KLF_ACTIVATE) != NULL)
winMsg (X_INFO, "Loading US keyboard layout.\n"); winMsg (X_INFO, "Loading US keyboard layout.\n");
else else
winMsg (X_ERROR, "LoadKeyboardLaout failed.\n"); winMsg (X_ERROR, "LoadKeyboardLayout failed.\n");
} }
} }
winMsg (X_PROBED, "winConfigKeyboard - Layout: \"%s\" (%08x) \n",
layoutName, layoutNum); /* Discover the friendly name of the current layout */
{
HKEY regkey = NULL;
const char regtempl[] = "SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\";
char *regpath;
DWORD namesize = sizeof(layoutFriendlyName);
regpath = malloc(sizeof(regtempl) + KL_NAMELENGTH + 1);
strcpy(regpath, regtempl);
strcat(regpath, layoutName);
if (!RegOpenKey(HKEY_LOCAL_MACHINE, regpath, &regkey))
RegQueryValueEx(regkey, "Layout Text", 0, NULL, layoutFriendlyName, &namesize);
/* Close registry key */
if (regkey)
RegCloseKey (regkey);
free(regpath);
}
winMsg (X_PROBED, "Windows keyboard layout: \"%s\" (%08x) \"%s\", type %d\n",
layoutName, layoutNum, layoutFriendlyName, keyboardType);
for (pLayout = winKBLayouts; pLayout->winlayout != -1; pLayout++) for (pLayout = winKBLayouts; pLayout->winlayout != -1; pLayout++)
{ {
@ -311,46 +333,35 @@ winConfigKeyboard (DeviceIntPtr pDevice)
continue; continue;
if (pLayout->winkbtype > 0 && pLayout->winkbtype != keyboardType) if (pLayout->winkbtype > 0 && pLayout->winkbtype != keyboardType)
continue; continue;
bfound = TRUE; bfound = TRUE;
winMsg (X_PROBED, winMsg (X_PROBED,
"Using preset keyboard for \"%s\" (%x), type \"%d\"\n", "Found matching XKB configuration \"%s\"\n",
pLayout->layoutname, pLayout->winlayout, keyboardType); pLayout->layoutname);
winMsg(X_PROBED,
"Model = \"%s\" Layout = \"%s\""
" Variant = \"%s\" Options = \"%s\"\n",
pLayout->xkbmodel ? pLayout->xkbmodel : "none",
pLayout->xkblayout ? pLayout->xkblayout : "none",
pLayout->xkbvariant ? pLayout->xkbvariant : "none",
pLayout->xkboptions ? pLayout->xkboptions : "none");
g_winInfo.xkb.model = pLayout->xkbmodel; g_winInfo.xkb.model = pLayout->xkbmodel;
g_winInfo.xkb.layout = pLayout->xkblayout; g_winInfo.xkb.layout = pLayout->xkblayout;
g_winInfo.xkb.variant = pLayout->xkbvariant; g_winInfo.xkb.variant = pLayout->xkbvariant;
g_winInfo.xkb.options = pLayout->xkboptions; g_winInfo.xkb.options = pLayout->xkboptions;
break; break;
} }
if (!bfound) if (!bfound)
{ {
HKEY regkey = NULL; winMsg (X_ERROR, "Keyboardlayout \"%s\" (%s) is unknown, using X server default layout\n", layoutFriendlyName, layoutName);
const char regtempl[] =
"SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\";
char *regpath;
unsigned char lname[256];
DWORD namesize = sizeof(lname);
regpath = malloc(sizeof(regtempl) + KL_NAMELENGTH + 1);
strcpy(regpath, regtempl);
strcat(regpath, layoutName);
if (!RegOpenKey(HKEY_LOCAL_MACHINE, regpath, &regkey) &&
!RegQueryValueEx(regkey, "Layout Text", 0, NULL, lname, &namesize))
{
winMsg (X_ERROR,
"Keyboardlayout \"%s\" (%s) is unknown\n", lname, layoutName);
}
/* Close registry key */
if (regkey)
RegCloseKey (regkey);
free(regpath);
} }
} }
/* parse the configuration */ /* parse the configuration */
#ifdef XWIN_XF86CONFIG #ifdef XWIN_XF86CONFIG
if (g_cmdline.keyboard) if (g_cmdline.keyboard)