diff --git a/src/Views/PartitioningView.vala b/src/Views/PartitioningView.vala
index 98549b48f..926cf3d85 100644
--- a/src/Views/PartitioningView.vala
+++ b/src/Views/PartitioningView.vala
@@ -218,7 +218,7 @@ public class Installer.PartitioningView : AbstractInstallerView {
partition.menu = new DecryptMenu (part.device_path);
((DecryptMenu) partition.menu).decrypted.connect (on_partition_decrypted);
} else {
- partition.menu = new PartitionMenu (part.device_path, disk.device_path, part.filesystem, lvm, this.set_mount, this.unset_mount, this.mount_is_set, partition);
+ partition.menu = new PartitionMenu (part, disk.device_path, lvm, this.set_mount, this.unset_mount, this.mount_is_set, partition);
}
partitions.add (partition);
diff --git a/src/Widgets/PartitionMenu.vala b/src/Widgets/PartitionMenu.vala
index 35ee8e01f..2f38d60aa 100644
--- a/src/Widgets/PartitionMenu.vala
+++ b/src/Widgets/PartitionMenu.vala
@@ -1,18 +1,6 @@
-/*-
- * Copyright 2018-2021 elementary, inc. (https://elementary.io)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
+/*
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ * SPDX-FileCopyrightText: 2018-2024 elementary, Inc. (https://elementary.io)
*
* Authored by: Michael Aaron Murphy
*/
@@ -24,46 +12,52 @@ public delegate void UnsetMount (string partition);
public delegate bool MountSetFn (string mount_point);
public class Installer.PartitionMenu : Gtk.Popover {
+ public InstallerDaemon.Partition partition { get; construct; }
+ public string parent_disk { get; construct; }
+ public bool is_lvm { get; construct; }
+ // A reference to the parent which owns this menu.
+ public PartitionBlock partition_block { get; construct; }
+
private bool disable_signals;
- private bool is_lvm;
- private string parent_disk;
- private string partition_path;
- private InstallerDaemon.FileSystem original_filesystem;
private Granite.SwitchModelButton format_partition;
private Granite.SwitchModelButton use_partition;
private Gtk.ComboBoxText type;
private Gtk.ComboBoxText use_as;
private Gtk.Entry custom;
- private Gtk.Label custom_label;
- private Gtk.Label type_label;
- // A reference to the parent which owns this menu.
- private PartitionBlock partition_bar;
-
- public PartitionMenu (string path, string parent, InstallerDaemon.FileSystem fs,
- bool lvm, SetMount set_mount, UnsetMount unset_mount,
- MountSetFn mount_set, PartitionBlock partition_bar) {
- this.partition_bar = partition_bar;
- original_filesystem = fs;
- is_lvm = lvm;
- partition_path = path;
- parent_disk = parent;
-
- string boot_partition = (Daemon.get_default ().bootloader_detect () == Distinst.PartitionTable.GPT)
+
+ public PartitionMenu (
+ InstallerDaemon.Partition partition,
+ string parent,
+ bool lvm,
+ SetMount set_mount,
+ UnsetMount unset_mount,
+ MountSetFn mount_set,
+ PartitionBlock partition_block
+ ) {
+ Object (
+ partition: partition,
+ parent_disk: parent,
+ is_lvm: lvm,
+ partition_block: partition_block
+ );
+
+ var boot_partition = (Daemon.get_default ().bootloader_detect () == GPT)
? "/boot/efi"
: "/boot";
use_partition = new Granite.SwitchModelButton (_("Use Partition"));
- var separator = new Gtk.Separator (Gtk.Orientation.HORIZONTAL);
+ var separator = new Gtk.Separator (HORIZONTAL);
format_partition = new Granite.SwitchModelButton (_("Format")) {
description = _("Delete all data and set up a new file system")
};
- var use_as_label = new Gtk.Label (_("Use as:"));
- use_as_label.halign = Gtk.Align.END;
- use_as_label.xalign = 1;
+ var use_as_label = new Gtk.Label (_("Use as:")) {
+ halign = END,
+ xalign = 1
+ };
use_as = new Gtk.ComboBoxText () {
hexpand = true
@@ -76,18 +70,20 @@ public class Installer.PartitionMenu : Gtk.Popover {
use_as.active = 0;
use_as.bind_property ("visible", use_as_label, "visible");
- custom_label = new Gtk.Label (_("Custom:"));
- custom_label.halign = Gtk.Align.END;
- custom_label.xalign = 1;
+ var custom_label = new Gtk.Label (_("Custom:")) {
+ halign = END,
+ xalign = 1
+ };
custom = new Gtk.Entry ();
custom.bind_property ("visible", custom_label, "visible");
- type_label = new Gtk.Label (_("Filesystem:"));
- type_label.halign = Gtk.Align.END;
- type_label.xalign = 1;
+ var type_label = new Gtk.Label (_("Filesystem:")) {
+ halign = END,
+ xalign = 1
+ };
- var label_size_group = new Gtk.SizeGroup (Gtk.SizeGroupMode.HORIZONTAL);
+ var label_size_group = new Gtk.SizeGroup (HORIZONTAL);
label_size_group.add_widget (use_as_label);
label_size_group.add_widget (custom_label);
label_size_group.add_widget (type_label);
@@ -205,13 +201,13 @@ public class Installer.PartitionMenu : Gtk.Popover {
disable_signals = false;
int select = 0;
- if (fs == InstallerDaemon.FileSystem.FAT16 || fs == InstallerDaemon.FileSystem.FAT32) {
+ if (partition.filesystem == FAT16 || partition.filesystem == FAT32) {
if (mount_set (boot_partition)) {
select = 4;
} else {
select = 2;
}
- } else if (fs == InstallerDaemon.FileSystem.SWAP) {
+ } else if (partition.filesystem == SWAP) {
select = 3;
} else if (mount_set ("/")) {
if (mount_set ("/home" )) {
@@ -223,8 +219,8 @@ public class Installer.PartitionMenu : Gtk.Popover {
use_as.set_active (select);
check_values (set_mount);
} else {
- unset_mount (partition_path);
- partition_bar.icon = null;
+ unset_mount (partition.device_path);
+ partition_block.icon = null;
}
bottom_revealer.reveal_child = use_partition.active;
@@ -240,7 +236,7 @@ public class Installer.PartitionMenu : Gtk.Popover {
type.visible = true;
custom.visible = false;
disable_signals = false;
- partition_bar.icon = null;
+ partition_block.icon = null;
}
private void set_format_sensitivity () {
@@ -251,14 +247,14 @@ public class Installer.PartitionMenu : Gtk.Popover {
private void check_values (SetMount set_mount) {
if (!use_partition.active) {
- partition_bar.icon = null;
- partition_bar.tooltip_text = null;
+ partition_block.icon = null;
+ partition_block.tooltip_text = null;
return;
}
if (use_as.active == 4 && !custom.text.has_prefix ("/")) {
- partition_bar.icon = new ThemedIcon ("dialog-warning-symbolic");
- partition_bar.tooltip_text = _("Custom value must begin with /");
+ partition_block.icon = new ThemedIcon ("dialog-warning-symbolic");
+ partition_block.tooltip_text = _("Custom value must begin with /");
return;
}
@@ -267,26 +263,26 @@ public class Installer.PartitionMenu : Gtk.Popover {
try {
set_mount (new Installer.Mount (
- partition_path,
+ partition.device_path,
parent_disk,
mount,
- partition_bar.get_partition_size (),
+ partition.end_sector - partition.start_sector,
(format_partition.active ? InstallerDaemon.MountFlags.FORMAT : 0)
+ (is_lvm ? InstallerDaemon.MountFlags.LVM : 0),
filesystem,
this
));
- partition_bar.icon = new ThemedIcon ("process-completed-symbolic");
- partition_bar.tooltip_text = null;
+ partition_block.icon = new ThemedIcon ("process-completed-symbolic");
+ partition_block.tooltip_text = null;
} catch (GLib.Error e) {
- partition_bar.icon = new ThemedIcon ("dialog-warning-symbolic");
- partition_bar.tooltip_text = e.message;
+ partition_block.icon = new ThemedIcon ("dialog-warning-symbolic");
+ partition_block.tooltip_text = e.message;
}
}
private bool has_same_filesystem () {
- return original_filesystem == get_file_system ();
+ return partition.filesystem == get_file_system ();
}
private InstallerDaemon.FileSystem get_file_system () {