# Changelog for gtk-sni-tray
## Unreleased
## 0.2.1.4 - 2026-07-15
- Require `status-notifier-item >= 0.3.2.16` so tray consumers collapse
duplicate Ayatana items whose implementations generate a new random
identity for every application instance.
## 0.2.1.3 - 2026-07-02
- Require `status-notifier-item >= 0.3.2.15` so tray consumers pick up the
startup timeouts that prevent a single unresponsive tray item from hanging
the SNI host (and any tray built from it) indefinitely.
## 0.2.1.2 - 2026-05-13
- Clean up compiler warnings in the standalone executable and tray modules.
- Require refreshed companion packages:
`dbus-menu >= 0.1.3.3`, `gtk-scaling-image >= 0.1.0.1`,
`gtk-strut >= 0.1.4.1`, and `status-notifier-item >= 0.3.2.14`.
## 0.2.1.1
- Require `status-notifier-item >= 0.3.2.13` so tray consumers pick up the
host-side suppression of redundant no-op property update churn.
## 0.2.1.0
- Move prioritized tray controls into the tray menu instead of separate inline
buttons.
- Auto-fit tray icons and defer prioritized-collapsible tray visibility until
tray state is ready.
- Fix tray flicker and async menu regressions in prioritized/collapsible tray
updates.
- Prevent duplicate tray contexts during async initialization and eliminate
duplicate tray icons on startup.
- Preserve tray item identities across refreshes, refresh prioritized trays in
place, drop stale rebuilds before swapping, and avoid routine tray churn on
normal updates.
- Require `status-notifier-item >= 0.3.2.11` for the logical item
deduplication fixes used by the tray stack.
- Extract generic pixbuf scaling and auto-fill image helpers into the new
`gtk-scaling-image` package.
## 0.2.0.0
- Breaking: remove `buildTrayWithPriority`, `buildTrayWithPixbufTransform`,
and `buildTrayWithPriorityAndPixbufTransform`.
- Consolidate tray configuration into `TrayParams` with new fields:
`trayPriorityConfig`, `trayPixbufTransform`, and `trayEventHooks`.
- Add click interception hooks via `TrayEventHooks`/`TrayClickHook` so callers
can run custom per-item behavior and choose default/override/consume.
## 0.1.15.0
- Fix: respect the user's GTK icon theme when an SNI item provides IconThemePath
(and handle IconThemePath values that point inside a theme directory).
- Add icon preference support (choose themed icons vs pixmaps when both are
provided) and expose it in the standalone executable with `--icon-preference`.
- Add optional icon recoloring in the standalone executable with `--icon-recolor`.
- Nix: improve flake dev shell environment so `cabal new-run` can find icon
themes and gdk-pixbuf loaders.
- Development: add `scripts/fmt` and `scripts/fmt-check` for ormolu formatting.
## 0.1.14.2
- Relax executable `optparse-applicative` upper bound to `< 0.20` for GHC 9.12 snapshots.
- Bump `dbus-menu` lower bound to `0.1.3.2`.
## 0.1.14.1
- Update the Nix flake lock for `status-notifier-item` to pick up a host-side
deduplication fix for items that re-register under different bus names after
watcher restart.
## 0.1.14.0
- Add tray priority matching with a new `TrayPriorityConfig`.
- Add `buildTrayWithPriority` while keeping `buildTray` behavior unchanged.
- Add matcher helpers and combinators so matching can target service name/path,
menu path, item id/category/status, icon name/title, tooltip text, and
`itemIsMenu`.
## 0.1.13.2
- Bump `dbus-menu` lower bound to 0.1.3.1.
## 0.1.13.1
- Bump `dbus-menu` lower bound to 0.1.3 for menu-level click dispatch.
## 0.1.13.0
- Use extracted `dbus-menu` library instead of inline DBusMenu implementation.
- Reduce default overlay icon scale from 60% to 40%.
- Fix: clamp scaled pixbuf dimensions to >= 1 to prevent GDK assertion failure.
- Bump `dbus-menu` lower bound to 0.1.1.
## 0.1.12.0
- Add `trayCenterIcons` field to `TrayParams` and `--center-icons` CLI flag to
center tray icons within the bar.
- Anchor LibDBusMenu popup to the icon image widget instead of the EventBox for
more accurate popup positioning.
## 0.1.11.3
- Fix menu popup positioning: use `menuPopupAtPointer` with the actual button
press event (via `getCurrentEvent`) so the menu appears at the click location
instead of at an incorrect widget-relative position.
## 0.1.11.2
- Add upper bounds to all dependencies per PVP.
- Remove trailing zeros from dependency upper bounds.
## 0.1.11.1
- Fix menu popups on Wayland/layer-shell: use `menuPopupAtWidget` instead of
`menuPopupAtPointer` which fails with "no trigger event" when the GdkEvent's
window is not a valid GDK surface.
- Fix menu item clicks: defer menu widget destruction via `idleAdd` with
`PRIORITY_LOW` so GTK's `activate` signal fires before the widget is destroyed.
- Fix DBus Event variant wrapping: correctly double-wrap the data parameter
to produce wire type `v` instead of `i`.
- Send Event DBus calls on a forked thread to avoid blocking the GTK main loop.
- Default menu backend to `HaskellDBusMenu` (pure Haskell implementation).
- Deferred popup for `LibDBusMenu` backend to avoid assertion failures from
showing the menu before the C library finishes loading the layout.
## 0.1.11.0
- Restore `libdbusmenu` (`gi-dbusmenugtk3`) as the default menu backend.
- Add runtime-configurable menu backend selection: `LibDBusMenu` (default) or
`HaskellDBusMenu` via `trayMenuBackend` in `TrayParams` and `--menu-backend`
CLI flag.
## 0.1.10.2
- Fix menu popups not appearing: restore `widgetShowAll` so menu items are
visible, and use `menuPopupAtPointer` for reliable positioning on both X11
and Wayland.
- Fix all `-Wall` warnings across library and executable.
## 0.1.10.1
- Fix menu popup positioning on Wayland: use `menuAttachToWidget` instead of
premature `widgetShowAll` so that `menuPopupAtWidget` can properly anchor the
popup surface to the tray icon.
## 0.1.10.0
- Replace `libdbusmenu` usage (`gi-dbusmenugtk3`) with a pure Haskell
implementation of the `com.canonical.dbusmenu` protocol.
- Add CSS style classes/names to tray menu widgets to make them themeable.
## 0.1.9.1
- Fix type error with DM.Menu and Gtk.menuPopupAtWidget by adding explicit
cast to Gtk.Menu. This fixes build failures with newer GI bindings where the
type hierarchy is not automatically recognized.
## 0.1.9.0
- Use the `gi-gtk3` and `gi-gdk3` build dependencies, which have been
renamed from `gi-gtk` and `gi-gdk`.