From b3cd762f3344512ae1ad6ddc4c241c3a3f1c66c7 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Wed, 31 Dec 2008 11:17:38 -0800 Subject: [PATCH] XQuartz: Honor system key repeat rate (cherry picked from commit 4303c9be39a86f5a21de108f72b90a989435905e) --- hw/xquartz/quartzKeyboard.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c index 7159d019a..eea839cf4 100644 --- a/hw/xquartz/quartzKeyboard.c +++ b/hw/xquartz/quartzKeyboard.c @@ -323,7 +323,9 @@ static void DarwinKeyboardSetDeviceKeyMap(KeySymsRec *keySyms) { */ void DarwinKeyboardInit(DeviceIntPtr pDev) { KeySymsRec keySyms; - XkbComponentNamesRec names; + XkbComponentNamesRec names; + CFIndex value; + BOOL ok; // Open a shared connection to the HID System. // Note that the Event Status Driver is really just a wrapper @@ -332,7 +334,7 @@ void DarwinKeyboardInit(DeviceIntPtr pDev) { DarwinLoadKeyboardMapping(&keySyms); - bzero(&names, sizeof(names)); + bzero(&names, sizeof(names)); /* We need to really have rules... or something... */ //XkbSetRulesDflts("base", "pc105", "us", NULL, NULL); @@ -342,7 +344,26 @@ void DarwinKeyboardInit(DeviceIntPtr pDev) { QuartzBell, DarwinChangeKeyboardControl)); pthread_mutex_unlock(&keyInfo_mutex); - SwitchCoreKeyboard(pDev); + /* Get our key repeat settings from GlobalPreferences */ + (void)CFPreferencesAppSynchronize(CFSTR(".GlobalPreferences")); + value = CFPreferencesGetAppIntegerValue(CFSTR("InitialKeyRepeat"), CFSTR(".GlobalPreferences"), &ok); + if(!ok) + value = 35; + + if(value == 300000) { // off + XkbSetRepeatKeys(pDev, -1, AutoRepeatModeOff); + } else { + pDev->key->xkbInfo->desc->ctrls->repeat_delay = value * 15; + + value = CFPreferencesGetAppIntegerValue(CFSTR("KeyRepeat"), CFSTR(".GlobalPreferences"), &ok); + if(!ok) + value = 6; + pDev->key->xkbInfo->desc->ctrls->repeat_interval = value * 15; + + XkbSetRepeatKeys(pDev, -1, AutoRepeatModeOn); + } + + SwitchCoreKeyboard(pDev); DarwinKeyboardSetDeviceKeyMap(&keySyms); }