build(appimage): harden thin bundle workflow

Keep host multimedia libraries out of the AppImage, document the exact Ubuntu build inputs, and resolve Rust 1.97 release-gate warnings.
This commit is contained in:
2026-08-14 18:05:00 -04:00
parent d023621eee
commit f46b2cacc7
4 changed files with 43 additions and 29 deletions
+14 -14
View File
@@ -5568,7 +5568,7 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
.size(11)
.color(color_subtext),
slider(0.0..=1.0, state.config.background_dim, AppMessage::SetBackgroundDim)
.step(0.05),
.step(0.05_f32),
text("Set a picture from your computer as the app background. Auto-resized; a dimming overlay keeps text readable. Applies live.")
.size(11)
.color(color_subtext),
@@ -5996,7 +5996,7 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
).width(iced::Length::Fill),
text(format!("Input Volume (mic): {:.0}%", state.config.input_volume * 100.0)).size(11).color(color_subtext),
slider(0.0..=2.0, state.config.input_volume, AppMessage::InputVolumeChanged)
.step(0.05)
.step(0.05_f32)
.on_release(AppMessage::PersistConfig),
].spacing(8).width(iced::Length::Fill),
column![
@@ -6008,7 +6008,7 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
).width(iced::Length::Fill),
text(format!("Output Volume: {:.0}%", state.config.output_volume * 100.0)).size(11).color(color_subtext),
slider(0.0..=2.0, state.config.output_volume, AppMessage::OutputVolumeChanged)
.step(0.05)
.step(0.05_f32)
.on_release(AppMessage::PersistConfig),
].spacing(8).width(iced::Length::Fill),
].spacing(20).align_y(iced::alignment::Vertical::Top).width(iced::Length::Fill),
@@ -6618,7 +6618,7 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
column![
row![
avatar_view(&state.config.avatar, &state.name, &state.self_id, 34.0),
text(format!("{} (You)", &state.name)).size(16).color(color_text),
text(format!("{} (You)", state.name)).size(16).color(color_text),
horizontal_space(),
if state.is_muted {
text("[Muted]").size(14).color(color_red)
@@ -6933,7 +6933,7 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
slider(0.0..=2.0, current_vol, move |v| {
AppMessage::PeerVolumeChanged(peer_id_clone, v)
})
.step(0.01)
.step(0.01_f32)
.on_release(AppMessage::PersistConfig)
]
.spacing(8)
@@ -6946,7 +6946,7 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
slider(-1.0..=1.0, current_pan, move |v| {
AppMessage::PeerPanChanged(peer_id_clone, v)
})
.step(0.05)
.step(0.05_f32)
.on_release(AppMessage::PersistConfig),
]
.spacing(8)
@@ -6961,7 +6961,7 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
slider(0.0..=METER_MAX, current_gate, move |v| {
AppMessage::PeerGateChanged(peer_id_clone, v)
})
.step(0.001)
.step(0.001_f32)
.on_release(AppMessage::PersistConfig),
]
.spacing(8)
@@ -6980,7 +6980,7 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
slider(EQ_GAIN_DB_MIN..=EQ_GAIN_DB_MAX, value, move |v| {
AppMessage::PeerEqChanged(peer_id_clone, band, v)
})
.step(0.5)
.step(0.5_f32)
.on_release(AppMessage::PersistConfig),
]
.spacing(8)
@@ -7215,7 +7215,7 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
clip_progress(music_status.position, music_status.total),
AppMessage::MusicSeek,
)
.step(0.001),
.step(0.001_f32),
text(format!("{elapsed} / {duration}"))
.size(11)
.color(color_subtext),
@@ -7225,7 +7225,7 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
state.config.music_volume,
AppMessage::MusicSetVolume
)
.step(0.01),
.step(0.01_f32),
button(
text("Browse")
.size(12)
@@ -7319,7 +7319,7 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
effective_music_volume(state),
AppMessage::MusicSetSourceVolume
)
.step(0.01),
.step(0.01_f32),
]
.spacing(8)
.into()
@@ -7815,7 +7815,7 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
},
move |fraction| AppMessage::SeekAudio(att.id, fraction),
)
.step(0.001)
.step(0.001_f32)
.width(iced::Length::Fixed(180.0)),
text(format!("{elapsed} / {duration}"))
.size(11)
@@ -7827,7 +7827,7 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
slider(0.0..=2.0, effective_clip_volume(state, att.id), move |v| {
AppMessage::SetClipVolumeFor(att.id, v)
},)
.step(0.01)
.step(0.01_f32)
.width(iced::Length::Fixed(80.0)),
]
.spacing(8)
@@ -7945,7 +7945,7 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
state.config.clip_volume,
AppMessage::SetClipVolume
)
.step(0.01)
.step(0.01_f32)
.width(iced::Length::Fixed(110.0)),
]
.spacing(10)
+4 -7
View File
@@ -435,13 +435,10 @@ where
let was_hovered = self.hovered_link.is_some();
self.hovered_link = local_position.and_then(|position| {
state.paragraph.hit_span(position).and_then(|span| {
if spans.get(span)?.link.is_some() {
Some(span)
} else {
None
}
})
state
.paragraph
.hit_span(position)
.filter(|&span| spans.get(span).is_some_and(|span| span.link.is_some()))
});
if was_hovered != self.hovered_link.is_some() {