Author: axeld Date: 2009-11-17 12:41:11 +0100 (Tue, 17 Nov 2009) New Revision: 34087 Changeset: http://dev.haiku-os.org/changeset/34087/haiku Modified: haiku/trunk/src/add-ons/kernel/bus_managers/ps2/ps2_keyboard.c Log: * The keyboard driver will now send a "key up" event for the emergency keys afterwards; ie. the alt key is no longer stuck after visiting KDL. Modified: haiku/trunk/src/add-ons/kernel/bus_managers/ps2/ps2_keyboard.c =================================================================== --- haiku/trunk/src/add-ons/kernel/bus_managers/ps2/ps2_keyboard.c 2009-11-17 11:37:11 UTC (rev 34086) +++ haiku/trunk/src/add-ons/kernel/bus_managers/ps2/ps2_keyboard.c 2009-11-17 11:41:11 UTC (rev 34087) @@ -153,8 +153,22 @@ emergencyKeyStatus &= EMERGENCY_SYS_REQ; } else if (emergencyKeyStatus > EMERGENCY_SYS_REQ && debug_emergency_key_pressed(kUnshiftedKeymap[scancode])) { + static const int kKeys[] = {LEFT_ALT_KEY, RIGHT_ALT_KEY, SYS_REQ_KEY}; + int i; + // we probably have lost some keys, so reset our key states emergencyKeyStatus = 0; + + // send key ups for alt-sysreq + keyInfo.timestamp = system_time(); + keyInfo.is_keydown = false; + for (i = 0; i < sizeof(kKeys) / sizeof(kKeys[0]); i++) { + keyInfo.scancode = kKeys[i]; + if (packet_buffer_write(sKeyBuffer, (uint8 *)&keyInfo, + sizeof(keyInfo)) != 0) + release_sem_etc(sKeyboardSem, 1, B_DO_NOT_RESCHEDULE); + } + return B_HANDLED_INTERRUPT; }