1. 26 Jul, 2020 26 commits
    • Emmanuele Bassi's avatar
      a11y: Add relations API · 1124f250
      Emmanuele Bassi authored
      Since we split relation attributes from the generic properties, we need
      to add API for setting and retrieving their values.
      1124f250
    • Emmanuele Bassi's avatar
      a11y: Simplify GtkAccessibleValue · d37511f7
      Emmanuele Bassi authored
      Reduce the amount of subclassing, by handling collection of fundamental
      types directly from the generic code paths. We now handle boolean,
      tristate, integer, number, string, and relation values in the generic
      code path; if an attribute supports the "undefined" value, we return the
      undefined value singleton.
      d37511f7
    • Emmanuele Bassi's avatar
      a11y: Resync with the ARIA spec · 55d29d08
      Emmanuele Bassi authored
      Drop roles and properties that were deprecated in WAI-ARIA 1.1, and add
      new roles and properties defined in WAI-ARIA 1.2 and later.
      
      We also split the relationship properties into their own enumeration, so
      we can keep the GtkAccessibleProperty type more compact.
      55d29d08
    • Emmanuele Bassi's avatar
      Remove GTK_ACCESSIBLE_STATE_NONE · ae446e8f
      Emmanuele Bassi authored
      It's pointless, we can use an explicit value of `-1` everywhere.
      Additionally, it complicates all code that uses the state enumeration as
      an array index, since now we need to guard against a negative offset.
      ae446e8f
    • Emmanuele Bassi's avatar
      a11y: Add binding-friendly accessible property setter · c56e9b20
      Emmanuele Bassi authored
      Matching the one for the accessible state.
      c56e9b20
    • Emmanuele Bassi's avatar
      a11y: Collect reference value · 93978544
      Emmanuele Bassi authored
      Some properties that take a reference to an accessible haven't been
      updated to collect the correct type.
      93978544
    • Emmanuele Bassi's avatar
      1b612cd5
    • Emmanuele Bassi's avatar
      a11y: Update GtkSeparator · 3a1d69ca
      Emmanuele Bassi authored
      Add an accessible role, and update the orientation state.
      3a1d69ca
    • Emmanuele Bassi's avatar
      a11y: Set the role for GtkScale · 9af74629
      Emmanuele Bassi authored
      9af74629
    • Emmanuele Bassi's avatar
      59d85d42
    • Emmanuele Bassi's avatar
      2c75ba55
    • Emmanuele Bassi's avatar
      a11y: Add roles to various widgets · 58628f9a
      Emmanuele Bassi authored
      58628f9a
    • Emmanuele Bassi's avatar
      Add accessible properties to GtkAccessible · da1ce01a
      Emmanuele Bassi authored
      We propagate the accessible state and properties to each ATContext in
      the same virtual function, since they are functionally similar.
      da1ce01a
    • Emmanuele Bassi's avatar
      Add GtkAccessiblePropertySet · 65495622
      Emmanuele Bassi authored
      Like GtkAccessibleStateSet, the PropertySet is a set for accessible
      properties.
      65495622
    • Emmanuele Bassi's avatar
      Plumb all the GtkAccessibleProperty values into GtkAccessibleValue · 382fa013
      Emmanuele Bassi authored
      Similarly to how we deal with GtkAccessibleState.
      382fa013
    • Emmanuele Bassi's avatar
      Allow setting the accessible role at construction · 572861be
      Emmanuele Bassi authored
      Some widgets have different accessible roles depending on some
      parameter, so we cannot set the role at class init time. For those
      widgets, we add an "accessible-role" property to GtkAccessible, and we
      allow setting it (only) at construction time.
      572861be
    • Emmanuele Bassi's avatar
      Update the accessible state on widget visibility changes · 3ea069a8
      Emmanuele Bassi authored
      The GTK_ACCESSIBLE_STATE_HIDDEN has the opposite meaning of the
      GtkWidget:visible property.
      3ea069a8
    • Emmanuele Bassi's avatar
      Have GtkWidget implement GtkAccessible · 25f6da5e
      Emmanuele Bassi authored
      Each widget type has an accessible role associated to its class, as
      roles cannot change during the life time of a widget instance.
      
      Each widget is also responsible for creating an ATContext, to proxy
      state changes to the underlying accessibility infrastructure.
      25f6da5e
    • Emmanuele Bassi's avatar
      Plug GtkATContext into GtkAccessible · 566f75af
      Emmanuele Bassi authored
      An Accessible implementation must create an ATContext object. UI
      elements are supposed to interact with the GtkAccessible API, but we
      expose GtkATContext to allow patterns like delegation.
      566f75af
    • Emmanuele Bassi's avatar
      Add GtkATContext · a382dfd3
      Emmanuele Bassi authored
      The ATContext type is meant to be used as the base class for
      implementations of the assistive technology API—the actual mechanism
      needed to communicate to components like the screen reader, or any other
      AT.
      
      Every time the widget state changes, the ATContext is meant to broadcast
      the state change; and every time the AT queries the state of a UI
      element, the ATContext is meant to provide that information.
      
      We also have a "test" ATContext implementation, which is meant to be
      used to write tests to verify that changes are propagated without
      requiring a whole desktop session.
      a382dfd3
    • Emmanuele Bassi's avatar
      Add GtkAccessibleStateSet · 823ee583
      Emmanuele Bassi authored
      Since states can be set or unset, we need a container type that has all
      the possible states, and a bitmask that tells us which ones are set.
      823ee583
    • Emmanuele Bassi's avatar
      Add GtkAccessibleValue · 55120a25
      Emmanuele Bassi authored
      All accessible properties and states may have one of the following
      types:
      
       - true/false
       - true/false/undefined
       - true/false/mixed/undefined
       - reference (to another UI element)
       - reference list
       - integer
       - number (real numerical value)
       - string
       - token (one of a limited set of allowed values)
       - token list
      
      See: https://www.w3.org/WAI/PF/aria/states_and_properties#propcharacteristic_value
      
      The GtkAccessibleValue is a simple reference counted type that can be
      "subclassed" to implement each value type.
      
      This initial commit adds GtkAccessibleValue and the basic subclasses for
      plain boolean, tristate (true/false/undefined), and token types,
      including statically allocated values that can be shared instead of
      allocated.
      55120a25
    • Emmanuele Bassi's avatar
      Introduce GtkAccessible · 14faec3c
      Emmanuele Bassi authored
      GtkAccessible is an interface for accessible UI elements.
      
      Currently, it doesn't do much except exist as a type; in the future, it
      will be the entry point for all accessible state in GTK.
      14faec3c
    • Emmanuele Bassi's avatar
      a11y: Add the supported accessibility roles · 82fe6fbc
      Emmanuele Bassi authored
      The list of roles is taken from the WAI-ARIA 1.2 specification:
      
        https://w3c.github.io/aria/
      
      Some of these roles do not make entirely sense from a GTK application
      perspective, but we can remove them before finalizing the API.
      82fe6fbc
    • Emmanuele Bassi's avatar
      Remove ATK · c63087a5
      Emmanuele Bassi authored
      To build a better world sometimes means having to tear the old one down.
              -- Alexander Pierce, "Captain America: The Winter Soldier"
      
      ATK served us well for nearly 20 years, but the world has changed, and
      GTK has changed with it. Now ATK is mostly a hindrance towards improving
      the accessibility stack:
      
       - it maps to a very specific implementation, AT-SPI, which is Linux and
         Unix specific
       - it requires implementing the same functionality in three different
         layers of the stack: AT-SPI, ATK, and GTK
       - only GTK uses it; every other Linux and Unix toolkit and application
         talks to AT-SPI directly, including assistive technologies
      
      Sadly, we cannot incrementally port GTK to a new accessibility stack;
      since ATK insulates us entirely from the underlying implementation, we
      cannot replace it piecemeal. Instead, we're going to remove everything
      and then incrementally build on a clean slate:
      
       - add an "accessible" interface, implemented by GTK objects directly,
         which describe the accessible role and state changes for every UI
         element
       - add an "assistive technology context" to proxy a native accessibility
         API, and assign it to every widget
       - implement the AT context depending on the platform
      
      For more information, see: #2833
      c63087a5
    • Benjamin Otte's avatar
      Add GtkBoolFilter · 2f27d292
      Benjamin Otte authored
      Takes a boolean GtkExpression (like a boolean object property) to run a
      filter with.
      2f27d292
  2. 25 Jul, 2020 6 commits
  3. 24 Jul, 2020 8 commits