summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hw/kdrive/src/kinput.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
index bc93f634e..e0dc7a587 100644
--- a/hw/kdrive/src/kinput.c
+++ b/hw/kdrive/src/kinput.c
@@ -21,7 +21,7 @@
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $XFree86: xc/programs/Xserver/hw/kdrive/kinput.c,v 1.9 2000/10/06 22:05:53 keithp Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/kdrive/kinput.c,v 1.10 2000/10/08 02:08:39 keithp Exp $ */
#include "kdrive.h"
#include "inputstr.h"
@@ -1069,16 +1069,16 @@ KdReleaseAllKeys (void)
xEvent xE;
int key;
+ KdBlockSigio ();
for (key = 0; key < KD_KEY_COUNT; key++)
if (IsKeyDown(key))
{
xE.u.keyButtonPointer.time = GetTimeInMillis();
xE.u.u.type = KeyRelease;
xE.u.u.detail = key;
- KdBlockSigio ();
KdHandleKeyboardEvent (&xE);
- KdUnblockSigio ();
}
+ KdUnblockSigio ();
}
void
@@ -1155,15 +1155,20 @@ KdEnqueueKeyboardEvent(unsigned char scan_code,
{
return;
}
+ /*
+ * X delivers press/release even for autorepeat
+ */
+ xE.u.u.type = KeyRelease;
+ KdHandleKeyboardEvent (&xE);
+ xE.u.u.type = KeyPress;
}
-#if 0
- if (xE.u.u.type == KeyRelease && !IsKeyDown (key_code))
+ /*
+ * Check released keys which are already up
+ */
+ else if (!IsKeyDown (key_code) && xE.u.u.type == KeyRelease)
{
- xE.u.u.type = KeyPress;
- KdHandleKeyboardEvent (&xE);
- xE.u.u.type = KeyRelease;
+ return;
}
-#endif
KdCheckSpecialKeys (&xE);
KdHandleKeyboardEvent (&xE);
}