mirror of
https://github.com/edu4rdshl/Strata.git
synced 2026-07-17 23:24:46 +00:00
Add a Theme preference (Automatic / Light / Dark). Automatic follows the
system org.gnome.desktop.interface color-scheme; the dark theme is
unchanged. Light styling lives in light.css, every rule scoped under a
.strata-theme-light class the panel toggles on its root box, loaded into the
St theme context by the extension. St's CSS engine has no custom properties,
so this specificity-based scoped override is how the palette is switched
without generating a stylesheet at runtime; switching is a single class
toggle off the ingest/render hot paths.
Also in this change:
- fix: the keyboard shortcut now hides the panel when it is already open.
The binding lacked Shell.ActionMode.POPUP, so while the panel's modal grab
was active the second press was swallowed and toggle() never ran.
- fix: the search placeholder ("Search...") is now legible in the light
theme; it previously inherited a light-on-dark Shell color.
- pack: bundle light.css via --extra-source (gnome-extensions pack only
auto-includes stylesheet.css), so packaged installs ship the light theme.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
4.8 KiB
4.8 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
[Unreleased]
Added
- Light/dark theme support. A new Theme preference (Automatic / Light /
Dark) controls the panel palette; Automatic follows the system
org.gnome.desktop.interface color-scheme. The dark theme is unchanged. Light styling lives inlight.css, scoped under a.strata-theme-lightclass toggled on the panel root box, loaded into the St theme context by the extension. Switching is a single class toggle with no runtime cost on the ingest/render paths.
Fixed
- The keyboard shortcut now hides the panel when it is already open. The
binding was registered without
Shell.ActionMode.POPUP, so while the panel's modal grab was active the second press was swallowed andtoggle()never ran. - The search placeholder ("Search...") is now legible in the light theme; it previously inherited a light-on-dark Shell color.
Packaging
make packnow bundleslight.css(--extra-source); onlystylesheet.cssis auto-included bygnome-extensions pack.
[0.4.0] - 2026-05-26
Performance
GetHistory/SearchHistorynow truncatecontent_textto a preview (substr, ~200 chars) in SQL instead of returning the full payload. A page of large text items previously serialized up to megabytes of JSON over D-Bus and parsed it on the GJS main loop, only to render a 140-char snippet. Full content is still served on demand byGetItemContent.
[0.3.0] - 2026-05-25
Fixed
_notifyDaemonMissingnow uses the correct ESMMessageTrayimport; the missing-binary desktop notification was previously silently swallowed by acatchblock due to aReferenceErroron the legacyimports.ui.*path.clearItems()no longer double-destroys widgets:destroy_all_children()on the item list is sufficient; the preceding per-widgetdestroy()loop was redundant and could trigger warnings.- Daemon now fails fast with a clear error message when the XDG data directory cannot be determined, instead of silently placing the database in the current working directory.
Performance
make_thumbnailreturn type simplified toResult<Vec<u8>>; the previously returned base64 string was never used at the call site.prune()now collects IDs with a singleORDER BYsubquery, then deletes withDELETE WHERE id IN (...), eliminating a redundant second query.get_raw_itemno longer fetchesthumbnail_blob(up to ~40 KB per row) when only text/binary content is needed for paste-back.- Unnecessary clones of
WriteRequestfields eliminated inwrite_to_clipboard. - Hover hit-testing in the panel replaced: the previous O(n) per-widget
bounds-check loop on every mouse-move is now O(tree-depth) via
event.get_source()+ parent walk, letting Clutter's own hit-test do the work. SetFocusedAppD-Bus call removed. The daemon stored the value but never read it; app exclusion runs entirely in the extension beforeSubmitItemis called. Eliminates one IPC round-trip on every window focus change.GetItemContentnow returns raw bytes (ay) instead of a base64-encoded string (s). Eliminates base64 encode in the daemon and decode in GJS on every paste. Thebase64crate dependency has been removed entirely.
[0.2.0] - 2026-05-25
Fixed
- MIME priority: plain text now preferred over rich text.
When an application (code editors, web browsers, etc.) advertises both a
plain-text and a rich-text (
text/html,text/rtf) variant on the clipboard, Strata now captures the plain-text variant. Previously,text/htmlranked abovetext/plain, causing syntax-highlighted HTML markup to be stored instead of the actual source text when copying from code editors. Rich-text types are still captured when no plain-text alternative is offered. Fix applied to both the Rust daemon (pick_mime) and the GNOME Shell extension (_pickMime) to keep them in sync.
[0.1.0] - 2026-05-24
Added
- Initial release.
- Rust daemon (
strata-daemon) with SQLite/FTS5 storage, Wayland clipboard monitor, D-Bus interface (org.gnome.Strata), and image thumbnail support. - GNOME Shell extension (
strata@edu4rdshl.dev) with popup panel, lazy-loaded pagination, full-text search, image thumbnails, and paste-back. - Preferences window (Adwaita) for history size, size limits, keyboard shortcut, panel position/width, and excluded-app list.
- Daemon lifecycle management: extension detects an existing systemd-managed
daemon and falls back to spawning from
PATH; shows a desktop notification when the binary is not found. contrib/systemd/strata-daemon.servicefor distribution packaging.Makefilewithinstall-daemon,install, andpacktargets.