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 <noreply@anthropic.com>
This commit is contained in:
mixeme
2026-06-25 22:50:28 +03:00
parent 8cfa16a2bd
commit 882fcfe65d
5 changed files with 43 additions and 9 deletions
+25
View File
@@ -2,6 +2,31 @@
All notable GoSentry changes are recorded in this file. 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 ## 0.11.1 - 2026-06-25
**Settings tab refinements: even spacing, full labels, and a smarter Save button.** **Settings tab refinements: even spacing, full labels, and a smarter Save button.**
+4 -6
View File
@@ -48,7 +48,7 @@ sudo apt install golang gcc libgl1-mesa-dev xorg-dev
## Build ## Build
Windows: ### Windows
```powershell ```powershell
# Builds dist\windows\gosentry-<version>-windows-amd64.exe. The script changes # Builds dist\windows\gosentry-<version>-windows-amd64.exe. The script changes
@@ -67,7 +67,7 @@ The binary is written to:
dist\windows\gosentry-0.9.0-windows-amd64.exe dist\windows\gosentry-0.9.0-windows-amd64.exe
``` ```
Linux: ### Linux
```bash ```bash
# Make the helper executable once, then build a linux/amd64 Fyne binary. # 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 dist/linux/gosentry-0.9.0-linux-amd64
``` ```
Linux using Docker: ### Linux using Docker
```bash ```bash
# Builds the Linux binary inside Docker using the versioned image tag # 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 dist/linux/gosentry-0.9.0-linux-amd64
``` ```
Release build from Linux: ### Release build from Linux
```bash ```bash
# Interactively choose Linux amd64, Linux arm64, Windows amd64, or all artifacts # 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. - [`fyne.io/fyne/v2`](https://fyne.io/) for the native GUI.
- `github.com/robfig/cron/v3` for cron schedule parsing. - `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. 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 - Go toolchain: https://go.googlesource.com/go
- Fyne: https://github.com/fyne-io/fyne - Fyne: https://github.com/fyne-io/fyne
- robfig/cron: https://github.com/robfig/cron - 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: To list every direct and indirect Go module used by the current checkout:
+1 -1
View File
@@ -3,4 +3,4 @@ package app
// Version is the application version shown in the GUI and used by build // 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 // 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. // can override it with Go ldflags when CI tags a build.
var Version = "0.11.1" var Version = "0.11.2"
+5 -2
View File
@@ -11,7 +11,7 @@ import (
fyneapp "fyne.io/fyne/v2/app" 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 // Run is the application entry point. It owns the process lifecycle — single
// instance arbitration, Fyne app + window construction, tray wiring, and the // instance arbitration, Fyne app + window construction, tray wiring, and the
@@ -48,7 +48,10 @@ func Run(startInTray bool) {
w := a.NewWindow("GoSentry " + app.Version) w := a.NewWindow("GoSentry " + app.Version)
configureSystemTray(a, w) 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) content, recordStartup := newMainView(w)
w.SetContent(content) w.SetContent(content)
serveSingleInstance(instanceListener, w) serveSingleInstance(instanceListener, w)
+8
View File
@@ -33,7 +33,14 @@ func configureSystemTray(a fyne.App, w fyne.Window) {
// Russian system) because it only recognizes an existing quit by matching the // Russian system) because it only recognizes an existing quit by matching the
// localized label — which our literal "Quit" does not. Setting IsQuit makes // localized label — which our literal "Quit" does not. Setting IsQuit makes
// Fyne reuse this item instead of adding a duplicate, regardless of locale. // 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() { quit := fyne.NewMenuItem("Quit", func() {
saveWindowSize()
a.Quit() a.Quit()
}) })
quit.IsQuit = true 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 // Closing hides the window instead of quitting because scheduler tools are
// expected to keep working in the background. The explicit Quit tray item // expected to keep working in the background. The explicit Quit tray item
// remains the way to stop the process. // remains the way to stop the process.
saveWindowSize()
w.Hide() w.Hide()
}) })
} }