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",
|
||||
"ttf-parser",
|
||||
"ureq",
|
||||
"web-sys",
|
||||
"windows-sys 0.61.2",
|
||||
"winresource",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -82,6 +82,8 @@ ureq = { version = "3", default-features = false, features = ["rustls"] }
|
|||
|
||||
[target.'cfg(target_arch = "wasm32")'.dependencies]
|
||||
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;
|
||||
# `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
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ impl OpenCADStudio {
|
|||
&& !matches!(
|
||||
cmd,
|
||||
"NEW" | "OPEN" | "EXIT" | "QUIT" | "REPORT" | "CHANGELOG" | "ABOUT"
|
||||
| "PLUGINS" | "PLUGINMANAGER"
|
||||
| "PLUGINS" | "PLUGINMANAGER" | "DONATE"
|
||||
)
|
||||
{
|
||||
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
|
||||
// (wasm) build must handle differently or skip.
|
||||
|
||||
/// Open a URL in the user's browser. On the desktop this launches the default
|
||||
/// handler; on the web the app already *is* in a browser, so for now this is a
|
||||
/// no-op (a real implementation would call `window.open`).
|
||||
/// Open a URL in the user's browser. The desktop launches the default handler;
|
||||
/// the web opens a new tab (the button click is a user gesture, so it isn't
|
||||
/// caught by the pop-up blocker). Focus of the opened page is left to the
|
||||
/// OS / browser.
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
pub fn open_url(url: &str) {
|
||||
let _ = open::that(url);
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
pub fn open_url(_url: &str) {
|
||||
// TODO(web): web_sys::window().open_with_url(_url)
|
||||
pub fn open_url(url: &str) {
|
||||
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.
|
||||
|
|
|
|||
Loading…
Reference in a new issue