libretro / libretro/RetroArch

[Feature Request] <hotkey for input overlays / conditional overlay switching>

Open
#18,178 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

feature request
Dominant language
C
Stars
14.1k
Forks
2.2k
Avg merge
7h 35m
Merged PRs (30d)
51

Description

Feature Request: Conditional Overlay Profiles (controller-aware overlay switching)

Summary

RetroArch currently supports Hide Overlay When Controller Is Connected, which removes the touchscreen overlay entirely if a gamepad is present. This is great for full-controller play, but it prevents hybrid setups.

Ask: Allow users to define two overlay presets and switch between them automatically based on input state:

  • Touch Only: full virtual gamepad overlay
  • Controller Connected: minimal overlay (e.g., Menu, Coin, Rewind, FF) that stays available even with a physical controller

This enables controller-first play while retaining a few touch actions that aren’t on the pad (e.g., an on-screen coin button for arcade cores).


Motivation / Problem

  • With Hide Overlay When Controller Is Connected = ON, the overlay disappears entirely; players lose quick access to menu/utility actions that aren’t mapped on their controller.
  • With it OFF, the full touch overlay clutters the screen while using a controller.
  • There’s no built-in way to auto-select a minimal overlay when a controller is connected and auto-select a full overlay when it isn’t.

Example Use Cases

  • Arcade (MAME/FBA): Use a physical controller for gameplay, keep a tiny overlay for Coin, Menu, Pause, FF.
  • Shaders/Quick Menu access: Minimal overlay gives a tap target to open Quick Menu without needing controller combos.
  • Handheld on the go: No controller detected → full touch overlay auto-appears.

Proposed Behavior

Introduce conditional overlay profiles that respond to hotplug state:

  • Touch Only state (no controller detected):
    • Load a Full Touch Overlay preset (user-selectable).
  • Controller Connected state (any recognized gamepad):
    • Load a Minimal Overlay preset (user-selectable) instead of hiding the overlay entirely.

Optional:

  • Hysteresis / delay to prevent rapid toggling during connect/disconnect flaps (e.g., 500–1500ms).
  • Manual override hotkeys to force a profile for the current session.
  • Per-core/game overrides (use existing Overrides flow).

UI / UX Proposal

Settings → On-Screen Display → On-Screen Overlay

  • Overlay Behavior (new)
    • Static (use selected preset) (current behavior)
    • Hide when controller is connected (current behavior)
    • Conditional profiles (recommended)
      • Touch-only preset: (file picker → .cfg)
      • Controller-connected preset: (file picker → .cfg)
      • Transition delay (ms): (numeric; default 800ms)

Quick Menu → Controls / Overlay

  • Show the currently active profile (Touch vs Controller).
  • Provide “Switch profile” action (temporary override until next hotplug event).


Alternatives Considered

  • Manually bind hotkeys to Overlay Next/Previous and cycle to a minimal overlay when a controller is connected.
    Limitations: Requires manual switching per session and doesn’t track hotplug state; error-prone UX.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing the existing “Hide Overlay When Controller Is Connected” behavior, overlay preset selection, and controller hotplug handling. Review how the proposed settings and Quick Menu changes would fit those paths; done means reliably selecting the touch-only or controller-connected preset, with the requested delay and overrides if included.

Written by the indexing model from the issue text.

Assessment

Tech stack
c
Domain
design, frontend
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.