Skip to content

No support for Intuition system Requesters (struct Requester) — CLICK/TREE can't see or act on them #52

Description

@sidick

Problem

Confirmed via a full source grep (Requester/IDCMP_REQ/AutoRequest/
EasyRequest/SysReq — zero matches anywhere in server/,
intuition-model/, amiinspect/, host/, manifest/, docs/,
userdocs/): AmiPilot has no support at all for Intuition's
Requester mechanism (struct Requester, intuition/intuition.h) —
the modal boxes behind Request()/AutoRequest()/EasyRequest(),
covering both an application's own "Are you sure?" dialogs and
system-wide ones (disk-swap "Please insert volume X", DOS error
requesters, Software Failure/Guru).

This is architecturally distinct from every locator this project
already supports: a Requester's content (its OK/Cancel-style buttons,
its body text) lives in its own ReqGadget list, reached via
window->FirstRequest (window-attached form) — not
window->FirstGadget, which is the only chain
intuition-model/src/walk.c's WalkGadgetList() ever iterates. So
even a window that TREE already finds successfully will show nothing
useful once a Requester opens over it, and CLICK/GETTEXT have no
locator that can reach a Requester's gadgets by any means (GA_ID,
ROLE=, or otherwise) since the walker never sees them.

AutoRequest()'s own autodoc (BuildSysRequest(), which it's built
on) confirms a system-wide requester (no owning window — the
common case for disk-swap/DOS-error/Guru requesters) can come back as
a genuine struct Window of its own, separate from any application
window. That window would currently be findable by AmipFindWindow()
(it walks every screen's window list) — but its actual box/text/gadgets
are still only reachable through that window's FirstRequest chain,
same gap.

Practical impact

  • A test driving real, unmodified software (the stock-app-conformance
    goal this project already holds itself to) has no way to detect or
    dismiss an unexpected requester — a disk-swap prompt, a "file
    already exists, overwrite?" dialog, a crash/Guru — via CLICK. The
    automation session likely just stalls waiting on a WAITFOR/TREE
    that never sees what's actually blocking the target window.
  • Reported by @sidick during hardware-adjacent testing setup (a real
    Picasso96 3.6 install on the amipilot hard drive, uaegfx enabled)
    as a real gap worth tracking, with manual click-through as the
    interim workaround.

Proposed design (sketch, not yet scoped in detail)

  • Discovery: extend intuition-model's walk to also report a
    window's FirstRequest chain (or the presence of one) — a
    Requester's own LeftEdge/TopEdge/Width/Height/ReqGadget
    list is real, walkable structure, the same shape as a window's own
    gadget list, just reached differently. TREE's output would need a
    way to represent "this window currently has an active requester"
    distinctly from its normal gadget tree.
  • System-wide requesters: since BuildSysRequest() can produce a
    standalone window with no application owner, AmipFindWindow()
    already reaching it is necessary but not sufficient — its content
    still needs the same FirstRequest walk as the window-attached
    case.
  • Action: CLICK's existing ROLE=/INDEX=/GA_ID locators
    would need a way to target a Requester gadget specifically (a new
    locator prefix, e.g. REQ=?), since GA_ID on a Requester's
    ReqGadget list could collide with the owning window's own
    FirstGadget IDs.
  • Detection without acting: a WAITFOR-style condition
    ("a requester appeared on window X") would let a test at least
    assert on / react to an unexpected requester rather than only
    silently timing out, even before full requester-gadget targeting
    lands.

Why now

Filed per @sidick's request while setting up real hardware-adjacent
testing (Picasso96 3.6 + uaegfx installed on the amipilot test hard
drive) — noted as a real, currently-unaddressed gap to track rather
than something to silently work around; manual click-through remains
the interim path until this is designed and scoped properly.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions