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 #include +#include #include #include @@ -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_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)