From c0891ef16d15b85de932f4fb3cd634490a394ad4 Mon Sep 17 00:00:00 2001
From: Ingo Ruhnke <grumbel@gmx.de>
Date: Wed, 26 Jan 2011 17:21:42 +0100
Subject: [PATCH] Fixed --no-uinput

---
 src/dummy_message_processor.cpp |  2 +-
 src/xboxdrv.cpp                 | 23 ++++++++++++++++-------
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/src/dummy_message_processor.cpp b/src/dummy_message_processor.cpp
index 91ff2ca..f0e570b 100644
--- a/src/dummy_message_processor.cpp
+++ b/src/dummy_message_processor.cpp
@@ -28,7 +28,7 @@ DummyMessageProcessor::DummyMessageProcessor()
 void
 DummyMessageProcessor::send(const XboxGenericMsg& msg, int msec_delta)
 {
-  log_info << msg << std::endl;
+  // do nothing as the XboxdrvThread is already doing the printing
 }
 
 void
diff --git a/src/xboxdrv.cpp b/src/xboxdrv.cpp
index a69ca00..9ddccb2 100644
--- a/src/xboxdrv.cpp
+++ b/src/xboxdrv.cpp
@@ -24,6 +24,7 @@
 #include <stdio.h>
 
 #include "command_line_options.hpp"
+#include "dummy_message_processor.hpp"
 #include "default_message_processor.hpp"
 #include "evdev_controller.hpp"
 #include "helper.hpp"
@@ -456,15 +457,23 @@ Xboxdrv::run_main(const Options& opts)
 
     global_exit_xboxdrv = false;
 
-    ControllerSlotConfigPtr config_set = ControllerSlotConfig::create(*uinput, 
-                                                                      0, opts.extra_devices,
-                                                                      opts.get_controller_slot());
+    std::auto_ptr<MessageProcessor> message_proc;
+    if (uinput.get())
+    {
+      ControllerSlotConfigPtr config_set = ControllerSlotConfig::create(*uinput, 
+                                                                        0, opts.extra_devices,
+                                                                        opts.get_controller_slot());
 
-    // After all the ControllerConfig registered their events, finish up
-    // the device creation
-    uinput->finish();
+      // After all the ControllerConfig registered their events, finish up
+      // the device creation
+      uinput->finish();
 
-    std::auto_ptr<MessageProcessor> message_proc(new DefaultMessageProcessor(*uinput, config_set, opts));
+      message_proc.reset(new DefaultMessageProcessor(*uinput, config_set, opts));
+    }
+    else
+    {
+      message_proc.reset(new DummyMessageProcessor);
+    }
 
     XboxdrvThread loop(message_proc, controller, opts);
     loop.controller_loop(opts);