fix: Donate button (Start tab gate + web window.open)
- Add DONATE to the Start-tab command allowlist; it was blocked there with "No drawing open" while REPORT/CHANGELOG/ABOUT were allowed, so the Donate button did nothing on the welcome screen. - Implement sys::open_url on wasm via web_sys window.open(_blank) — it was a no-op stub, so Donate, Release Notes and Send Feedback opened nothing on the web. The click is a user gesture, so the pop-up blocker allows it. Native + web build. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
3dd1276b6a
commit
93d136c5db
4 changed files with 12 additions and 6 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
|
@ -39,6 +39,7 @@ dependencies = [
|
||||||
"truck-shapeops",
|
"truck-shapeops",
|
||||||
"ttf-parser",
|
"ttf-parser",
|
||||||
"ureq",
|
"ureq",
|
||||||
|
"web-sys",
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.61.2",
|
||||||
"winresource",
|
"winresource",
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -82,6 +82,8 @@ ureq = { version = "3", default-features = false, features = ["rustls"] }
|
||||||
|
|
||||||
[target.'cfg(target_arch = "wasm32")'.dependencies]
|
[target.'cfg(target_arch = "wasm32")'.dependencies]
|
||||||
console_error_panic_hook = "0.1"
|
console_error_panic_hook = "0.1"
|
||||||
|
# Opening external URLs (Donate / feedback / release notes) via window.open.
|
||||||
|
web-sys = { version = "0.3", features = ["Window"] }
|
||||||
# Browsers without WebGPU (e.g. Firefox by default) need wgpu's WebGL2 backend;
|
# Browsers without WebGPU (e.g. Firefox by default) need wgpu's WebGL2 backend;
|
||||||
# `webgl` enables it. `fira-sans` embeds the default UI font — the web has no
|
# `webgl` enables it. `fira-sans` embeds the default UI font — the web has no
|
||||||
# system fonts, so without it all iced text (ribbon labels, command line) is
|
# system fonts, so without it all iced text (ribbon labels, command line) is
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ impl OpenCADStudio {
|
||||||
&& !matches!(
|
&& !matches!(
|
||||||
cmd,
|
cmd,
|
||||||
"NEW" | "OPEN" | "EXIT" | "QUIT" | "REPORT" | "CHANGELOG" | "ABOUT"
|
"NEW" | "OPEN" | "EXIT" | "QUIT" | "REPORT" | "CHANGELOG" | "ABOUT"
|
||||||
| "PLUGINS" | "PLUGINMANAGER"
|
| "PLUGINS" | "PLUGINMANAGER" | "DONATE"
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
self.command_line
|
self.command_line
|
||||||
|
|
|
||||||
13
src/sys.rs
13
src/sys.rs
|
|
@ -1,17 +1,20 @@
|
||||||
// Small platform shims for things the desktop build does natively but the web
|
// Small platform shims for things the desktop build does natively but the web
|
||||||
// (wasm) build must handle differently or skip.
|
// (wasm) build must handle differently or skip.
|
||||||
|
|
||||||
/// Open a URL in the user's browser. On the desktop this launches the default
|
/// Open a URL in the user's browser. The desktop launches the default handler;
|
||||||
/// handler; on the web the app already *is* in a browser, so for now this is a
|
/// the web opens a new tab (the button click is a user gesture, so it isn't
|
||||||
/// no-op (a real implementation would call `window.open`).
|
/// caught by the pop-up blocker). Focus of the opened page is left to the
|
||||||
|
/// OS / browser.
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
pub fn open_url(url: &str) {
|
pub fn open_url(url: &str) {
|
||||||
let _ = open::that(url);
|
let _ = open::that(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_arch = "wasm32")]
|
#[cfg(target_arch = "wasm32")]
|
||||||
pub fn open_url(_url: &str) {
|
pub fn open_url(url: &str) {
|
||||||
// TODO(web): web_sys::window().open_with_url(_url)
|
if let Some(window) = web_sys::window() {
|
||||||
|
let _ = window.open_with_url_and_target(url, "_blank");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Turn an `rfd` file handle into a `PathBuf` the rest of the app keys on.
|
/// Turn an `rfd` file handle into a `PathBuf` the rest of the app keys on.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue