You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
v1.34: lint hygiene so the v1.X tag and the Lint workflow agree
v1.33's release workflow shipped the .deb successfully, but the Lint
workflow on that exact tag failed on a handful of pre-existing markdown
issues — same shape as the v1.25 → v1.26 re-tag from May 19. This commit
gathers all of them so the v1.34 tag is the first one in the v1.33 line
that is green on every Lint job.
`docs/overlay-references.md`: 17× MD032 lists missing surrounding blank
lines (every `<topic>:` introduction immediately followed by `- item`).
Fixed in-place with a blank line between each colon-terminated intro and
the list that follows.
`openspec/changes/flashpaste-overlayd-phase1-2026-05-20/CHANGE.md`:
MD022/MD025 — `## §P proposal` ran directly into `# flashpaste-overlayd
Phase 1 …` which is an H1 nested inside an H2 and also a second H1 in
the document; demoted to H3 and added the missing blank line. MD012 —
two consecutive blank lines collapsed to one. MD058 / MD022 — `## §S
delta`, `## §T tasks`, and `## §B bugs` each ran into their tables
with no blank line; added one and gave the tables explicit leading and
trailing pipes so they're also MD055-clean.
`openspec/plans/flashpaste-overlayd-phase1-2026-05-20/tasks.md`: 8×
MD055 — the four data rows were `0|available|…|-|-` without leading or
trailing pipes (the header row already had them, so the file was
inconsistent). Re-added the pipes and surrounding spaces on each row.
`README.md:7`: MD001 — the tagline was an `### h3` immediately under the
`# FlashPaste` h1, skipping h2. Promoted to `## h2` which also matches
the document outline (every other top-level section in the README is
already `##`).
`tests/click-through.md:14`: MD032 — `Source for detection:` ran
directly into a `- …` list. Added the missing blank line.
`CHANGELOG.md` link references: the markdown link-check job followed
`[Unreleased]: …compare/v1.32...HEAD` and `[1.32]: …compare/v1.26...v1.32`
to GitHub and both returned 404 because `v1.32` was bumped in the
workspace but never tagged (mentioned in v1.32's notes). Updated
`[Unreleased]` to `compare/v1.33...HEAD`, added `[1.34]:
compare/v1.33...v1.34` and `[1.33]: compare/v1.27...v1.33` (v1.27 is the
last actually-tagged release before the v1.33 line), and dropped the
`[1.32]` reference entirely so the markdown heading no longer resolves
to a dead URL.
No behaviour change vs v1.33; the daemon, dispatcher, capture-clip
helper, and packaging contents are byte-identical to the v1.33 build
once the version literals are normalised.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+9-2Lines changed: 9 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,6 +6,12 @@ Release-tag policy: every `vX.Y` commit on `main` must be tagged and have a matc
6
6
7
7
## [Unreleased]
8
8
9
+
## [1.34] - 2026-05-21
10
+
11
+
### Fixed
12
+
13
+
- CI hygiene rolled into a tagged release so the `v1.34` tag and the `Lint` workflow on the same commit agree. v1.33's release workflow shipped the .deb successfully, but the Lint workflow on that exact tag failed on pre-existing issues: `docs/overlay-references.md` MD032 (17 lists missing surrounding blank lines), `openspec/changes/flashpaste-overlayd-phase1-2026-05-20/CHANGE.md` MD022 / MD025 / MD012 / MD058 (proposal H1 nested inside an H2, doubled blank line, three tables without surrounding blanks), `openspec/plans/flashpaste-overlayd-phase1-2026-05-20/tasks.md` MD055 (table rows without leading / trailing pipes), `README.md:7` MD001 (h3 directly under h1, skipping h2 — promoted to h2), `tests/click-through.md:14` MD032 (list directly under a colon-terminated paragraph), and two dead links in `CHANGELOG.md` pointing at the never-tagged `v1.32` (now pointing at the existing `v1.33` / `v1.27` references). No behaviour change vs v1.33.
14
+
9
15
## [1.33] - 2026-05-21
10
16
11
17
### Added
@@ -181,8 +187,9 @@ Release-tag policy: every `vX.Y` commit on `main` must be tagged and have a matc
181
187
182
188
Initial commit: sub-120 ms bash hot path for image-paste into GNOME Wayland TUIs.
-`wayland-client`, `wayland-protocols`, and `wayland-protocols-wlr` provide protocol bindings, including `wlr-layer-shell` and `zwlr_screencopy_manager_v1`.
29
32
- Rendering dependencies include `cairo-rs`, `pango`, and `pangocairo`.
30
33
31
34
GNOME handling:
35
+
32
36
- README marks GNOME as partial support: portal fallback and windowed overlay.
33
37
- Startup tries to bind layer-shell first. If it is unavailable, it logs desktop/session context and falls back to `xdg-shell`.
34
38
- The fallback creates an undecorated xdg window, sets app id/title, requests fullscreen or maximized state, and uses xdg activation when available.
35
39
- Capture/zoom/freeze paths can fall back to xdg-desktop-portal when compositor-native screencopy is unavailable.
36
40
- Shortcut setup has explicit GNOME custom-shortcut support and separate portal shortcut behavior for non-GNOME environments.
37
41
38
42
Rendering:
43
+
39
44
- CPU-rendered Cairo into Wayland shared-memory buffers.
40
45
- The surface code keeps a `SlotPool`, creates ARGB buffers, wraps buffer memory with `cairo::ImageSurface::create_for_data_unsafe`, draws with Cairo/PangoCairo, flushes, attaches the Wayland buffer, sends damage regions, and commits.
41
46
- It uses frame callbacks for vsync and tracks dirty/damage regions to reduce redraw work.
42
47
- No OpenGL rendering path was evident in the studied files.
43
48
44
49
Pattern to adopt:
50
+
45
51
- Keep a first-class capability split: layer-shell surface when available, xdg-shell fallback when not, and user-visible feature gates for capabilities that only work with layer-shell or screencopy.
46
52
47
53
Pattern to avoid:
54
+
48
55
- Avoid importing a whole annotation-app architecture into flashpaste. Wayscriber is broad: daemon, tray, boards, toolbar layers, session persistence, capture, zoom, and multiple UI systems. For flashpaste, keep the overlay path narrow and do not make the paste/screenshot hot path depend on a large in-process drawing app model.
49
56
50
57
## bk138/gromit-mpx
@@ -56,27 +63,32 @@ callbacks, config, coordlist_ops, drawing, input, main headers and C files
56
63
```
57
64
58
65
Layer-shell crates/libraries:
66
+
59
67
- None. Gromit-MPX is not a native layer-shell implementation.
60
68
- It is a C/GTK3/X11 application. `CMakeLists.txt` depends on `gtk+-3.0`, `xi`, `x11`, appindicator/ayatana-appindicator, and `liblz4`.
61
69
- Wayland support is via XWayland, not `wlr-layer-shell`.
62
70
63
71
GNOME handling:
72
+
64
73
- README says it works on Wayland sessions using XWayland and requires XWayland if it cannot open a display.
65
74
-`main.c` explicitly restricts GDK to the X11 backend with `gdk_set_allowed_backends("x11")`.
66
75
- Under Wayland, hotkey grabbing does not work reliably through XWayland, so `input.c` detects GNOME and writes/removes GNOME custom shortcuts via GSettings. Those shortcuts invoke `gromit-mpx --toggle`, `--clear`, `--visibility`, `--quit`, `--undo`, and `--redo`.
67
76
- Input pass-through vs active drawing is handled by changing the GTK input shape region on the transparent XWayland window.
68
77
69
78
Rendering:
79
+
70
80
- Cairo on GTK3/X11.
71
81
- Uses a fullscreen `GTK_WINDOW_POPUP`, app-paintable transparent window, Cairo image backbuffers, and GTK draw callbacks.
72
82
- Composited desktops use alpha/compositing. If no compositor is present, it falls back to legacy shape-extension behavior, which the README calls potentially slow.
73
83
- Undo state is compressed with LZ4.
74
84
- No layer-shell or OpenGL rendering path was evident in the studied files.
75
85
76
86
Pattern to adopt:
87
+
77
88
- Keep external commands as the control surface for a resident process. A simple `--toggle`/`--clear`/`--quit` style control API maps well to global shortcuts and avoids requiring UI focus.
78
89
79
90
Pattern to avoid:
91
+
80
92
- Do not use XWayland as the primary overlay strategy for flashpaste. It works as a compatibility path, but it brings compositor-specific shortcut hacks, input-shape edge cases, and a non-native Wayland model.
- C library for GTK4 applications, exposed through `gtk4-layer-shell-0` pkg-config and GObject introspection.
93
106
- Depends on GTK4, `wayland-client`, and `wayland-protocols`.
94
107
- Uses generated `wlr-layer-shell-unstable-v1` and `ext-session-lock-v1` client protocol bindings.
95
108
- README points Rust users to external safe Rust bindings, but this repo itself is C.
96
109
97
110
GNOME handling:
111
+
98
112
- README is explicit: layer-shell is not supported on GNOME-on-Wayland or X11.
99
113
-`gtk_layer_init_for_window()` returns with warnings when not on Wayland, when the libwayland shim is unavailable, or when the compositor does not expose layer-shell.
100
114
- There is no GNOME overlay fallback. Consumers must provide their own xdg/portal/non-overlay behavior if GNOME matters.
101
115
102
116
Rendering:
117
+
103
118
- The library does not implement an app rendering pipeline. It turns GTK windows into layer-shell surfaces and lets GTK4 render normal widgets through its own renderer.
104
119
- The source contains no custom Cairo/OpenGL rendering path in the studied top-level `src` files.
105
120
- Internally it hooks xdg surface creation, maps it to a layer surface, forwards configure events, manages anchors/margins/exclusive zones/keyboard mode, and exposes GTK-friendly APIs.
106
121
107
122
Pattern to adopt:
123
+
108
124
- Isolate protocol-role plumbing behind a small API. The caller should say "make this window/surface a layer surface" and configure anchors, layer, namespace, and keyboard mode without spreading protocol details through app logic.
109
125
110
126
Pattern to avoid:
127
+
111
128
- Do not rely on gtk4-layer-shell alone if GNOME support is a requirement. It correctly treats missing layer-shell as unsupported, but flashpaste needs an explicit fallback path rather than a warning-only failure.
0 commit comments