Fix a stray '}' Update to use RMLVO interface Remove g_winInfo.xkb.disable, can never be set since noXkbExtension has been removed Change to retrieve modifier key state using XkbStateFieldFromRec() from Colin Harrison Update to use XKB defaults from xkb-config.h
Signed-off-by: Jon TURNEY <[email protected]> --- hw/xwin/winconfig.c | 23 +++--------- hw/xwin/winconfig.h | 1 - hw/xwin/winkeybd.c | 91 ++++++++++++++++++---------------------------- hw/xwin/winwndproc.c | 3 +- include/xwin-config.h.in | 1 + 5 files changed, 42 insertions(+), 77 deletions(-) diff --git a/hw/xwin/winconfig.c b/hw/xwin/winconfig.c index 5f5b482..3091bd1 100644 --- a/hw/xwin/winconfig.c +++ b/hw/xwin/winconfig.c @@ -81,7 +81,6 @@ winInfoRec g_winInfo = { } , { /* xkb */ - FALSE, /* disable */ NULL, /* rules */ NULL, /* model */ NULL, /* layout */ @@ -222,25 +221,14 @@ winConfigKeyboard (DeviceIntPtr pDevice) char *s = NULL; /* Setup defaults */ - g_winInfo.xkb.disable = FALSE; -# ifdef PC98 /* japanese */ /* not implemented */ - g_winInfo.xkb.rules = "xfree98"; - g_winInfo.xkb.model = "pc98"; - g_winInfo.xkb.layout = "nex/jp"; - g_winInfo.xkb.variant = NULL; - g_winInfo.xkb.options = NULL; -# else - g_winInfo.xkb.rules = "xorg"; - g_winInfo.xkb.model = "pc101"; - g_winInfo.xkb.layout = "us"; - g_winInfo.xkb.variant = NULL; - g_winInfo.xkb.options = NULL; -# endif /* PC98 */ + g_winInfo.xkb.rules = XKB_DFLT_RULES; + g_winInfo.xkb.model = XKB_DFLT_MODEL; + g_winInfo.xkb.layout = XKB_DFLT_LAYOUT; + g_winInfo.xkb.variant = XKB_DFLT_VARIANT; + g_winInfo.xkb.options = XKB_DFLT_OPTIONS; /* * Query the windows autorepeat settings and change the xserver defaults. - * If XKB is disabled then windows handles the autorepeat and the special - * treatment is not needed */ { int kbd_delay; @@ -483,7 +471,6 @@ winConfigKeyboard (DeviceIntPtr pDevice) winMsg (from, "XKB: options: \"%s\"\n", s); } - } #ifdef XWIN_XF86CONFIG } #endif diff --git a/hw/xwin/winconfig.h b/hw/xwin/winconfig.h index 71c4582..0e22b9d 100644 --- a/hw/xwin/winconfig.h +++ b/hw/xwin/winconfig.h @@ -307,7 +307,6 @@ typedef struct keyboard; struct { - Bool disable; char *rules; char *model; char *layout; diff --git a/hw/xwin/winkeybd.c b/hw/xwin/winkeybd.c index 41168f3..00ce6f4 100644 --- a/hw/xwin/winkeybd.c +++ b/hw/xwin/winkeybd.c @@ -44,10 +44,6 @@ static Bool g_winKeyState[NUM_KEYCODES]; -/* Stored to get internal mode key states. Must be read-only. */ -static unsigned short const *g_winInternalModeKeyStatesPtr = NULL; - - /* * Local prototypes */ @@ -204,7 +200,6 @@ winKeybdBell (int iPercent, DeviceIntPtr pDeviceInt, static void winKeybdCtrl (DeviceIntPtr pDevice, KeybdCtrl *pCtrl) { - g_winInternalModeKeyStatesPtr = &(pDevice->key->state); } @@ -216,11 +211,11 @@ winKeybdCtrl (DeviceIntPtr pDevice, KeybdCtrl *pCtrl) int winKeybdProc (DeviceIntPtr pDeviceInt, int iState) { - KeySymsRec keySyms; DevicePtr pDevice = (DevicePtr) pDeviceInt; XkbComponentNamesRec names; XkbSrvInfoPtr xkbi; XkbControlsPtr ctrl; + XkbRMLVOSet rmlvo; switch (iState) { @@ -230,65 +225,47 @@ winKeybdProc (DeviceIntPtr pDeviceInt, int iState) /* FIXME: Maybe we should use winGetKbdLeds () here? */ defaultKeyboardControl.leds = g_winInfo.keyboard.leds; - if (g_winInfo.xkb.disable) - { - InitKeyboardDeviceStruct (pDevice, - &keySyms, - winKeybdBell, - winKeybdCtrl); - } - else - { - - names.keymap = g_winInfo.xkb.keymap; - names.keycodes = g_winInfo.xkb.keycodes; - names.types = g_winInfo.xkb.types; - names.compat = g_winInfo.xkb.compat; - names.symbols = g_winInfo.xkb.symbols; - names.geometry = g_winInfo.xkb.geometry; - - winErrorFVerb(2, "Rules = \"%s\" Model = \"%s\" Layout = \"%s\"" - " Variant = \"%s\" Options = \"%s\"\n", - g_winInfo.xkb.rules ? g_winInfo.xkb.rules : "none", - g_winInfo.xkb.model ? g_winInfo.xkb.model : "none", - g_winInfo.xkb.layout ? g_winInfo.xkb.layout : "none", - g_winInfo.xkb.variant ? g_winInfo.xkb.variant : "none", - g_winInfo.xkb.options ? g_winInfo.xkb.options : "none"); - - XkbSetRulesDflts (g_winInfo.xkb.rules, g_winInfo.xkb.model, - g_winInfo.xkb.layout, g_winInfo.xkb.variant, - g_winInfo.xkb.options); - XkbInitKeyboardDeviceStruct (pDeviceInt, &names, &keySyms, - winKeybdBell, winKeybdCtrl); - } - - if (!g_winInfo.xkb.disable) - { - xkbi = pDeviceInt->key->xkbInfo; - if (xkbi != NULL) - { - ctrl = xkbi->desc->ctrls; - ctrl->repeat_delay = g_winInfo.keyboard.delay; - ctrl->repeat_interval = 1000/g_winInfo.keyboard.rate; - } - else - { - winErrorFVerb (1, "winKeybdProc - Error initializing keyboard AutoRepeat (No XKB)\n"); - } + memset(&rmlvo, 0, sizeof(rmlvo)); + rmlvo.rules = g_winInfo.xkb.rules; + rmlvo.model = g_winInfo.xkb.model; + rmlvo.layout = g_winInfo.xkb.layout; + rmlvo.variant = g_winInfo.xkb.variant; + rmlvo.options = g_winInfo.xkb.options; + + winErrorFVerb(2, "Rules = \"%s\" Model = \"%s\" Layout = \"%s\"" + " Variant = \"%s\" Options = \"%s\"\n", + g_winInfo.xkb.rules ? g_winInfo.xkb.rules : "none", + g_winInfo.xkb.model ? g_winInfo.xkb.model : "none", + g_winInfo.xkb.layout ? g_winInfo.xkb.layout : "none", + g_winInfo.xkb.variant ? g_winInfo.xkb.variant : "none", + g_winInfo.xkb.options ? g_winInfo.xkb.options : "none"); + + InitKeyboardDeviceStruct (pDeviceInt, + &rmlvo, + winKeybdBell, + winKeybdCtrl); + + xkbi = pDeviceInt->key->xkbInfo; + if ((xkbi != NULL) && (xkbi->desc != NULL)) + { + ctrl = xkbi->desc->ctrls; + ctrl->repeat_delay = g_winInfo.keyboard.delay; + ctrl->repeat_interval = 1000/g_winInfo.keyboard.rate; + } + else + { + winErrorFVerb (1, "winKeybdProc - Error initializing keyboard AutoRepeat\n"); } - g_winInternalModeKeyStatesPtr = &(pDeviceInt->key->state); break; case DEVICE_ON: pDevice->on = TRUE; - g_winInternalModeKeyStatesPtr = &(pDeviceInt->key->state); break; case DEVICE_CLOSE: case DEVICE_OFF: pDevice->on = FALSE; - g_winInternalModeKeyStatesPtr = NULL; break; } @@ -350,7 +327,7 @@ winRestoreModeKeyStates () unsigned short internalKeyStates; /* X server is being initialized */ - if (!g_winInternalModeKeyStatesPtr) + if (!inputInfo.keyboard) return; /* Only process events if the rootwindow is mapped. The keyboard events @@ -363,7 +340,9 @@ winRestoreModeKeyStates () mieqProcessInputEvents (); /* Read the mode key states of our X server */ - internalKeyStates = *g_winInternalModeKeyStatesPtr; + /* (stored in the virtual core keyboard) */ + internalKeyStates = XkbStateFieldFromRec(&inputInfo.keyboard->key->xkbInfo->state); + winDebug("winRestoreModeKeyStates: state %d\n", internalKeyStates); /* * NOTE: The C XOR operator, ^, will not work here because it is diff --git a/hw/xwin/winwndproc.c b/hw/xwin/winwndproc.c index 36cde35..a942fb3 100644 --- a/hw/xwin/winwndproc.c +++ b/hw/xwin/winwndproc.c @@ -1031,9 +1031,8 @@ winWindowProc (HWND hwnd, UINT message, /* * Discard presses generated from Windows auto-repeat - * ago: Only discard them if XKB is not disabled */ - if (!g_winInfo.xkb.disable && (lParam & (1<<30))) + if (lParam & (1<<30)) { switch (wParam) { diff --git a/include/xwin-config.h.in b/include/xwin-config.h.in index c8de110..45dbb00 100644 --- a/include/xwin-config.h.in +++ b/include/xwin-config.h.in @@ -5,6 +5,7 @@ * */ #include <dix-config.h> +#include <xkb-config.h> /* Winsock networking */ #undef HAS_WINSOCK -- 1.6.0.4 _______________________________________________ xorg mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/xorg
