Skip to content

Build stage 3: switch on tap — raise-window dispatch #127

Description

@jonocodes

Part of #116

Scope

Wire the RaiseWindowMessage protocol message, extension D-Bus RaiseWindow method, daemon-side dispatch, and client-side row-tap sequence per the Stage 3 spec resolution.

Touch points

  1. daemon/deckd/protocol.py: RaiseWindowMessage(PydanticBaseModel) with type: Literal["raise_window"] and window_id: str. Add to ClientMessage discriminated union.

  2. client/src/protocol.ts: ClientRaiseWindow { type: "raise_window"; window_id: string }. Add to ClientMessage union.

  3. packaging/gnome-shell/deckd-focus@local/extension.js: maintain Map<window_id, Meta.Window> (populate in ListWindows(), prune on Meta.Window::unmanaging). Add RaiseWindow(s) → b to the org.deckd.Focus interface XML and implement it as Main.activateWindow(map.get(window_id)). Return false when window_id missing from map. Update the version number in metadata.json.

  4. daemon/deckd/platform.py: add async def raise_window(self, window_id: str) → None to PlatformBackend (default raises UnimplementedCapability("raise_window")). GnomeShellFocusBackend: override to call gdbus org.deckd.Focus.RaiseWindow (fire-and-forget, log on false return). Add "raise_window" to capabilities().

  5. daemon/deckd/server.py: in the WS message dispatch, route RaiseWindowMessageawait backend.raise_window(msg.window_id). On false from gdbus return or any exception: emit raise_failed event on the diagnostic EventMessage stream (reference: Live diagnostic event stream and correlation IDs #73).

  6. client/src/App.tsx: in RunningWindowsList's onRowTap handler (~line 636-647), replace the placeholder console.log with: send { type: "raise_window", window_id } then send { type: "clear_view" }.

Verification

  • Unit/round-trip tests for RaiseWindowMessage JSON serialization (daemon + client)
  • Extension: test that RaiseWindow returns true for a known window, false for a retired id
  • Manual: tap a row in the running-windows list on GNOME 50 Wayland; the app raises and the view closes

Metadata

Metadata

Assignees

No one assigned

    Labels

    ready-for-agentFully specified, ready for an AFK agent

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions