Merge pull request #869 from ellieplayswow/feature/open-with-subclasses
Bugfix to open-with dialog to use a scrollable with a managed height
This commit is contained in:
commit
509a0afb98
1 changed files with 24 additions and 4 deletions
28
src/app.rs
28
src/app.rs
|
|
@ -4329,12 +4329,17 @@ impl Application for App {
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut column = widget::list_column();
|
let mut column = widget::list_column();
|
||||||
for (i, app) in self.get_programs_for_mime(&mime).iter().enumerate() {
|
let available_programs = self.get_programs_for_mime(&mime);
|
||||||
|
let item_height = 32.0;
|
||||||
|
let mut displayed_default = false;
|
||||||
|
|
||||||
|
for (i, app) in available_programs.iter().enumerate() {
|
||||||
column = column.add(
|
column = column.add(
|
||||||
widget::button::custom(
|
widget::button::custom(
|
||||||
widget::row::with_children(vec![
|
widget::row::with_children(vec![
|
||||||
widget::icon(app.icon.clone()).size(32).into(),
|
widget::icon(app.icon.clone()).size(32).into(),
|
||||||
if app.is_default {
|
if app.is_default && !displayed_default {
|
||||||
|
displayed_default = true;
|
||||||
widget::text::body(fl!(
|
widget::text::body(fl!(
|
||||||
"default-app",
|
"default-app",
|
||||||
name = Some(app.name.as_str())
|
name = Some(app.name.as_str())
|
||||||
|
|
@ -4353,7 +4358,7 @@ impl Application for App {
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
.spacing(space_s)
|
.spacing(space_s)
|
||||||
.height(Length::Fixed(32.0))
|
.height(Length::Fixed(item_height))
|
||||||
.align_y(Alignment::Center),
|
.align_y(Alignment::Center),
|
||||||
)
|
)
|
||||||
.width(Length::Fill)
|
.width(Length::Fill)
|
||||||
|
|
@ -4370,7 +4375,22 @@ impl Application for App {
|
||||||
.secondary_action(
|
.secondary_action(
|
||||||
widget::button::standard(fl!("cancel")).on_press(Message::DialogCancel),
|
widget::button::standard(fl!("cancel")).on_press(Message::DialogCancel),
|
||||||
)
|
)
|
||||||
.control(column);
|
.control(
|
||||||
|
widget::scrollable(column).height(if let Some(size) = self.size {
|
||||||
|
let max_size = size.height - 256.0;
|
||||||
|
// (32 (item_height) + 5.0 (custom button padding)) + (space_xxs (list item spacing) * 2)
|
||||||
|
let scrollable_height = available_programs.len() as f32
|
||||||
|
* (item_height + 5.0 + (2.0 * space_xxs as f32));
|
||||||
|
|
||||||
|
if scrollable_height > max_size {
|
||||||
|
Length::Fill
|
||||||
|
} else {
|
||||||
|
Length::Shrink
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Length::Fill
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
if let Some(app) = store_opt {
|
if let Some(app) = store_opt {
|
||||||
dialog = dialog.tertiary_action(
|
dialog = dialog.tertiary_action(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue