Skip to content

v0.15.1

Latest

Choose a tag to compare

@github-actions github-actions released this 04 Oct 23:47
ab0d75a

Added

Widgets

  • Esperanto (eo) translations for all 313 framework messages, available
    through teksilo_widgets::framework_locales().
  • NotificationArchiveModel::push_update, which archives an in-place update
    of a notice still on screen, beside push, which archives a notice raised.
    UPDATE_HISTORY_LIMIT is how many update records a row keeps.

Changed

Widgets

  • NotificationArchiveModel::push with the dedup_id of an archived row now
    takes the entry as that notice raised again: the row moves to the top,
    takes the entry's time and read state, and records the occurrence even
    when nothing it says has changed. An app that pushed to the archive itself
    to update a notice still on screen calls push_update instead, which
    updates the row where it is.

Fixed

Core

  • A drag preview's resources outlived the drag. When a drag ended, the
    preview widget was removed from the tree without the teardown every other
    removal goes through, so whatever it had registered (animations, animated
    indicators, bindings, subscriptions, shortcuts) stayed registered until
    the window closed. The preview is now torn down like any other widget.
  • A widget changed while out of view could come back showing its old
    content.
    A widget marked for repaint while it was clipped out of a
    scroll area or under a fully transparent ancestor (or itself fully
    transparent) lost the mark without repainting, and if it came back into
    view without moving it replayed the paint it had before the change. Such
    a widget now drops its stale paint and repaints when it is next visible;
    a widget that did not change keeps its cached paint as before.
  • An accordion opened in a window without focus stayed closed. The
    animation scheduler paused every animation of a window that was unfocused
    or occluded, one-shot tweens included, so a Collapse opened there (by an
    assistive technology, an automation client, or the app itself in a window
    behind another) held its body at no height while its header already said
    it was expanded, in a scrolling dialog as anywhere else. Only looping
    animations are paused now; a tween runs to its end, as it already did for
    a widget off screen. A loop started while its window had no focus also
    starts when the window gets it, rather than later by however long the
    window had been without focus before the loop existed.

Render

  • Clipping was misplaced at fractional scales and lost around blurs. A
    clip inside a translated scope (a panned scene, a moved transform
    wrapper) landed at the wrong place whenever the display scale was not 1,
    because the translation was scaled twice. Content drawn after a blur
    inside a clipped region (a scroll area, for instance) was not clipped at
    all, since the blur restarted drawing without restoring the clip. Both
    now clip where the content is, and a clip opened outside a blur no
    longer reaches the blur's own offscreen drawing.
  • Blur used the wrong kernel width. Every pass of every blur in a frame
    read the kernel offset written for the frame's last blur pass, because
    the per-pass parameters were rewritten into one buffer that the GPU reads
    only once the whole frame runs. A blur therefore came out softer or
    sharper than its radius asked for, and changed when another blur of a
    different size appeared on screen. Each pass now reads its own
    parameters.

Widgets

  • An image or raster icon could show another image's pixels.
    ImageWidget::new and IconWidget::from_raster / from_animated named
    their texture after the icon's memory address, so an icon created where a
    dropped one had lived reused the old texture. They now name it after the
    icon's identity, which a clone shares. An IconWidget shown in both
    Tintable and FullColor mode also shared one texture between the two
    and drew both from whichever registered first; each mode now has its own.
    As before, these textures last as long as the window: an icon decoded
    afresh for every widget gets a new texture each time.
  • The notification log kept the first notice's actions for a notice
    updated in place.
    An archived row merged from a later notice with the
    same id took only its title and body, so a progress notice offering Cancel
    that became a result offering Open now and See report stayed a Cancel row,
    under its first severity, and the log never offered the report. The row
    now takes the latest notice's actions, replay names included, its
    severity, priority and audience; an update offering no actions leaves the
    row with none, as it leaves the live notice. The row keeps its id, its
    place in the log and the time the notice was raised, and its group and
    source unless the update names them. Updating a row nobody had read no
    longer adds to the unread count, which grew by one per update and stayed
    up under a bell scoped to a window or an audience.
  • A notice raised again was filed under the first one. A toast raised
    with the id of an archived notice that had already left the screen merged
    into that row like an update of a live toast: the row stayed where it
    was, dated when the first notice was raised, below every notice raised
    since. An import run on Friday under the same id as Monday's showed its
    result in the log under Monday. The row now comes back to the top, unread,
    dated when the notice came back, with a record of the occurrence even when
    it says the same as before.
  • A progress notice grew its archive row without bound. Every in-place
    update appended a record to the row, written to the archive file, so a
    notice reporting each step of a long import gathered thousands, and an id
    reused for every run of an operation gathered them from every run. An
    update that repeats the row exactly now records nothing, and a row keeps
    only its 20 most recent records.

Full Changelog: v0.15.0...v0.15.1