summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon TURNEY <jon.turney@dronecode.org.uk>2012-11-05 14:54:51 +0000
committerJon TURNEY <jon.turney@dronecode.org.uk>2012-11-27 16:09:06 +0000
commit47291d0b7d7bfee74156f83badae15a0818c68ad (patch)
tree384a00fcb5c66812454fc518aa85f2ef663b330a
parent8aa27ae82109e4fab0ff3ed86ad1d152438a2585 (diff)
hw/xwin: Give our logical xor operator a more logical name
Also, rather than a comment about why we need a logical operator, let's have a comment about what we are doing to the keyboard state... Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk> Reviewed-by: Colin Harrison <colin.harrison@virgin.net>
-rw-r--r--hw/xwin/win.h3
-rw-r--r--hw/xwin/winkeybd.c25
2 files changed, 12 insertions, 16 deletions
diff --git a/hw/xwin/win.h b/hw/xwin/win.h
index 7b34e84d9..180695e24 100644
--- a/hw/xwin/win.h
+++ b/hw/xwin/win.h
@@ -248,9 +248,6 @@ if (++PROFPT##point % thresh == 0)\
ErrorF (#point ": PROFILEPOINT hit %u times\n", PROFPT##point);\
}
-/* We use xor this macro for detecting toggle key state changes */
-#define WIN_XOR(a,b) ((!(a) && (b)) || ((a) && !(b)))
-
#define DEFINE_ATOM_HELPER(func,atom_name) \
static Atom func (void) { \
static int generation; \
diff --git a/hw/xwin/winkeybd.c b/hw/xwin/winkeybd.c
index 2ffb9a943..104ca589a 100644
--- a/hw/xwin/winkeybd.c
+++ b/hw/xwin/winkeybd.c
@@ -41,6 +41,9 @@
#include "xkbsrv.h"
+/* C does not have a logical XOR operator, so we use a macro instead */
+#define LOGICAL_XOR(a,b) ((!(a) && (b)) || ((a) && !(b)))
+
static Bool g_winKeyState[NUM_KEYCODES];
/*
@@ -259,36 +262,32 @@ winRestoreModeKeyStates(void)
XkbStateFieldFromRec(&inputInfo.keyboard->key->xkbInfo->state);
winDebug("winRestoreModeKeyStates: state %d\n", internalKeyStates);
- /*
- * NOTE: The C XOR operator, ^, will not work here because it is
- * a bitwise operator, not a logical operator. C does not
- * have a logical XOR operator, so we use a macro instead.
- */
- /* Has the key state changed? */
+ /*
+ Check if latching modifier key states have changed, and if so,
+ fake a press and a release to toggle the modifier to the correct
+ state
+ */
dwKeyState = GetKeyState(VK_NUMLOCK) & 0x0001;
- if (WIN_XOR(internalKeyStates & NumLockMask, dwKeyState)) {
+ if (LOGICAL_XOR(internalKeyStates & NumLockMask, dwKeyState)) {
winSendKeyEvent(KEY_NumLock, TRUE);
winSendKeyEvent(KEY_NumLock, FALSE);
}
- /* Has the key state changed? */
dwKeyState = GetKeyState(VK_CAPITAL) & 0x0001;
- if (WIN_XOR(internalKeyStates & LockMask, dwKeyState)) {
+ if (LOGICAL_XOR(internalKeyStates & LockMask, dwKeyState)) {
winSendKeyEvent(KEY_CapsLock, TRUE);
winSendKeyEvent(KEY_CapsLock, FALSE);
}
- /* Has the key state changed? */
dwKeyState = GetKeyState(VK_SCROLL) & 0x0001;
- if (WIN_XOR(internalKeyStates & ScrollLockMask, dwKeyState)) {
+ if (LOGICAL_XOR(internalKeyStates & ScrollLockMask, dwKeyState)) {
winSendKeyEvent(KEY_ScrollLock, TRUE);
winSendKeyEvent(KEY_ScrollLock, FALSE);
}
- /* Has the key state changed? */
dwKeyState = GetKeyState(VK_KANA) & 0x0001;
- if (WIN_XOR(internalKeyStates & KanaMask, dwKeyState)) {
+ if (LOGICAL_XOR(internalKeyStates & KanaMask, dwKeyState)) {
winSendKeyEvent(KEY_HKTG, TRUE);
winSendKeyEvent(KEY_HKTG, FALSE);
}