From 882fcfe65d725dc248c878ab4bcf6aecd522c7a9 Mon Sep 17 00:00:00 2001 From: mixeme Date: Thu, 25 Jun 2026 22:50:28 +0300 Subject: [PATCH] chore: release 0.11.2 with window persistence, appID update, and doc fixes - Persist window size on quit/close and restore it on next launch - Update appID from ru.mixdep.gosentry.desktop to ru.mixeme.gosentry.desktop - Use markdown headers for Build sections in DEVELOPMENT.md - Remove stale go.yaml.in/yaml/v4 dependency from DEVELOPMENT.md Co-Authored-By: Claude Sonnet 4.6 --- docs/CHANGELOG.md | 25 +++++++++++++++++++++++++ docs/DEVELOPMENT.md | 10 ++++------ src/app/version.go | 2 +- src/ui/run.go | 7 +++++-- src/ui/tray.go | 8 ++++++++ 5 files changed, 43 insertions(+), 9 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 846b7c0..d1cb189 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -2,6 +2,31 @@ All notable GoSentry changes are recorded in this file. +## 0.11.2 - 2026-06-25 + +**Window state persistence, History sort fix, clearer scheduler toggle, and an +appID update.** + +**Application:** +- The window size (width and height) is now persisted in preferences and + restored on next launch. When the user closes the window (via Quit menu or + window close button), the current dimensions are saved and will be applied + when the application starts again. Defaults to 1024×660 if no saved size exists. +- Updated appID from `ru.mixdep.gosentry.desktop` to `ru.mixeme.gosentry.desktop` + for consistency with the new domain name. + +**History tab:** +- Fixed the Time column sort toggle, which stopped working after Fyne 2.7.4 began + rejecting header-cell selections. The plain header label is replaced with a + custom tappable header widget that handles the click directly. +- The sort direction is now shown with ▲/▼ glyphs instead of the "asc"/"desc" + text. + +**Jobs list:** +- Renamed the global scheduler toggle from "Pause all"/"Resume all" to + "Disable auto"/"Enable auto", and swapped the stop icon for a pause icon, to + make clear that it only stops automatic scheduled runs. + ## 0.11.1 - 2026-06-25 **Settings tab refinements: even spacing, full labels, and a smarter Save button.** diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index db2bfb2..400658b 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -48,7 +48,7 @@ sudo apt install golang gcc libgl1-mesa-dev xorg-dev ## Build -Windows: +### Windows ```powershell # Builds dist\windows\gosentry--windows-amd64.exe. The script changes @@ -67,7 +67,7 @@ The binary is written to: dist\windows\gosentry-0.9.0-windows-amd64.exe ``` -Linux: +### Linux ```bash # Make the helper executable once, then build a linux/amd64 Fyne binary. @@ -81,7 +81,7 @@ The binary is written to: dist/linux/gosentry-0.9.0-linux-amd64 ``` -Linux using Docker: +### Linux using Docker ```bash # Builds the Linux binary inside Docker using the versioned image tag @@ -97,7 +97,7 @@ The binary is copied to: dist/linux/gosentry-0.9.0-linux-amd64 ``` -Release build from Linux: +### Release build from Linux ```bash # Interactively choose Linux amd64, Linux arm64, Windows amd64, or all artifacts @@ -170,7 +170,6 @@ GoSentry keeps the direct dependency list intentionally small: - [`fyne.io/fyne/v2`](https://fyne.io/) for the native GUI. - `github.com/robfig/cron/v3` for cron schedule parsing. -- [`go.yaml.in/yaml/v4`](https://github.com/yaml/go-yaml) for one-time import of legacy YAML config files. The remaining entries in `go.mod` are indirect dependencies pulled by Fyne and the Go module resolver. @@ -179,7 +178,6 @@ Source repositories for mirroring: - Go toolchain: https://go.googlesource.com/go - Fyne: https://github.com/fyne-io/fyne - robfig/cron: https://github.com/robfig/cron -- yaml/go-yaml: https://github.com/yaml/go-yaml To list every direct and indirect Go module used by the current checkout: diff --git a/src/app/version.go b/src/app/version.go index 5acd92d..3f57501 100644 --- a/src/app/version.go +++ b/src/app/version.go @@ -3,4 +3,4 @@ package app // Version is the application version shown in the GUI and used by build // scripts in artifact names. It is a var rather than a const so release builds // can override it with Go ldflags when CI tags a build. -var Version = "0.11.1" +var Version = "0.11.2" diff --git a/src/ui/run.go b/src/ui/run.go index 33113e0..bb30b7c 100644 --- a/src/ui/run.go +++ b/src/ui/run.go @@ -11,7 +11,7 @@ import ( fyneapp "fyne.io/fyne/v2/app" ) -const appID = "ru.mixdep.gosentry.desktop" +const appID = "ru.mixeme.gosentry.desktop" // Run is the application entry point. It owns the process lifecycle — single // instance arbitration, Fyne app + window construction, tray wiring, and the @@ -48,7 +48,10 @@ func Run(startInTray bool) { w := a.NewWindow("GoSentry " + app.Version) configureSystemTray(a, w) - w.Resize(fyne.NewSize(1024, 660)) + prefs := a.Preferences() + winW := float32(prefs.FloatWithFallback("window.width", 1024)) + winH := float32(prefs.FloatWithFallback("window.height", 660)) + w.Resize(fyne.NewSize(winW, winH)) content, recordStartup := newMainView(w) w.SetContent(content) serveSingleInstance(instanceListener, w) diff --git a/src/ui/tray.go b/src/ui/tray.go index c3dec8e..dd877bd 100644 --- a/src/ui/tray.go +++ b/src/ui/tray.go @@ -33,7 +33,14 @@ func configureSystemTray(a fyne.App, w fyne.Window) { // Russian system) because it only recognizes an existing quit by matching the // localized label — which our literal "Quit" does not. Setting IsQuit makes // Fyne reuse this item instead of adding a duplicate, regardless of locale. + saveWindowSize := func() { + size := w.Canvas().Size() + prefs := a.Preferences() + prefs.SetFloat("window.width", float64(size.Width)) + prefs.SetFloat("window.height", float64(size.Height)) + } quit := fyne.NewMenuItem("Quit", func() { + saveWindowSize() a.Quit() }) quit.IsQuit = true @@ -51,6 +58,7 @@ func configureSystemTray(a fyne.App, w fyne.Window) { // Closing hides the window instead of quitting because scheduler tools are // expected to keep working in the background. The explicit Quit tray item // remains the way to stop the process. + saveWindowSize() w.Hide() }) }