]> Shamusworld >> Repos - virtualjaguar/blobdiff - src/gui/profile.cpp
Made keyboard handling a bit more sane.
[virtualjaguar] / src / gui / profile.cpp
index 114b98c9059cb59e520a08fb87de1c2897a9286f..854d8cb038b05408e886b6a51af9ebf66c736494 100644 (file)
@@ -363,9 +363,14 @@ void AutoConnectProfiles(void)
        gamepadIDSlot1 = -1;
        gamepadIDSlot2 = -1;
 
-       // Connect keyboard devices first... (N.B.: this leaves gampadIDSlot1 at -1,
-       // so it can be overridden by plugged-in gamepads.)
-       ConnectProfileToDevice(0);
+       // Connect the keyboard automagically only if no gamepads are plugged in.
+       // Otherwise, check after all other devices have been checked, then try to
+       // add it in.
+       if (Gamepad::numJoysticks == 0)
+       {
+               ConnectProfileToDevice(0);
+               return;
+       }
 
        // Connect the profiles that prefer a slot, if any.
        // N.B.: Conflicts are detected, but ignored. 1st controller to grab a
@@ -437,6 +442,21 @@ void AutoConnectProfiles(void)
                }
        }
 
+       // Connect the keyboard device (lowest priority)
+       int slot = profile[0].preferredSlot;
+
+       if ((slot == CONTROLLER1) && (gamepadIDSlot1 == -1))
+               controller1Profile = 0;
+       else if ((slot == CONTROLLER2) && (gamepadIDSlot2 == -1))
+               controller2Profile = 0;
+       else if (slot == (CONTROLLER1 | CONTROLLER2))
+       {
+               if (gamepadIDSlot1 == -1)
+                       controller1Profile = 0;
+               else if (gamepadIDSlot2 == -1)
+                       controller2Profile = 0;
+       }
+
        // Finally, attempt to connect profiles to controllers
        ConnectProfileToController(controller1Profile, 0);
        ConnectProfileToController(controller2Profile, 1);