Skip to content

Commit a8cda4c

Browse files
Open links with default browser
1 parent 61ee957 commit a8cda4c

4 files changed

Lines changed: 51 additions & 2 deletions

File tree

Cargo.lock

Lines changed: 37 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ include_dir = "0.7.4"
164164
tracing-subscriber = { version = "0.3.19", features = ["env-filter"] }
165165
tracing = "0.1.41"
166166
rfd = "0.15.4"
167+
open = "5.3.2"
167168

168169
[profile.dev]
169170
opt-level = 1

desktop/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,4 @@ glam = { workspace = true }
3838
vello = { workspace = true }
3939
derivative = { workspace = true }
4040
rfd = { workspace = true }
41+
open ={ workspace = true }

desktop/src/app.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ impl WinitApp {
5555
}
5656

5757
fn send_messages_to_editor(&mut self, mut responses: Vec<FrontendMessage>) {
58+
if responses.is_empty() {
59+
return;
60+
}
61+
5862
for message in responses.extract_if(.., |m| matches!(m, FrontendMessage::RenderOverlays(_))) {
5963
let FrontendMessage::RenderOverlays(overlay_context) = message else { unreachable!() };
6064
if let Some(graphics_state) = &mut self.graphics_state {
@@ -106,9 +110,15 @@ impl WinitApp {
106110
}
107111
}
108112

109-
if responses.is_empty() {
110-
return;
113+
for message in responses.extract_if(.., |m| matches!(m, FrontendMessage::TriggerVisitLink { .. })) {
114+
let _ = thread::spawn(move || {
115+
let FrontendMessage::TriggerVisitLink { url } = message else { unreachable!() };
116+
if let Err(e) = open::that(&url) {
117+
tracing::error!("Failed to open URL: {}: {}", url, e);
118+
}
119+
});
111120
}
121+
112122
let Ok(message) = ron::to_string(&responses) else {
113123
tracing::error!("Failed to serialize Messages");
114124
return;

0 commit comments

Comments
 (0)