Skip to content

Commit 6f91066

Browse files
committed
Fix pointer input regression in 0.2.1
1 parent 734844c commit 6f91066

6 files changed

Lines changed: 31 additions & 5 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# Changelog
22

3+
## 0.2.1 — 2026-07-13
4+
5+
- Fixed a critical pointer-input regression from 0.2.0 that left custom toolbar buttons, sidebar
6+
server rows, dialog actions, and other custom controls reachable by keyboard and VoiceOver but
7+
unresponsive to physical mouse clicks.
8+
- Added a headless pointer-delivery regression test and verified the corrected toolbar, connection
9+
manager, sidebar session switching, toggles, dialogs, and native macOS menu in the running app.
10+
311
## 0.2.0 — 2026-07-13
412

513
The reliability, power-user workflow, accessibility, and universal-Mac release.

‎Cargo.lock‎

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎Cargo.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "gmacftp"
3-
version = "0.2.0"
3+
version = "0.2.1"
44
edition = "2021"
55
rust-version = "1.88"
66
description = "gmacFTP — native, lightweight FTP/FTPS/SFTP client for macOS"

‎README.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ files — quickly and safely.
1616

1717
## ⬇️ Download & install
1818

19-
**[↓ Download gmacFTP for Mac — gmacFTP-0.2.0.dmg](https://github.com/GMAC-pl/gmacftp/releases/download/v0.2.0/gmacFTP-0.2.0.dmg)** · macOS 11+, Apple Silicon and Intel
19+
**[↓ Download gmacFTP for Mac — gmacFTP-0.2.1.dmg](https://github.com/GMAC-pl/gmacftp/releases/download/v0.2.1/gmacFTP-0.2.1.dmg)** · macOS 11+, Apple Silicon and Intel
2020

2121
1. Download the `.dmg`.
2222
2. Open it and **drag gmacFTP into the Applications folder** (a shortcut is inside).
@@ -54,7 +54,7 @@ Signed with an **Apple Developer ID** and **notarized by Apple** — opens clean
5454

5555
### Download
5656

57-
**[⬇ gmacFTP-0.2.0.dmg](https://github.com/GMAC-pl/gmacftp/releases/download/v0.2.0/gmacFTP-0.2.0.dmg)** — install steps are at the top of this page.
57+
**[⬇ gmacFTP-0.2.1.dmg](https://github.com/GMAC-pl/gmacftp/releases/download/v0.2.1/gmacFTP-0.2.1.dmg)** — install steps are at the top of this page.
5858

5959
Prefer to build it yourself? See [Build](#build).
6060

@@ -204,7 +204,7 @@ która po prostu przenosi Twoje pliki — szybko i bezpiecznie.
204204

205205
### Pobranie i instalacja
206206

207-
**[⬇ Pobierz gmacFTP dla Maca — gmacFTP-0.2.0.dmg](https://github.com/GMAC-pl/gmacftp/releases/download/v0.2.0/gmacFTP-0.2.0.dmg)** · macOS 11+, Apple Silicon i Intel
207+
**[⬇ Pobierz gmacFTP dla Maca — gmacFTP-0.2.1.dmg](https://github.com/GMAC-pl/gmacftp/releases/download/v0.2.1/gmacFTP-0.2.1.dmg)** · macOS 11+, Apple Silicon i Intel
208208

209209
1. Pobierz plik `.dmg`.
210210
2. Otwórz go i **przeciągnij gmacFTP do folderu Aplikacje** (skrót jest w środku).

‎src/app.rs‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11540,6 +11540,17 @@ mod path_safety_tests {
1154011540
assert_eq!(close.accessible_role(), Some(AccessibleRole::Button));
1154111541
assert_eq!(close.accessible_enabled(), Some(true));
1154211542

11543+
// Exercise the real pointer route as well as the semantic accessibility action. Custom
11544+
// controls wrap their mouse and keyboard handling in KeyboardActionArea; a zero-sized
11545+
// inner TouchArea leaves the controls keyboard/VoiceOver accessible but ignores physical
11546+
// mouse clicks (the v0.2.0 release regression).
11547+
closed.set(false);
11548+
close.mock_single_click(slint::platform::PointerEventButton::Left);
11549+
assert!(
11550+
closed.get(),
11551+
"a physical pointer click must reach custom toolbar controls"
11552+
);
11553+
1154311554
let filter = ElementHandle::find_by_accessible_label(&ui, "Filter files in left pane")
1154411555
.next()
1154511556
.expect("the left file filter must be exposed as a text field");

‎ui/controls/actions.slint‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ import { Tokens } from "../foundation.slint";
44
// TouchArea does not participate in keyboard focus traversal. Keep pointer and keyboard activation
55
// in one reusable primitive so every custom control behaves like a native macOS control.
66
export component KeyboardActionArea {
7+
// A custom component otherwise keeps its implicit 0×0 preferred size when it is layered over
8+
// a visual parent. The accessible action would still work, but physical pointer events would
9+
// miss every control that uses this primitive.
10+
width: 100%;
11+
height: 100%;
712
in property <bool> enabled: true;
813
in property <bool> pointer-activates: true;
914
in property <string> accessible-name: "";
@@ -23,6 +28,8 @@ export component KeyboardActionArea {
2328
accessible-enabled: root.enabled;
2429
accessible-action-default => { if (root.enabled) { root.clicked(); } }
2530
touch := TouchArea {
31+
width: parent.width;
32+
height: parent.height;
2633
enabled: root.enabled;
2734
mouse-cursor: root.enabled ? pointer : not-allowed;
2835
clicked => { if (root.pointer-activates) { root.clicked(); } }

0 commit comments

Comments
 (0)