All pastes #1816325 Raw Edit

Untitled

public text v1 · immutable
#1816325 ·published 2010-03-01 01:17 UTC
rendered paste body
From f19bc7337ca4b7380a87132a0e4dad0083072d0c Mon Sep 17 00:00:00 2001
From: Chuck Miller <shadowmil@gmail.com>
Date: Sun, 28 Feb 2010 20:14:42 -0500
Subject: [PATCH] Clean up handling of key collisions

-Cleaner code
-Ignore keys can collide with anything
-No longer have collisions between two unassigned keys

Reviewed-By: Jared Adams
---
 src/keyboardconfig.cpp |   27 ++++++++++++++++++---------
 1 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/src/keyboardconfig.cpp b/src/keyboardconfig.cpp
index 8d1f0bc..7b462c2 100644
--- a/src/keyboardconfig.cpp
+++ b/src/keyboardconfig.cpp
@@ -156,15 +156,24 @@ bool KeyboardConfig::hasConflicts()
     {
         for (j = i, j++; j < KEY_TOTAL; j++)
         {
-            // Allow for item shortcut and emote keys to overlap
-            // as well as emote and ignore keys, but no other keys
-            if (!((((i >= KEY_SHORTCUT_1) && (i <= KEY_SHORTCUT_12)) &&
-                   ((j >= KEY_EMOTE_1) && (j <= KEY_EMOTE_12))) ||
-                   ((i == KEY_TOGGLE_CHAT) && (j == KEY_OK)) ||
-                   ((i == KEY_EMOTE) &&
-                    (j == KEY_IGNORE_INPUT_1 || j == KEY_IGNORE_INPUT_2))) &&
-                   (mKey[i].value == mKey[j].value)
-               )
+            // Allow collisions between shortcut and emote keys
+            if ((i >= KEY_SHORTCUT_1 && i <= KEY_SHORTCUT_12) && (j >= KEY_EMOTE_1 && j <= KEY_EMOTE_12))
+                continue;
+
+            // Why?
+            if (i == KEY_TOGGLE_CHAT && j == KEY_OK)
+                continue;
+
+            // Ignore keys can collide with anything.
+            if (j == KEY_IGNORE_INPUT_1 || j == KEY_IGNORE_INPUT_2)
+                continue;
+
+            // If the one of the keys is not set, then no conflict can happen.
+            if (mKey[i].value == -1 || mKey[j].value == -1)
+                continue;
+
+            // Finally test to see if a conflict DOES exist.
+            if (mKey[i].value == mKey[j].value)
             {
                 mBindError = strprintf(_("Conflict \"%s\" and \"%s\" keys. "
                                          "Resolve them, or gameplay may result"
-- 
1.6.3.3