[haiku-commits] r34087 - haiku/trunk/src/add-ons/kernel/bus_managers/ps2

  • From: axeld@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 17 Nov 2009 12:41:11 +0100 (CET)

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;
        }
 


Other related posts:

  • » [haiku-commits] r34087 - haiku/trunk/src/add-ons/kernel/bus_managers/ps2 - axeld