diff --git a/src/Views/DriversView.vala b/src/Views/DriversView.vala
index 204e71aa1..4de3b39fb 100644
--- a/src/Views/DriversView.vala
+++ b/src/Views/DriversView.vala
@@ -36,38 +36,23 @@
};
description_label.get_style_context ().add_class (Granite.STYLE_CLASS_H3_LABEL);
- var warning_image = new Gtk.Image.from_icon_name ("security-low-symbolic", LARGE_TOOLBAR);
- warning_image.get_style_context ().add_class ("accent");
- warning_image.get_style_context ().add_class ("yellow");
-
- var warning_label = new Gtk.Label (_("Proprietary drivers contain private code that can't be reviewed. Security and other updates are dependent on the driver vendor.")) {
- hexpand = true,
- max_width_chars = 1, // Make Gtk wrap, but not expand the window
- wrap = true,
- xalign = 0
- };
-
- var internet_image = new Gtk.Image.from_icon_name ("network-wireless-symbolic", LARGE_TOOLBAR);
- internet_image.get_style_context ().add_class ("accent");
- internet_image.get_style_context ().add_class ("blue");
-
- var internet_label = new Gtk.Label (_("An Internet connection is required to install NVIDIA® graphics drivers.")) {
- hexpand = true,
- max_width_chars = 1, // Make Gtk wrap, but not expand the window
- wrap = true,
- xalign = 0
- };
-
- var install_later_image = new Gtk.Image.from_icon_name ("system-software-install-symbolic", LARGE_TOOLBAR);
- install_later_image.get_style_context ().add_class ("accent");
- install_later_image.get_style_context ().add_class ("purple");
-
- var install_later_label = new Gtk.Label (_("Proprietary drivers can be installed later through AppCenter, but an Internet connection will be required for all drivers.")) {
- hexpand = true,
- max_width_chars = 1, // Make Gtk wrap, but not expand the window
- wrap = true,
- xalign = 0
- };
+ var warning_row = new DescriptionRow (
+ _("Proprietary drivers contain private code that can't be reviewed. Security and other updates are dependent on the driver vendor."),
+ "security-low-symbolic",
+ "yellow"
+ );
+
+ var internet_row = new DescriptionRow (
+ _("An Internet connection is required to install NVIDIA® graphics drivers."),
+ "network-wireless-symbolic",
+ "blue"
+ );
+
+ var install_later_row = new DescriptionRow (
+ _("Proprietary drivers can be installed later through AppCenter, but an Internet connection will be required for all drivers."),
+ "system-software-install-symbolic",
+ "purple"
+ );
var checkbutton_label = new Gtk.Label (_("Include third-party proprietary drivers when installing. I agree to their respective licenses and terms of use.")) {
wrap = true
@@ -77,26 +62,21 @@
child = checkbutton_label
};
- var message_grid = new Gtk.Grid () {
- valign = CENTER,
- row_spacing = 32,
- column_spacing = 12
+ var message_box = new Gtk.Box (VERTICAL, 32) {
+ valign = CENTER
};
- message_grid.attach (description_label, 0, 0, 2, 1);
- message_grid.attach (warning_image, 0, 1);
- message_grid.attach (warning_label, 1, 1);
- message_grid.attach (internet_image, 0, 2);
- message_grid.attach (internet_label, 1, 2);
- message_grid.attach (install_later_image, 0, 3);
- message_grid.attach (install_later_label, 1, 3);
- message_grid.attach (drivers_check, 0, 4, 2);
+ message_box.add (description_label);
+ message_box.add (warning_row);
+ message_box.add (internet_row);
+ message_box.add (install_later_row);
+ message_box.add (drivers_check);
content_area.column_homogeneous = true;
content_area.margin_start = content_area.margin_end = 12;
content_area.valign = Gtk.Align.CENTER;
content_area.attach (image, 0, 0);
content_area.attach (title_label, 0, 1);
- content_area.attach (message_grid, 1, 0, 1, 2);
+ content_area.attach (message_box, 1, 0, 1, 2);
var back_button = new Gtk.Button.with_label (_("Back"));
back_button.clicked.connect (() => ((Hdy.Deck) get_parent ()).navigate (BACK));
diff --git a/src/Views/EncryptView.vala b/src/Views/EncryptView.vala
index 510e8ec49..55f471344 100644
--- a/src/Views/EncryptView.vala
+++ b/src/Views/EncryptView.vala
@@ -61,44 +61,31 @@ public class EncryptView : AbstractInstallerView {
};
details_label.get_style_context ().add_class (Granite.STYLE_CLASS_H3_LABEL);
- var protect_image = new Gtk.Image.from_icon_name ("security-high-symbolic", Gtk.IconSize.LARGE_TOOLBAR);
-
- var protect_label = new Gtk.Label (_("Data will only be protected from others with physical access to this device when it is shut down.")) {
- hexpand = true,
- max_width_chars = 1, // Make Gtk wrap, but not expand the window
- wrap = true,
- xalign = 0
- };
-
- var restart_image = new Gtk.Image.from_icon_name ("system-reboot-symbolic", Gtk.IconSize.LARGE_TOOLBAR);
-
- var restart_label = new Gtk.Label (_("The encryption password will be required each time this device is turned on. Store it somewhere safe.")) {
- hexpand = true,
- max_width_chars = 1, // Make Gtk wrap, but not expand the window
- wrap = true,
- xalign = 0
+ var protect_row = new DescriptionRow (
+ _("Data will only be protected from others with physical access to this device when it is shut down."),
+ "security-high-symbolic",
+ "green"
+ );
+
+ var restart_row = new DescriptionRow (
+ _("The encryption password will be required each time this device is turned on. Store it somewhere safe."),
+ "system-reboot-symbolic",
+ "blue"
+ );
+
+ var keyboard_row = new DescriptionRow (
+ _("A built-in or USB keyboard will be required to type the encryption password each time this device is turned on."),
+ "input-keyboard-symbolic",
+ "slate"
+ );
+
+ var description_box = new Gtk.Box (VERTICAL, 32) {
+ valign = CENTER
};
-
- var keyboard_image = new Gtk.Image.from_icon_name ("input-keyboard-symbolic", Gtk.IconSize.LARGE_TOOLBAR);
-
- var keyboard_label = new Gtk.Label (_("A built-in or USB keyboard will be required to type the encryption password each time this device is turned on.")) {
- hexpand = true,
- max_width_chars = 1, // Make Gtk wrap, but not expand the window
- wrap = true,
- xalign = 0
- };
-
- var choice_grid = new Gtk.Grid () {
- column_spacing = 12,
- row_spacing = 32
- };
- choice_grid.attach (details_label, 0, 0, 2);
- choice_grid.attach (protect_image, 0, 1);
- choice_grid.attach (protect_label, 1, 1);
- choice_grid.attach (restart_image, 0, 2);
- choice_grid.attach (restart_label, 1, 2);
- choice_grid.attach (keyboard_image, 0, 3);
- choice_grid.attach (keyboard_label, 1, 3);
+ description_box.add (details_label);
+ description_box.add (protect_row);
+ description_box.add (restart_row);
+ description_box.add (keyboard_row);
var description = new Gtk.Label (
_("If you forget the encryption password, you will not be able to recover data. This is a unique password for this device, not the password for your user account.")
@@ -135,7 +122,9 @@ public class EncryptView : AbstractInstallerView {
confirm_entry_revealer = new ErrorRevealer (".");
confirm_entry_revealer.label_widget.get_style_context ().add_class (Gtk.STYLE_CLASS_ERROR);
- var password_box = new Gtk.Box (VERTICAL, 3);
+ var password_box = new Gtk.Box (VERTICAL, 3) {
+ valign = CENTER
+ };
password_box.add (description);
password_box.add (pw_label);
password_box.add (pw_entry);
@@ -146,12 +135,10 @@ public class EncryptView : AbstractInstallerView {
password_box.add (confirm_entry_revealer);
var stack = new Gtk.Stack () {
- vhomogeneous = false,
- transition_type = Gtk.StackTransitionType.SLIDE_LEFT_RIGHT,
- valign = Gtk.Align.CENTER,
+ transition_type = SLIDE_LEFT_RIGHT,
vexpand = true
};
- stack.add (choice_grid);
+ stack.add (description_box);
stack.add (password_box);
content_area.column_homogeneous = true;
@@ -177,7 +164,7 @@ public class EncryptView : AbstractInstallerView {
next_button.grab_focus ();
back_button.clicked.connect (() => {
- stack.visible_child = choice_grid;
+ stack.visible_child = description_box;
next_button.label = _(SKIP_STRING);
next_button.sensitive = true;
back_button.hide ();
diff --git a/src/Views/PartitioningView.vala b/src/Views/PartitioningView.vala
index f008c9915..0b736004a 100644
--- a/src/Views/PartitioningView.vala
+++ b/src/Views/PartitioningView.vala
@@ -78,7 +78,7 @@ public class Installer.PartitioningView : AbstractInstallerView {
var recommended_row = new DescriptionRow (
_("It is also recommended to select a Swap partition."),
- "dialog-information-symbolic",
+ "media-memory-symbolic",
"blue"
);
@@ -340,26 +340,4 @@ public class Installer.PartitioningView : AbstractInstallerView {
array[index] = array[array.size - 1];
return array.remove_at (array.size - 1);
}
-
- private class DescriptionRow : Gtk.Box {
- public DescriptionRow (string description, string icon_name, string color) {
- var image = new Gtk.Image.from_icon_name (icon_name, MENU) {
- valign = Gtk.Align.START
- };
- image.get_style_context ().add_class (Granite.STYLE_CLASS_ACCENT);
- image.get_style_context ().add_class (color);
-
- var description_label = new Gtk.Label (description) {
- hexpand = true,
- max_width_chars = 1, // Make Gtk wrap, but not expand the window
- use_markup = true,
- wrap = true,
- xalign = 0
- };
-
- spacing = 12;
- add (image);
- add (description_label);
- }
- }
}
diff --git a/src/Widgets/DescriptionRow.vala b/src/Widgets/DescriptionRow.vala
new file mode 100644
index 000000000..60e6c90c3
--- /dev/null
+++ b/src/Widgets/DescriptionRow.vala
@@ -0,0 +1,39 @@
+/*
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ * SPDX-FileCopyrightText: 2024 elementary, Inc. (https://elementary.io)
+ */
+
+public class DescriptionRow : Gtk.Box {
+ public string description { get; construct; }
+ public string icon_name { get; construct; }
+ public string color { get; construct; }
+
+ public DescriptionRow (string description, string icon_name, string color) {
+ Object (
+ color: color,
+ description: description,
+ icon_name: icon_name
+ );
+ }
+
+ construct {
+ var image = new Gtk.Image.from_icon_name (icon_name, LARGE_TOOLBAR) {
+ pixel_size = 24,
+ valign = START
+ };
+ image.get_style_context ().add_class (Granite.STYLE_CLASS_ACCENT);
+ image.get_style_context ().add_class (color);
+
+ var description_label = new Gtk.Label (description) {
+ hexpand = true,
+ max_width_chars = 1, // Make Gtk wrap, but not expand the window
+ use_markup = true,
+ wrap = true,
+ xalign = 0
+ };
+
+ spacing = 12;
+ add (image);
+ add (description_label);
+ }
+}
diff --git a/src/meson.build b/src/meson.build
index 432f98b23..68ab4bbd7 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -21,6 +21,7 @@ vala_files = [
'Views/TryInstallView.vala',
'Views/SuccessView.vala',
'Widgets/DecryptMenu.vala',
+ 'Widgets/DescriptionRow.vala',
'Widgets/DiskBar.vala',
'Widgets/DiskGrid.vala',
'Widgets/InstallTypeGrid.vala',