Skip to content

Back the data widgets with native NSTableView / GtkListView #87

Description

@nicolas-maman

Split out of #8, which asked for data widgets and is closed because they exist. This is the one clause of it that nothing implements.

What remains

Every data widget is composed from stacks and grids. Neither native collection view is referenced anywhere in the backends:

macOS  NSTableView refs:            0
gtk4   GtkListView / GtkColumnView: 0

vlist virtualizes by rendering a bounded, recycling window of rows over a stack. That is real virtualization (1000 items realize 10 widgets, asserted in tests/vlist_demo/spec_vlist_demo.ae) and it is enough for the scaling problem #8 described. It is not the same thing as a native collection view.

Why it is still worth doing

Native backing brings platform behaviour that a composed implementation has to reimplement one piece at a time:

  • row reuse handled by the platform rather than by our window arithmetic
  • accessibility integration as a real table rather than roles we set by hand
  • keyboard navigation and type-select
  • platform-native selection, focus ring and scrolling feel

Two of these have since been implemented by hand on the composed widgets: listbox keyboard navigation (Up/Down/Home/End) and table / columnheader / row accessibility roles across all three backends. That is worth knowing before starting, because it lowers the urgency and it means a native rewrite must preserve behaviour that now has specs asserting it.

Scope

Backing vlist and table with NSTableView on AppKit and GtkListView / GtkColumnView on GTK4, with a composed fallback on win32, while keeping the existing DSL surface and every current spec green. That last constraint is the hard part and the reason this is its own issue rather than a footnote on #8.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions