basic subvol support
This commit is contained in:
parent
0f3537745c
commit
e9da6a8dc9
@ -35,7 +35,7 @@ pub fn manual_partitioning_page(
|
|||||||
|
|
||||||
let partition_array_refcell = Rc::new(RefCell::new(get_partitions()));
|
let partition_array_refcell = Rc::new(RefCell::new(get_partitions()));
|
||||||
let used_partition_array_refcell: Rc<RefCell<Vec<String>>> = Rc::new(RefCell::default());
|
let used_partition_array_refcell: Rc<RefCell<Vec<String>>> = Rc::new(RefCell::default());
|
||||||
let do_used_part_check_refcell = Rc::new(RefCell::new(true));
|
let subvol_partition_array_refcell: Rc<RefCell<Vec<String>>> = Rc::new(RefCell::default());
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ pub fn manual_partitioning_page(
|
|||||||
&partition_changed_action,
|
&partition_changed_action,
|
||||||
&language_changed_action,
|
&language_changed_action,
|
||||||
&used_partition_array_refcell,
|
&used_partition_array_refcell,
|
||||||
&do_used_part_check_refcell,
|
&subvol_partition_array_refcell,
|
||||||
);
|
);
|
||||||
|
|
||||||
content_box.append(&drive_mounts_viewport);
|
content_box.append(&drive_mounts_viewport);
|
||||||
@ -146,7 +146,7 @@ fn create_efi_row(
|
|||||||
partition_changed_action: &gio::SimpleAction,
|
partition_changed_action: &gio::SimpleAction,
|
||||||
language_changed_action: &gio::SimpleAction,
|
language_changed_action: &gio::SimpleAction,
|
||||||
used_partition_array_refcell: &Rc<RefCell<Vec<String>>>,
|
used_partition_array_refcell: &Rc<RefCell<Vec<String>>>,
|
||||||
do_used_part_check_refcell: &Rc<RefCell<bool>>,
|
subvol_partition_array_refcell: &Rc<RefCell<Vec<String>>>,
|
||||||
) {
|
) {
|
||||||
let partition_scroll_child = gtk::ListBox::builder()
|
let partition_scroll_child = gtk::ListBox::builder()
|
||||||
.selection_mode(gtk::SelectionMode::None)
|
.selection_mode(gtk::SelectionMode::None)
|
||||||
@ -266,7 +266,7 @@ fn create_efi_row(
|
|||||||
never: Rc::new(RefCell::new(false)),
|
never: Rc::new(RefCell::new(false)),
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
post_check_drive_mount(&row, &partition_row_struct, &partition_button, &partition_changed_action, &partition, &used_partition_array_refcell, &do_used_part_check_refcell);
|
post_check_drive_mount(&row, &partition_row_struct, &partition_button, &partition_changed_action, &partition, &used_partition_array_refcell, &subvol_partition_array_refcell);
|
||||||
partition_scroll_child.append(&partition_row_struct.widget);
|
partition_scroll_child.append(&partition_row_struct.widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -300,7 +300,7 @@ fn create_boot_row(
|
|||||||
partition_changed_action: &gio::SimpleAction,
|
partition_changed_action: &gio::SimpleAction,
|
||||||
language_changed_action: &gio::SimpleAction,
|
language_changed_action: &gio::SimpleAction,
|
||||||
used_partition_array_refcell: &Rc<RefCell<Vec<String>>>,
|
used_partition_array_refcell: &Rc<RefCell<Vec<String>>>,
|
||||||
do_used_part_check_refcell: &Rc<RefCell<bool>>,
|
subvol_partition_array_refcell: &Rc<RefCell<Vec<String>>>,
|
||||||
) {
|
) {
|
||||||
let partition_scroll_child = gtk::ListBox::builder()
|
let partition_scroll_child = gtk::ListBox::builder()
|
||||||
.selection_mode(gtk::SelectionMode::None)
|
.selection_mode(gtk::SelectionMode::None)
|
||||||
@ -420,7 +420,7 @@ fn create_boot_row(
|
|||||||
never: Rc::new(RefCell::new(false)),
|
never: Rc::new(RefCell::new(false)),
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
post_check_drive_mount(&row, &partition_row_struct, &partition_button, &partition_changed_action, &partition, &used_partition_array_refcell, &do_used_part_check_refcell);
|
post_check_drive_mount(&row, &partition_row_struct, &partition_button, &partition_changed_action, &partition, &used_partition_array_refcell, &subvol_partition_array_refcell);
|
||||||
partition_scroll_child.append(&partition_row_struct.widget);
|
partition_scroll_child.append(&partition_row_struct.widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -454,7 +454,7 @@ fn create_root_row(
|
|||||||
partition_changed_action: &gio::SimpleAction,
|
partition_changed_action: &gio::SimpleAction,
|
||||||
language_changed_action: &gio::SimpleAction,
|
language_changed_action: &gio::SimpleAction,
|
||||||
used_partition_array_refcell: &Rc<RefCell<Vec<String>>>,
|
used_partition_array_refcell: &Rc<RefCell<Vec<String>>>,
|
||||||
do_used_part_check_refcell: &Rc<RefCell<bool>>,
|
subvol_partition_array_refcell: &Rc<RefCell<Vec<String>>>,
|
||||||
) {
|
) {
|
||||||
let partition_scroll_child = gtk::ListBox::builder()
|
let partition_scroll_child = gtk::ListBox::builder()
|
||||||
.selection_mode(gtk::SelectionMode::None)
|
.selection_mode(gtk::SelectionMode::None)
|
||||||
@ -579,7 +579,7 @@ fn create_root_row(
|
|||||||
never: Rc::new(RefCell::new(false)),
|
never: Rc::new(RefCell::new(false)),
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
post_check_drive_mount(&row, &partition_row_struct, &partition_button, &partition_changed_action, &partition, &used_partition_array_refcell, &do_used_part_check_refcell);
|
post_check_drive_mount(&row, &partition_row_struct, &partition_button, &partition_changed_action, &partition, &used_partition_array_refcell, &subvol_partition_array_refcell);
|
||||||
partition_scroll_child.append(&partition_row_struct.widget);
|
partition_scroll_child.append(&partition_row_struct.widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -613,7 +613,7 @@ fn create_mount_row(
|
|||||||
partition_changed_action: &gio::SimpleAction,
|
partition_changed_action: &gio::SimpleAction,
|
||||||
language_changed_action: &gio::SimpleAction,
|
language_changed_action: &gio::SimpleAction,
|
||||||
used_partition_array_refcell: &Rc<RefCell<Vec<String>>>,
|
used_partition_array_refcell: &Rc<RefCell<Vec<String>>>,
|
||||||
do_used_part_check_refcell: &Rc<RefCell<bool>>,
|
subvol_partition_array_refcell: &Rc<RefCell<Vec<String>>>,
|
||||||
) {
|
) {
|
||||||
let partition_scroll_child = gtk::ListBox::builder()
|
let partition_scroll_child = gtk::ListBox::builder()
|
||||||
.selection_mode(gtk::SelectionMode::None)
|
.selection_mode(gtk::SelectionMode::None)
|
||||||
@ -703,7 +703,7 @@ fn create_mount_row(
|
|||||||
never: Rc::new(RefCell::new(false)),
|
never: Rc::new(RefCell::new(false)),
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
post_check_drive_mount(&row, &partition_row_struct, &partition_button, &partition_changed_action, &partition, &used_partition_array_refcell, &do_used_part_check_refcell);
|
post_check_drive_mount(&row, &partition_row_struct, &partition_button, &partition_changed_action, &partition, &used_partition_array_refcell, &subvol_partition_array_refcell);
|
||||||
partition_scroll_child.append(&partition_row_struct.widget);
|
partition_scroll_child.append(&partition_row_struct.widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -730,7 +730,7 @@ fn create_mount_row(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn post_check_drive_mount(row: &DriveMountRow, partition_row_struct: &PartitionRow, partition_button: >k::CheckButton, partition_changed_action: &gio::SimpleAction, partition: &Partition, used_partition_array_refcell: &Rc<RefCell<Vec<String>>>, do_used_part_check_refcell: &Rc<RefCell<bool>>) {
|
fn post_check_drive_mount(row: &DriveMountRow, partition_row_struct: &PartitionRow, partition_button: >k::CheckButton, partition_changed_action: &gio::SimpleAction, partition: &Partition, used_partition_array_refcell: &Rc<RefCell<Vec<String>>>, subvol_partition_array_refcell: &Rc<RefCell<Vec<String>>>) {
|
||||||
partition_row_struct.widget.add_prefix(partition_button);
|
partition_row_struct.widget.add_prefix(partition_button);
|
||||||
partition_button.connect_toggled(clone!(
|
partition_button.connect_toggled(clone!(
|
||||||
#[weak]
|
#[weak]
|
||||||
@ -761,8 +761,6 @@ fn post_check_drive_mount(row: &DriveMountRow, partition_row_struct: &PartitionR
|
|||||||
#[strong]
|
#[strong]
|
||||||
partition,
|
partition,
|
||||||
#[strong]
|
#[strong]
|
||||||
partition_changed_action,
|
|
||||||
#[strong]
|
|
||||||
row,
|
row,
|
||||||
move |_| {
|
move |_| {
|
||||||
if row.mountpoint() == "[SWAP]" {
|
if row.mountpoint() == "[SWAP]" {
|
||||||
@ -777,6 +775,26 @@ fn post_check_drive_mount(row: &DriveMountRow, partition_row_struct: &PartitionR
|
|||||||
}
|
}
|
||||||
));
|
));
|
||||||
|
|
||||||
|
row.connect_mountopts_notify(clone!(
|
||||||
|
#[strong]
|
||||||
|
partition,
|
||||||
|
#[strong]
|
||||||
|
partition_changed_action,
|
||||||
|
#[strong]
|
||||||
|
subvol_partition_array_refcell,
|
||||||
|
#[strong]
|
||||||
|
row,
|
||||||
|
move |_| {
|
||||||
|
if row.mountopts().contains("subvol=") || row.mountopts().contains("subvolid") {
|
||||||
|
(*subvol_partition_array_refcell.borrow_mut()).push(partition.part_name.to_string());
|
||||||
|
} else {
|
||||||
|
(*subvol_partition_array_refcell.borrow_mut())
|
||||||
|
.retain(|x| x != &partition.part_name);
|
||||||
|
}
|
||||||
|
partition_changed_action.activate(None);
|
||||||
|
}
|
||||||
|
));
|
||||||
|
|
||||||
partition_changed_action.connect_activate(clone!(
|
partition_changed_action.connect_activate(clone!(
|
||||||
#[strong]
|
#[strong]
|
||||||
partition_row_struct,
|
partition_row_struct,
|
||||||
@ -787,23 +805,28 @@ fn post_check_drive_mount(row: &DriveMountRow, partition_row_struct: &PartitionR
|
|||||||
#[strong]
|
#[strong]
|
||||||
used_partition_array_refcell,
|
used_partition_array_refcell,
|
||||||
#[strong]
|
#[strong]
|
||||||
do_used_part_check_refcell,
|
subvol_partition_array_refcell,
|
||||||
move |_, _| {
|
move |_, _| {
|
||||||
if *do_used_part_check_refcell.borrow() == true {
|
|
||||||
let part_name = &partition.part_name;
|
let part_name = &partition.part_name;
|
||||||
let used_partition_array = used_partition_array_refcell.borrow();
|
let used_partition_array = used_partition_array_refcell.borrow();
|
||||||
|
let subvol_partition_array = subvol_partition_array_refcell.borrow();
|
||||||
if used_partition_array
|
if used_partition_array
|
||||||
.iter()
|
.iter()
|
||||||
.any(|e| part_name == e && part_name != &row.partition())
|
.any(|e| part_name == e && part_name != &row.partition())
|
||||||
{
|
{
|
||||||
partition_row_struct.widget.set_sensitive(false);
|
partition_row_struct.widget.set_sensitive(false);
|
||||||
(*partition_row_struct.used.borrow_mut()) = true;
|
(*partition_row_struct.used.borrow_mut()) = true;
|
||||||
|
if subvol_partition_array
|
||||||
|
.iter()
|
||||||
|
.any(|e| e == part_name)
|
||||||
|
{
|
||||||
|
partition_row_struct.widget.set_sensitive(true);
|
||||||
|
}
|
||||||
} else if *partition_row_struct.never.borrow() == false {
|
} else if *partition_row_struct.never.borrow() == false {
|
||||||
partition_row_struct.widget.set_sensitive(true);
|
partition_row_struct.widget.set_sensitive(true);
|
||||||
(*partition_row_struct.used.borrow_mut()) = false;
|
(*partition_row_struct.used.borrow_mut()) = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -814,7 +837,7 @@ fn create_hardcoded_rows(
|
|||||||
partition_changed_action: &gio::SimpleAction,
|
partition_changed_action: &gio::SimpleAction,
|
||||||
language_changed_action: &gio::SimpleAction,
|
language_changed_action: &gio::SimpleAction,
|
||||||
used_partition_array_refcell: &Rc<RefCell<Vec<String>>>,
|
used_partition_array_refcell: &Rc<RefCell<Vec<String>>>,
|
||||||
do_used_part_check_refcell: &Rc<RefCell<bool>>,
|
subvol_partition_array_refcell: &Rc<RefCell<Vec<String>>>,
|
||||||
) {
|
) {
|
||||||
let drive_mount_add_button = gtk::Button::builder()
|
let drive_mount_add_button = gtk::Button::builder()
|
||||||
.icon_name("list-add")
|
.icon_name("list-add")
|
||||||
@ -829,7 +852,7 @@ fn create_hardcoded_rows(
|
|||||||
&partition_changed_action,
|
&partition_changed_action,
|
||||||
&language_changed_action,
|
&language_changed_action,
|
||||||
&used_partition_array_refcell,
|
&used_partition_array_refcell,
|
||||||
&do_used_part_check_refcell,
|
&subvol_partition_array_refcell,
|
||||||
);
|
);
|
||||||
create_boot_row(
|
create_boot_row(
|
||||||
&drive_mounts_adw_listbox,
|
&drive_mounts_adw_listbox,
|
||||||
@ -838,7 +861,7 @@ fn create_hardcoded_rows(
|
|||||||
&partition_changed_action,
|
&partition_changed_action,
|
||||||
&language_changed_action,
|
&language_changed_action,
|
||||||
&used_partition_array_refcell,
|
&used_partition_array_refcell,
|
||||||
&do_used_part_check_refcell,
|
&subvol_partition_array_refcell,
|
||||||
);
|
);
|
||||||
create_root_row(
|
create_root_row(
|
||||||
&drive_mounts_adw_listbox,
|
&drive_mounts_adw_listbox,
|
||||||
@ -847,7 +870,7 @@ fn create_hardcoded_rows(
|
|||||||
&partition_changed_action,
|
&partition_changed_action,
|
||||||
&language_changed_action,
|
&language_changed_action,
|
||||||
&used_partition_array_refcell,
|
&used_partition_array_refcell,
|
||||||
&do_used_part_check_refcell,
|
&subvol_partition_array_refcell,
|
||||||
);
|
);
|
||||||
|
|
||||||
drive_mounts_adw_listbox.append(&drive_mount_add_button);
|
drive_mounts_adw_listbox.append(&drive_mount_add_button);
|
||||||
@ -866,7 +889,7 @@ fn create_hardcoded_rows(
|
|||||||
#[strong]
|
#[strong]
|
||||||
used_partition_array_refcell,
|
used_partition_array_refcell,
|
||||||
#[strong]
|
#[strong]
|
||||||
do_used_part_check_refcell,
|
subvol_partition_array_refcell,
|
||||||
move |_| {
|
move |_| {
|
||||||
create_mount_row(
|
create_mount_row(
|
||||||
&drive_mounts_adw_listbox,
|
&drive_mounts_adw_listbox,
|
||||||
@ -875,7 +898,7 @@ fn create_hardcoded_rows(
|
|||||||
&partition_changed_action,
|
&partition_changed_action,
|
||||||
&language_changed_action,
|
&language_changed_action,
|
||||||
&used_partition_array_refcell,
|
&used_partition_array_refcell,
|
||||||
&do_used_part_check_refcell,
|
&subvol_partition_array_refcell,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
|
Loading…
Reference in New Issue
Block a user