More work on Prompt Widget
This commit is contained in:
@@ -134,3 +134,153 @@
|
||||
};
|
||||
|
||||
typedef FUnixPlatformStackWalk FPlatformStackWalk;
|
||||
--- Engine/Source/Runtime/ApplicationCore/Public/Linux/LinuxApplication.h.orig 2026-05-05 21:15:20.644087179 -0400
|
||||
+++ Engine/Source/Runtime/ApplicationCore/Public/Linux/LinuxApplication.h 2026-05-05 21:15:38.654613091 -0400
|
||||
@@ -265,6 +265,12 @@
|
||||
/** The input device Id of the controller that can be used to find the matching ULocalPlayer */
|
||||
FInputDeviceId DeviceId;
|
||||
|
||||
+ /** SDL gamepad type string (e.g. "ps4", "xboxone"), used as HardwareDeviceIdentifier in FInputDeviceScope */
|
||||
+ FName GamepadType;
|
||||
+
|
||||
+ /** SDL gamepad name (human-readable device name), used as InputDeviceName in FInputDeviceScope */
|
||||
+ FName GamepadName;
|
||||
+
|
||||
/** Store axis values from events here to be handled once per frame. */
|
||||
TMap<FGamepadKeyNames::Type, float> AxisEvents;
|
||||
|
||||
--- Engine/Source/Runtime/ApplicationCore/Private/Linux/LinuxApplication.cpp.orig 2026-05-05 21:15:20.646317814 -0400
|
||||
+++ Engine/Source/Runtime/ApplicationCore/Private/Linux/LinuxApplication.cpp 2026-05-05 23:13:59.528028910 -0400
|
||||
@@ -13,6 +13,13 @@
|
||||
#include "IHapticDevice.h"
|
||||
#include "GenericPlatform/GenericPlatformInputDeviceMapper.h"
|
||||
|
||||
+namespace UE::LinuxInput
|
||||
+{
|
||||
+ static const FName InputClassName = TEXT("LinuxApplication");
|
||||
+ static const FString KBMInputHardwareName = TEXT("KBM");
|
||||
+ static const FString TouchInputHardwareName = TEXT("MobileTouch");
|
||||
+}
|
||||
+
|
||||
//
|
||||
// GameController thresholds
|
||||
//
|
||||
@@ -320,6 +327,7 @@
|
||||
{
|
||||
case SDL_EVENT_KEY_DOWN:
|
||||
{
|
||||
+ FInputDeviceScope InputScope(nullptr, UE::LinuxInput::InputClassName, IPlatformInputDeviceMapper::Get().GetDefaultInputDevice().GetId(), UE::LinuxInput::KBMInputHardwareName);
|
||||
const SDL_KeyboardEvent &KeyEvent = Event.key;
|
||||
SDL_Keycode KeySym = KeyEvent.key;
|
||||
const uint32 CharCode = CharCodeFromSDLKeySym(KeySym);
|
||||
@@ -342,6 +350,7 @@
|
||||
break;
|
||||
case SDL_EVENT_KEY_UP:
|
||||
{
|
||||
+ FInputDeviceScope InputScope(nullptr, UE::LinuxInput::InputClassName, IPlatformInputDeviceMapper::Get().GetDefaultInputDevice().GetId(), UE::LinuxInput::KBMInputHardwareName);
|
||||
const SDL_KeyboardEvent &KeyEvent = Event.key;
|
||||
const SDL_Keycode KeySym = KeyEvent.key;
|
||||
const uint32 CharCode = CharCodeFromSDLKeySym(KeySym);
|
||||
@@ -352,6 +361,7 @@
|
||||
break;
|
||||
case SDL_EVENT_TEXT_INPUT:
|
||||
{
|
||||
+ FInputDeviceScope InputScope(nullptr, UE::LinuxInput::InputClassName, IPlatformInputDeviceMapper::Get().GetDefaultInputDevice().GetId(), UE::LinuxInput::KBMInputHardwareName);
|
||||
// Slate now gets all its text from here, I hope.
|
||||
const bool bIsRepeated = false; //Event.key.repeat != 0;
|
||||
const FString TextStr(UTF8_TO_TCHAR(Event.text.text));
|
||||
@@ -363,6 +373,7 @@
|
||||
break;
|
||||
case SDL_EVENT_MOUSE_MOTION:
|
||||
{
|
||||
+ FInputDeviceScope InputScope(nullptr, UE::LinuxInput::InputClassName, IPlatformInputDeviceMapper::Get().GetDefaultInputDevice().GetId(), UE::LinuxInput::KBMInputHardwareName);
|
||||
SDL_MouseMotionEvent motionEvent = Event.motion;
|
||||
FLinuxCursor *LinuxCursor = (FLinuxCursor*)Cursor.Get();
|
||||
LinuxCursor->InvalidateCaches();
|
||||
@@ -406,6 +417,7 @@
|
||||
case SDL_EVENT_MOUSE_BUTTON_DOWN:
|
||||
case SDL_EVENT_MOUSE_BUTTON_UP:
|
||||
{
|
||||
+ FInputDeviceScope InputScope(nullptr, UE::LinuxInput::InputClassName, IPlatformInputDeviceMapper::Get().GetDefaultInputDevice().GetId(), UE::LinuxInput::KBMInputHardwareName);
|
||||
SDL_MouseButtonEvent buttonEvent = Event.button;
|
||||
|
||||
EMouseButtons::Type button;
|
||||
@@ -484,6 +496,7 @@
|
||||
break;
|
||||
case SDL_EVENT_MOUSE_WHEEL:
|
||||
{
|
||||
+ FInputDeviceScope InputScope(nullptr, UE::LinuxInput::InputClassName, IPlatformInputDeviceMapper::Get().GetDefaultInputDevice().GetId(), UE::LinuxInput::KBMInputHardwareName);
|
||||
SDL_MouseWheelEvent *WheelEvent = &Event.wheel;
|
||||
float Amount = (float)WheelEvent->y * fMouseWheelScrollAccel;
|
||||
|
||||
@@ -515,6 +528,7 @@
|
||||
|
||||
SDLControllerState &ControllerState = ControllerStates[caxisEvent.which];
|
||||
FPlatformUserId UserId = IPlatformInputDeviceMapper::Get().GetUserForInputDevice(ControllerState.DeviceId);
|
||||
+ FInputDeviceScope InputScope(nullptr, ControllerState.GamepadName, ControllerState.DeviceId.GetId(), ControllerState.GamepadType.ToString());
|
||||
|
||||
switch (caxisEvent.axis)
|
||||
{
|
||||
@@ -740,15 +754,17 @@
|
||||
|
||||
if (Button != FGamepadKeyNames::Invalid)
|
||||
{
|
||||
- FPlatformUserId UserId = IPlatformInputDeviceMapper::Get().GetUserForInputDevice(ControllerStates[cbuttonEvent.which].DeviceId);
|
||||
+ SDLControllerState& ButtonControllerState = ControllerStates[cbuttonEvent.which];
|
||||
+ FPlatformUserId UserId = IPlatformInputDeviceMapper::Get().GetUserForInputDevice(ButtonControllerState.DeviceId);
|
||||
+ FInputDeviceScope InputScope(nullptr, ButtonControllerState.GamepadName, ButtonControllerState.DeviceId.GetId(), ButtonControllerState.GamepadType.ToString());
|
||||
|
||||
if(cbuttonEvent.type == SDL_EVENT_GAMEPAD_BUTTON_DOWN)
|
||||
{
|
||||
- MessageHandler->OnControllerButtonPressed(Button, UserId, ControllerStates[cbuttonEvent.which].DeviceId, false);
|
||||
+ MessageHandler->OnControllerButtonPressed(Button, UserId, ButtonControllerState.DeviceId, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
- MessageHandler->OnControllerButtonReleased(Button, UserId, ControllerStates[cbuttonEvent.which].DeviceId, false);
|
||||
+ MessageHandler->OnControllerButtonReleased(Button, UserId, ButtonControllerState.DeviceId, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1018,6 +1034,7 @@
|
||||
|
||||
case SDL_EVENT_FINGER_DOWN:
|
||||
{
|
||||
+ FInputDeviceScope InputScope(nullptr, UE::LinuxInput::InputClassName, IPlatformInputDeviceMapper::Get().GetDefaultInputDevice().GetId(), UE::LinuxInput::TouchInputHardwareName);
|
||||
UE_LOG(LogLinuxWindow, Verbose, TEXT("Finger %llu is down at (%f, %f)"), Event.tfinger.fingerID, Event.tfinger.x, Event.tfinger.y);
|
||||
|
||||
// touch events can have no window associated with them, in that case ignore (with a warning)
|
||||
@@ -1053,6 +1070,7 @@
|
||||
break;
|
||||
case SDL_EVENT_FINGER_UP:
|
||||
{
|
||||
+ FInputDeviceScope InputScope(nullptr, UE::LinuxInput::InputClassName, IPlatformInputDeviceMapper::Get().GetDefaultInputDevice().GetId(), UE::LinuxInput::TouchInputHardwareName);
|
||||
UE_LOG(LogLinuxWindow, Verbose, TEXT("Finger %llu is up at (%f, %f)"), Event.tfinger.fingerID, Event.tfinger.x, Event.tfinger.y);
|
||||
|
||||
// touch events can have no window associated with them, in that case ignore (with a warning)
|
||||
@@ -1087,6 +1105,7 @@
|
||||
break;
|
||||
case SDL_EVENT_FINGER_MOTION:
|
||||
{
|
||||
+ FInputDeviceScope InputScope(nullptr, UE::LinuxInput::InputClassName, IPlatformInputDeviceMapper::Get().GetDefaultInputDevice().GetId(), UE::LinuxInput::TouchInputHardwareName);
|
||||
// touch events can have no window associated with them, in that case ignore (with a warning)
|
||||
if (LIKELY(!bWindowlessEvent))
|
||||
{
|
||||
@@ -1196,6 +1215,7 @@
|
||||
IPlatformInputDeviceMapper& Mapper = IPlatformInputDeviceMapper::Get();
|
||||
for(auto ControllerIt = ControllerStates.CreateIterator(); ControllerIt; ++ControllerIt)
|
||||
{
|
||||
+ FInputDeviceScope InputScope(nullptr, ControllerIt.Value().GamepadName, ControllerIt.Value().DeviceId.GetId(), ControllerIt.Value().GamepadType.ToString());
|
||||
for(auto Event = ControllerIt.Value().AxisEvents.CreateConstIterator(); Event; ++Event)
|
||||
{
|
||||
FPlatformUserId UserId = Mapper.GetUserForInputDevice(ControllerIt.Value().DeviceId);
|
||||
@@ -2075,6 +2095,9 @@
|
||||
UE_LOG(LogLinux, Verbose, TEXT("Adding controller %i '%s'"), FirstUnusedIndex, UTF8_TO_TCHAR(SDL_GetGamepadName(Controller)));
|
||||
auto& ControllerState = ControllerStates.Add(Id);
|
||||
ControllerState.Controller = Controller;
|
||||
+ ControllerState.GamepadName = FName(UTF8_TO_TCHAR(SDL_GetGamepadName(Controller)));
|
||||
+ const char* GamepadTypeStr = SDL_GetGamepadStringForType(SDL_GetGamepadType(Controller));
|
||||
+ ControllerState.GamepadType = FName(GamepadTypeStr ? UTF8_TO_TCHAR(GamepadTypeStr) : TEXT("unknown"));
|
||||
|
||||
FPlatformUserId UserId = FPlatformUserId::CreateFromInternalId(FirstUnusedIndex);
|
||||
DeviceMapper.RemapControllerIdToPlatformUserAndDevice(FirstUnusedIndex, UserId, ControllerState.DeviceId);
|
||||
|
||||
Reference in New Issue
Block a user