+static void boot_editor_device_select_change(void *arg, int idx)
+{
+ struct boot_editor *boot_editor = arg;
+ if (idx == -1)
+ boot_editor->selected_device = NULL;
+ else
+ boot_editor->selected_device =
+ boot_editor->cui->sysinfo->blockdevs[idx]->name;
+}
+
+static void boot_editor_populate_device_select(struct boot_editor *boot_editor,
+ const struct system_info *sysinfo)
+{
+ struct nc_widget_select *select = boot_editor->widgets.device_f;
+ unsigned int i;
+ bool selected;
+
+ widget_select_drop_options(select);
+
+ for (i = 0; i < sysinfo->n_blockdevs; i++) {
+ struct blockdev_info *bd_info = sysinfo->blockdevs[i];
+ const char *name;
+
+ name = talloc_asprintf(boot_editor, "%s [%s]",
+ bd_info->name, bd_info->uuid);
+ selected = boot_editor->selected_device &&
+ !strcmp(bd_info->name,
+ boot_editor->selected_device);
+
+ widget_select_add_option(boot_editor->widgets.device_f,
+ i, name, selected);
+ }
+
+ /* If we're editing an existing option, the paths will be fully-
+ * resolved. In this case, we want the manual device pre-selected.
+ * However, we only do this if the widget hasn't been manually
+ * changed. */
+ selected = boot_editor->item && !boot_editor->selected_device;
+
+ widget_select_add_option(boot_editor->widgets.device_f,
+ -1, "Specify paths/URLs manually", selected);
+}
+