From 4e9279fb877cc83712b11754928d21b11191e600 Mon Sep 17 00:00:00 2001
From: Ingo Ruhnke <grumbel@gmx.de>
Date: Sat, 29 Jan 2011 20:10:51 +0100
Subject: [PATCH] Fixed --no-extra-devices

---
 src/linux_uinput.cpp |  4 ++++
 src/linux_uinput.hpp |  2 +-
 src/ui_event.cpp     | 49 +++++++++++++++++++++++++-------------------
 src/ui_event.hpp     |  9 ++++----
 src/uinput.cpp       |  5 +++--
 5 files changed, 41 insertions(+), 28 deletions(-)

diff --git a/src/linux_uinput.cpp b/src/linux_uinput.cpp
index 0ae5fe6..4a96442 100644
--- a/src/linux_uinput.cpp
+++ b/src/linux_uinput.cpp
@@ -193,6 +193,10 @@ LinuxUinput::finish()
       // nothing to be done
       break;
 
+    case kKeyboardDevice:
+      // FIXME: do something clever
+      break;
+
     case kMouseDevice:
       add_rel(REL_X);
       add_rel(REL_Y);
diff --git a/src/linux_uinput.hpp b/src/linux_uinput.hpp
index 836109e..21d3b52 100644
--- a/src/linux_uinput.hpp
+++ b/src/linux_uinput.hpp
@@ -28,7 +28,7 @@ class ForceFeedbackHandler;
 class LinuxUinput
 {
 public:
-  enum DeviceType { kGenericDevice, kMouseDevice, kJoystickDevice };
+  enum DeviceType { kGenericDevice, kKeyboardDevice, kMouseDevice, kJoystickDevice };
 
 private:
   DeviceType  m_device_type;
diff --git a/src/ui_event.cpp b/src/ui_event.cpp
index 0316951..beca40b 100644
--- a/src/ui_event.cpp
+++ b/src/ui_event.cpp
@@ -105,30 +105,37 @@ UIEvent::resolve_device_id(int slot, bool extra_devices)
 
   if (m_device_id == DEVICEID_AUTO)
   {
-    switch(type)
+    if (extra_devices)
     {
-      case EV_KEY:
-        if (is_mouse_button(code))
-        {
+      switch(type)
+      {
+        case EV_KEY:
+          if (is_mouse_button(code))
+          {
+            m_device_id = DEVICEID_MOUSE;
+          }
+          else if (is_keyboard_button(code))
+          {
+            m_device_id = DEVICEID_KEYBOARD;
+          }
+          else
+          {
+            m_device_id = DEVICEID_JOYSTICK;
+          }
+          break;
+
+        case EV_REL:
           m_device_id = DEVICEID_MOUSE;
-        }
-        else if (is_keyboard_button(code))
-        {
-          m_device_id = DEVICEID_KEYBOARD;
-        }
-        else
-        {
+          break;
+
+        case EV_ABS:
           m_device_id = DEVICEID_JOYSTICK;
-        }
-        break;
-
-      case EV_REL:
-        m_device_id = DEVICEID_MOUSE;
-        break;
-
-      case EV_ABS:
-        m_device_id = DEVICEID_JOYSTICK;
-        break;
+          break;
+      }
+    }
+    else
+    {
+      m_device_id = DEVICEID_GENERIC;
     }
   }
 
diff --git a/src/ui_event.hpp b/src/ui_event.hpp
index 3f6ec7c..1cd5ab0 100644
--- a/src/ui_event.hpp
+++ b/src/ui_event.hpp
@@ -23,11 +23,12 @@
 #include <stdint.h>
 
 enum {
-  DEVICEID_INVALID  = static_cast<uint16_t>(-4),
-  DEVICEID_KEYBOARD = static_cast<uint16_t>(-3),
-  DEVICEID_MOUSE    = static_cast<uint16_t>(-2),
+  DEVICEID_INVALID  = static_cast<uint16_t>(-5),
+  DEVICEID_KEYBOARD = static_cast<uint16_t>(-4),
+  DEVICEID_MOUSE    = static_cast<uint16_t>(-3),
+  DEVICEID_JOYSTICK = static_cast<uint16_t>(-2),
   DEVICEID_AUTO     = static_cast<uint16_t>(-1),
-  DEVICEID_JOYSTICK =  0
+  DEVICEID_GENERIC  = static_cast<uint16_t>(0)
 };
 
 enum {
diff --git a/src/uinput.cpp b/src/uinput.cpp
index ee19be7..a8c2772 100644
--- a/src/uinput.cpp
+++ b/src/uinput.cpp
@@ -142,7 +142,7 @@ UInput::create_uinput_device(uint32_t device_id)
   else
   {
     log_debug("create device: " << device_id);
-    LinuxUinput::DeviceType device_type = LinuxUinput::kGenericDevice;
+    LinuxUinput::DeviceType device_type;
 
     switch (device_id)
     {
@@ -155,10 +155,11 @@ UInput::create_uinput_device(uint32_t device_id)
         break;
       
       case DEVICEID_KEYBOARD:
-        device_type = LinuxUinput::kGenericDevice;
+        device_type = LinuxUinput::kKeyboardDevice;
         break;
 
       default:
+        device_type = LinuxUinput::kGenericDevice;
         break;
     }