Skip to content

Add chromeoptionsexclude: drop individual default Chromium flags - #67

Merged
superhac merged 1 commit into
superhac:masterfrom
MizterB:chromeoptionsexclude
Jul 21, 2026
Merged

Add chromeoptionsexclude: drop individual default Chromium flags#67
superhac merged 1 commit into
superhac:masterfrom
MizterB:chromeoptionsexclude

Conversation

@MizterB

@MizterB MizterB commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

Chromium behaves a little differently on every distro, compositor, and GPU stack, and the config currently gives users two levers for dealing with that: chromeoptions can add flags, and disabledefaultchromeoptions throws out the whole default set — including the backgrounding/throttling disables most setups want to keep. This adds the missing third lever: chromeoptionsexclude, a per-flag exclusion list, so a user can turn off a single default that misbehaves in their environment without giving up the rest.

What sent me here: on sway (wlroots), the default --kiosk flag re-asserts fullscreen around table launch; a fullscreen FE window occludes VPX's windows on that screen, Wayland compositors stop sending frame callbacks to occluded surfaces, and VPX's render loop blocks waiting on them — total render freeze with the ROM still running. That render-loop behavior looks like a VPX bug and I'll report it to vpinball separately, but excluding --kiosk removes the trigger — and since sway tiles the windows to fill each screen anyway, the result looks identical to kiosk mode. chromeoptionsexclude = --kiosk has my cab (Debian 13, sway 1.10, three screens, portrait playfield) running clean.

The change:

  • New [Settings] chromeoptionsexclude key, parsed the same way as chromeoptions (space/newline/semicolon separated). Matching is on the flag name, so excluding --disable-features drops that default regardless of its =value.
  • Applied in get_builtin_chromium_options(), threaded through launch_window() like the existing options.
  • ManagerUI: the section is now titled "Chrome Options" — "Additional Chrome Options" first, then a "Disabled Default Options" card: the existing disabledefaultchromeoptions as a "Disable All" checkbox, plus the new per-flag box, greyed out when Disable All is on. The effective-options preview reflects exclusions and additions live.

No impact on existing behavior: the key defaults to empty, the built-in flag list and the per-OS handling already in the code are untouched, and nothing changes for anyone who doesn't set it.

Happy to adjust the key name or split off the UI changes if you'd rather take the knob alone.

…flags

The built-in flag list can only be extended (chromeoptions) or replaced
wholesale (disabledefaultchromeoptions). This adds a per-flag exclusion
knob so a single default can be dropped without forking the whole list --
for environments where one default misbehaves (e.g. --kiosk fullscreen
re-assertion on wlroots compositors, which can occlude VPX's windows and
stall its renderer).

- chromeoptionsexclude ini key (same parsing as chromeoptions), applied in
  get_builtin_chromium_options; default empty = behavior unchanged
- ManagerUI: Chrome Options section groups Additional / Disabled Default
  Options (Disable All + per-flag box, coupled); effective-options preview
  now reflects exclusions and additions live
@superhac
superhac merged commit eb8f61a into superhac:master Jul 21, 2026
6 checks passed
@superhac

Copy link
Copy Markdown
Owner

Looks good. I will get it built into a release. Thanks!

@MizterB
MizterB deleted the chromeoptionsexclude branch July 23, 2026 20:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants