Skip to content

Sending mouse event to navigation bar buttons causes program to hang until program is refocused #1269

Open

Description

@ahoyaharr

Is there an existing issue for this?

  • I searched the existing issues and did not find anything similar.

Current Behavior

When sending a mouse event to any of the buttons on the navigation bar, the program will hang until the program is refocused (either by alt-tabbing or clicking back into the program).

While the program is hanging, it continues to buffer controller inputs, the inputs are rapidly played back when the program recovers.

Expected Behavior

The input on the navigation bar should be executed (or possibly it should fail silently).

Steps To Reproduce

  1. Configure controller to send mouse button inputs
  2. Attempt to send input to minimize, maximize, or close buttons on navigation bar
  3. The input will be consumed and the program will hang until it is refocused
Image

Environment

Program Version 3.5.1
Compiled from packaging: GitHub Portable Windows Release
Built Against SDL 2.30.6
Running With SDL 2.30.6
Using Qt 5.15.2
Using Event Handler: SendInput
Host OS: windows Version: 10 Architecture: x86_64

Anything else?

The input is correctly handles the input when it is passed in other places, e.g., through the taskbar:

Image

Certain inputs (seems mostly to happen with the analogue sticks and the triggers, maybe related to inputs with a floating point value attached?) will cause the red text that normally indicates controller events are being handled to become stuck on, though this is not consistent:
Image

While the program is hanging, the navigation buttons are shaded as if the mouse button is being held down:

Image Image

Activity

  1. ahoyaharr commented on Jan 14, 2026

    @ahoyaharr
    Author

    Relevant lines from logs:

    [00:09:27.658] 🐞DEBUG	Processing JoyButton::joyEvent for: LS Click: Mouse LB SDL index: 7 className: JoyButton (file /src/joybuttontypes/joybutton.cpp:179)
    [00:09:27.659] 🐞DEBUG	"Processing release for button #1 - LS Click"
    [00:09:27.659] 🐞DEBUG	There is end of slotiter. Set currentCycle and previousCycle as null pointers
    [00:09:27.659] 🐞DEBUG	Processing JoyButton::joyEvent for: DPad - Button Left: LEFT SDL index: 8 className: JoyDPadButton (file /src/joybuttontypes/joybutton.cpp:179)
    [00:09:27.659] 🐞DEBUG	"Processing press for button #1 - DPad - Button Left"
    [00:09:27.659] 🐞DEBUG	Check now simple slots
    [00:09:27.659] 🐞DEBUG	deviceCode in getSlotString() is:  37  for mode:  0
    [00:09:27.659] 🐞DEBUG	1 : It's a JoyKeyboard with code:  37  and name:  "LEFT"
    [00:09:27.659] 🐞DEBUG	deviceCode in getSlotString() is:  37  for mode:  0
    [00:09:27.659] 🐞DEBUG	There has been assigned a lastActiveKey  "LEFT"
    [00:09:27.659] 🐞DEBUG	Processing JoyButton::joyEvent for: DPad - Button Down: DOWN SDL index: 4 className: JoyDPadButton (file /src/joybuttontypes/joybutton.cpp:179)
    [00:09:27.659] 🐞DEBUG	"Processing press for button #1 - DPad - Button Down"
    [00:09:27.659] 🐞DEBUG	Check now simple slots
    [00:09:27.659] 🐞DEBUG	deviceCode in getSlotString() is:  40  for mode:  0
    [00:09:27.659] 🐞DEBUG	1 : It's a JoyKeyboard with code:  40  and name:  "DOWN"
    [00:09:27.659] 🐞DEBUG	deviceCode in getSlotString() is:  40  for mode:  0
    [00:09:27.659] 🐞DEBUG	There has been assigned a lastActiveKey  "DOWN"
    [00:09:27.659] 🐞DEBUG	Processing JoyButton::joyEvent for: DPad - Button Left: LEFT SDL index: 8 className: JoyDPadButton (file /src/joybuttontypes/joybutton.cpp:179)
    [00:09:27.659] 🐞DEBUG	"Processing release for button #1 - DPad - Button Left"
    [00:09:27.659] 🐞DEBUG	There is end of slotiter. Set currentCycle and previousCycle as null pointers
    [00:09:27.659] 🐞DEBUG	Processing JoyButton::joyEvent for: DPad - Button Right: RIGHT SDL index: 2 className: JoyDPadButton (file /src/joybuttontypes/joybutton.cpp:179)
    [00:09:27.660] 🐞DEBUG	"Processing press for button #1 - DPad - Button Right"
    [00:09:27.660] 🐞DEBUG	Check now simple slots
    [00:09:27.660] 🐞DEBUG	deviceCode in getSlotString() is:  39  for mode:  0
    [00:09:27.660] 🐞DEBUG	1 : It's a JoyKeyboard with code:  39  and name:  "RIGHT"
    [00:09:27.660] 🐞DEBUG	deviceCode in getSlotString() is:  39  for mode:  0
    [00:09:27.660] 🐞DEBUG	There has been assigned a lastActiveKey  "RIGHT"
    [00:09:27.660] 🐞DEBUG	Processing JoyButton::joyEvent for: DPad - Button Up: UP SDL index: 1 className: JoyDPadButton (file /src/joybuttontypes/joybutton.cpp:179)
    [00:09:27.660] 🐞DEBUG	"Processing press for button #1 - DPad - Button Up"
    [00:09:27.660] 🐞DEBUG	Check now simple slots
    [00:09:27.660] 🐞DEBUG	deviceCode in getSlotString() is:  38  for mode:  0
    [00:09:27.660] 🐞DEBUG	1 : It's a JoyKeyboard with code:  38  and name:  "UP"
    [00:09:27.660] 🐞DEBUG	deviceCode in getSlotString() is:  38  for mode:  0
    [00:09:27.660] 🐞DEBUG	There has been assigned a lastActiveKey  "UP"
    [00:09:27.660] 🐞DEBUG	Processing JoyButton::joyEvent for: DPad - Button Down: DOWN SDL index: 4 className: JoyDPadButton (file /src/joybuttontypes/joybutton.cpp:179)
    [00:09:27.660] 🐞DEBUG	"Processing release for button #1 - DPad - Button Down"
    [00:09:27.660] 🐞DEBUG	There is end of slotiter. Set currentCycle and previousCycle as null pointers
    [00:09:27.660] 🐞DEBUG	Processing JoyButton::joyEvent for: DPad - Button Right: RIGHT SDL index: 2 className: JoyDPadButton (file /src/joybuttontypes/joybutton.cpp:179)
    [00:09:27.660] 🐞DEBUG	"Processing release for button #1 - DPad - Button Right"
    [00:09:27.661] 🐞DEBUG	There is end of slotiter. Set currentCycle and previousCycle as null pointers
    [00:09:27.661] 🐞DEBUG	Processing JoyButton::joyEvent for: DPad - Button Left: LEFT SDL index: 8 className: JoyDPadButton (file /src/joybuttontypes/joybutton.cpp:179)
    [00:09:27.661] 🐞DEBUG	"Processing press for button #1 - DPad - Button Left"
    [00:09:27.661] 🐞DEBUG	Check now simple slots
    [00:09:27.661] 🐞DEBUG	deviceCode in getSlotString() is:  37  for mode:  0
    [00:09:27.661] 🐞DEBUG	1 : It's a JoyKeyboard with code:  37  and name:  "LEFT"
    [00:09:27.661] 🐞DEBUG	deviceCode in getSlotString() is:  37  for mode:  0
    

    Note that there was a several second real-time delay these two events:

    [00:09:27.659] 🐞DEBUG	"Processing release for button #1 - LS Click"
    <...>
    [00:09:27.659] 🐞DEBUG	"Processing release for button #1 - DPad - Button Left"
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions