Skip to content

gmoccapy: modal startup "Important change(s)" dialog blocks headless / non-interactive startup #4072

@grandixximo

Description

@grandixximo

gmoccapy's _startup_message() (src/emc/usr_intf/gmoccapy/gmoccapy.py:544)
pops a MODAL "Important change(s)" release-notes dialog during __init__ via
dialogs.show_user_message() -> Gtk.Dialog.run(), whenever the preference
hide_startup_messsage is less than the number of release-note messages.

The preference file is created at runtime with hide_startup_messsage = 0,
so on a fresh profile the dialog always shows. Because Gtk.Dialog.run() spins
its own nested main loop, the gmoccapy constructor never returns until a user
clicks the dialog. Under a headless / non-interactive launch (xvfb, CI, the
ui-smoke tests in PR #4054) nobody dismisses it, so gmoccapy hangs at startup.

Reproduce:

  • Remove or reset the config's gmoccapy.pref (so hide_startup_messsage = 0).
  • Launch the gmoccapy sim under xvfb.
  • py-spy on the gmoccapy process shows it stuck in:
    run (gi/overrides/Gtk.py)
    show_user_message (gmoccapy/dialogs.py)
    _startup_message (gmoccapy.py:560)
    init (gmoccapy.py:506)

Impact:

  • Any automated / headless launch of gmoccapy with a fresh profile blocks.
  • The ui-smoke gmoccapy test must pre-seed or auto-dismiss this dialog.

Possible fixes (for discussion):

  • Skip the startup dialog when running non-interactively (e.g. detect no
    interactive display, an env var, or a CLI flag).
  • Make the dialog non-modal / auto-timeout.
  • Show the notice via the in-app notification area instead of a blocking dialog.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions