From c99eb33c990f73910ad90346da73ee74a6c9f4fb Mon Sep 17 00:00:00 2001
From: CatalystG <CatalystGdev@gmail.com>
Date: Sat, 3 Aug 2013 15:36:09 -0400
Subject: [PATCH] (BlackBerry) Quick fix for device selection dropdown.

---
 blackberry-qnx/bb10/assets/Controllers.qml    | 29 +++++++++++++++----
 blackberry-qnx/bb10/src/ButtonMap.cpp         |  9 ++++++
 blackberry-qnx/bb10/src/ButtonMap.h           |  2 ++
 .../bb10/src/RetroArch-Cascades.cpp           |  2 +-
 blackberry-qnx/frontend_qnx.h                 |  1 +
 blackberry-qnx/qnx_input.c                    |  8 +++--
 6 files changed, 42 insertions(+), 9 deletions(-)

diff --git a/blackberry-qnx/bb10/assets/Controllers.qml b/blackberry-qnx/bb10/assets/Controllers.qml
index 8e45433ef7..de754c3d34 100644
--- a/blackberry-qnx/bb10/assets/Controllers.qml
+++ b/blackberry-qnx/bb10/assets/Controllers.qml
@@ -53,14 +53,31 @@ Page
             preferredWidth: 650
             horizontalAlignment: HorizontalAlignment.Center
 
-            DropDown 
+            Container 
             {
-                objectName: "dropdown_devices"
-                title: "Device"
-                
-                onSelectedValueChanged:
+                horizontalAlignment: HorizontalAlignment.Center
+                layout: StackLayout 
                 {
-                    ButtonMap.mapDevice(selectedValue, players.selectedValue);
+                    orientation: LayoutOrientation.LeftToRight
+                }
+
+                DropDown
+                {
+                    horizontalAlignment: HorizontalAlignment.Left
+                    id: dropdown_device
+                    objectName: "dropdown_devices"
+                    title: "Device"
+                }
+
+                Button
+                {
+                    horizontalAlignment: HorizontalAlignment.Right
+                    text: "Set"
+
+                    onClicked:
+                    {
+                        ButtonMap.mapDevice(dropdown_device.selectedValue, players.selectedValue);
+                    }
                 }
             }
 
diff --git a/blackberry-qnx/bb10/src/ButtonMap.cpp b/blackberry-qnx/bb10/src/ButtonMap.cpp
index feb80570d9..8a65787b84 100644
--- a/blackberry-qnx/bb10/src/ButtonMap.cpp
+++ b/blackberry-qnx/bb10/src/ButtonMap.cpp
@@ -184,6 +184,15 @@ void ButtonMap::refreshButtonMap(int player)
     map.insert("type", QVariant("item"));
     map.insert("index", QVariant(RARCH_MENU_TOGGLE));
     buttonDataModel->append(map);
+
+    //Update device dropdown
+    if (deviceSelection)
+    {
+       if(port_device[player])
+          deviceSelection->setSelectedIndex(port_device[player]->index);
+       else
+          deviceSelection->resetSelectedIndex();
+    }
 }
 
 //Button map
diff --git a/blackberry-qnx/bb10/src/ButtonMap.h b/blackberry-qnx/bb10/src/ButtonMap.h
index a9f90eb9c0..5403d7ae24 100644
--- a/blackberry-qnx/bb10/src/ButtonMap.h
+++ b/blackberry-qnx/bb10/src/ButtonMap.h
@@ -3,6 +3,7 @@
 
 #include <bb/cascades/Application>
 #include <bb/cascades/ArrayDataModel>
+#include <bb/cascades/DropDown>
 
 #include <screen/screen.h>
 #include <sys/neutrino.h>
@@ -42,6 +43,7 @@ public:
    Q_INVOKABLE void mapDevice(int index, int player);
 
     ArrayDataModel *buttonDataModel;
+    DropDown *deviceSelection;
 
 private:
     screen_context_t screen_cxt;
diff --git a/blackberry-qnx/bb10/src/RetroArch-Cascades.cpp b/blackberry-qnx/bb10/src/RetroArch-Cascades.cpp
index 4db67c12bd..e57e8a68ad 100644
--- a/blackberry-qnx/bb10/src/RetroArch-Cascades.cpp
+++ b/blackberry-qnx/bb10/src/RetroArch-Cascades.cpp
@@ -98,7 +98,7 @@ RetroArch::RetroArch()
          qml->setContextProperty("ButtonMap", buttonMap);
 
          deviceSelection = mAppPane->findChild<DropDown*>("dropdown_devices");
-         //connect(deviceSelection, SIGNAL(selectedValueChanged(QVariant)), this, SLOT(onDeviceSelected(QVariant)));
+         buttonMap->deviceSelection = deviceSelection;
          findDevices();
 
          //Setup the datamodel for button mapping.
diff --git a/blackberry-qnx/frontend_qnx.h b/blackberry-qnx/frontend_qnx.h
index 13c35ba132..edb1d7c3ac 100644
--- a/blackberry-qnx/frontend_qnx.h
+++ b/blackberry-qnx/frontend_qnx.h
@@ -19,6 +19,7 @@ typedef struct {
     char device_name[64];
     int device;
     int port;
+    int index;
 
     // Current state.
     int buttons;
diff --git a/blackberry-qnx/qnx_input.c b/blackberry-qnx/qnx_input.c
index d6fbf5202f..d6f6985886 100644
--- a/blackberry-qnx/qnx_input.c
+++ b/blackberry-qnx/qnx_input.c
@@ -153,9 +153,9 @@ void discoverControllers()
       if (type == SCREEN_EVENT_GAMEPAD || type == SCREEN_EVENT_JOYSTICK || type == SCREEN_EVENT_KEYBOARD)
       {
          devices[pads_connected].handle = devices_found[i];
+         devices[pads_connected].index = pads_connected;
          loadController(&devices[pads_connected]);
 
-         pads_connected++;
          if (pads_connected == MAX_PADS)
             break;
       }
@@ -186,6 +186,7 @@ static void initController(input_device_t* controller)
     controller->analog1[0] = controller->analog1[1] = controller->analog1[2] = 0;
     controller->port = -1;
     controller->device = -1;
+    controller->index = -1;
     memset(controller->id, 0, sizeof(controller->id));
 }
 
@@ -227,9 +228,12 @@ static void qnx_input_autodetect_gamepad(input_device_t* controller)
       strlcpy(controller->device_name, "None", sizeof(controller->device_name));
    }
 
-   if (input_qnx.set_keybinds)
+   if (input_qnx.set_keybinds && (controller->device != DEVICE_NONE))
+   {
       input_qnx.set_keybinds((void*)controller, controller->device, pads_connected, 0,
             (1ULL << KEYBINDS_ACTION_SET_DEFAULT_BINDS));
+      pads_connected++;
+   }
 }
 
 static void process_keyboard_event(screen_event_t event, int type)