diff --git a/src/SFML/Window/OSX/JoystickImpl.cpp b/src/SFML/Window/OSX/JoystickImpl.cpp index c35161fc..4160465e 100644 --- a/src/SFML/Window/OSX/JoystickImpl.cpp +++ b/src/SFML/Window/OSX/JoystickImpl.cpp @@ -30,6 +30,14 @@ #include #include +// Translation unit namespace +namespace { + //////////////////////////////////////////////////////////// + bool JoystickButtonSortPredicate(IOHIDElementRef b1, IOHIDElementRef b2) + { + return IOHIDElementGetUsage(b1) < IOHIDElementGetUsage(b2); + } +} namespace sf { @@ -218,6 +226,10 @@ bool JoystickImpl::open(unsigned int index) } } + // Ensure that the buttons will be indexed in the same order as their + // HID Usage (assigned by manufacturer and/or a driver). + std::sort(m_buttons.begin(), m_buttons.end(), JoystickButtonSortPredicate); + // Note : Joy::AxisPovX/Y are not supported (yet). // Maybe kIOHIDElementTypeInput_Axis is the corresponding type but I can't test.