X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/dd2411d7d47fd72be78802cb28d6f0ef73785e9e..HEAD:/LinuxGUI/Ventoy2Disk/GTK/ventoy_gtk.c diff --git a/LinuxGUI/Ventoy2Disk/GTK/ventoy_gtk.c b/LinuxGUI/Ventoy2Disk/GTK/ventoy_gtk.c index e705247..bb9215a 100644 --- a/LinuxGUI/Ventoy2Disk/GTK/ventoy_gtk.c +++ b/LinuxGUI/Ventoy2Disk/GTK/ventoy_gtk.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include @@ -34,6 +35,7 @@ #include #include +#include #include "ventoy_gtk.h" int g_secure_boot_support = 0; @@ -201,8 +203,6 @@ void on_secure_boot_toggled(GtkMenuItem *menuItem, gpointer data) { g_secure_boot_support = 1 - g_secure_boot_support; -vlog("on_secure_boot_toggled %d\n",g_secure_boot_support ); - if (g_secure_boot_support) { gtk_widget_show((GtkWidget *)g_image_secure_local); @@ -262,7 +262,7 @@ void on_devlist_changed(GtkWidget *widget, gpointer data) } else { - if (g_secure_boot_support) + if (!g_secure_boot_support) { gtk_check_menu_item_set_active(g_menu_item_secure_boot, 1 - g_secure_boot_support); } @@ -300,14 +300,22 @@ void on_part_style_toggled(GtkMenuItem *menuItem, gpointer data) static ventoy_disk *select_active_dev(const char *select, int *activeid) { int i; + int alldev; ventoy_disk *cur = NULL; + alldev = ventoy_code_get_cur_show_all(); + /* find the match one */ if (select) { for (i = 0; i < g_disk_num; i++) { cur = g_disk_list + i; + if (alldev == 0 && cur->type != VTOY_DEVICE_USB) + { + continue; + } + if (strcmp(cur->disk_name, select) == 0) { *activeid = i; @@ -320,6 +328,11 @@ static ventoy_disk *select_active_dev(const char *select, int *activeid) for (i = 0; i < g_disk_num; i++) { cur = g_disk_list + i; + if (alldev == 0 && cur->type != VTOY_DEVICE_USB) + { + continue; + } + if (cur->vtoydata.ventoy_valid) { *activeid = i; @@ -331,6 +344,11 @@ static ventoy_disk *select_active_dev(const char *select, int *activeid) for (i = 0; i < g_disk_num; i++) { cur = g_disk_list + i; + if (alldev == 0 && cur->type != VTOY_DEVICE_USB) + { + continue; + } + if (cur->type == VTOY_DEVICE_USB) { *activeid = i; @@ -339,8 +357,19 @@ static ventoy_disk *select_active_dev(const char *select, int *activeid) } /* use the first one */ - *activeid = 0; - return g_disk_list; + for (i = 0; i < g_disk_num; i++) + { + cur = g_disk_list + i; + if (alldev == 0 && cur->type != VTOY_DEVICE_USB) + { + continue; + } + + *activeid = i; + return cur; + } + + return NULL; } static void fill_dev_list(const char *select) @@ -466,12 +495,12 @@ void on_clear_ventoy(GtkMenuItem *menuItem, gpointer data) return; } - if (GTK_RESPONSE_CANCEL == msgbox(GTK_MESSAGE_WARNING, GTK_BUTTONS_OK_CANCEL, "STR_INSTALL_TIP")) + if (GTK_RESPONSE_OK != msgbox(GTK_MESSAGE_WARNING, GTK_BUTTONS_OK_CANCEL, "STR_INSTALL_TIP")) { return; } - if (GTK_RESPONSE_CANCEL == msgbox(GTK_MESSAGE_WARNING, GTK_BUTTONS_OK_CANCEL, "STR_INSTALL_TIP2")) + if (GTK_RESPONSE_OK != msgbox(GTK_MESSAGE_WARNING, GTK_BUTTONS_OK_CANCEL, "STR_INSTALL_TIP2")) { return; } @@ -613,6 +642,8 @@ static int install_proc(ventoy_disk *cur) void on_button_install_clicked(GtkWidget *widget, gpointer data) { int active; + long long size; + long long space; ventoy_disk *cur = NULL; if (g_thread_run || ventoy_code_is_busy()) @@ -630,18 +661,45 @@ void on_button_install_clicked(GtkWidget *widget, gpointer data) cur = g_disk_list + active; + if (cur->is4kn) + { + msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "STR_4KN_UNSUPPORTED"); + return; + } + if (ventoy_code_get_cur_part_style() == 0 && cur->size_in_byte > 2199023255552ULL) { msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "STR_DISK_2TB_MBR_ERROR"); return; } - if (GTK_RESPONSE_CANCEL == msgbox(GTK_MESSAGE_WARNING, GTK_BUTTONS_OK_CANCEL, "STR_INSTALL_TIP")) + if (g_preserve_space_check) + { + space = g_preserve_space_number; + if (g_preserve_space_unit == 1) + { + space = space * 1024; + } + else + { + space = space; + } + + size = cur->size_in_byte / SIZE_1MB; + if (size <= space || (size - space) <= (VTOYEFI_PART_BYTES / SIZE_1MB)) + { + msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "STR_SPACE_VAL_INVALID"); + vlog("reserved space value too big ...\n"); + return; + } + } + + if (GTK_RESPONSE_OK != msgbox(GTK_MESSAGE_WARNING, GTK_BUTTONS_OK_CANCEL, "STR_INSTALL_TIP")) { return; } - if (GTK_RESPONSE_CANCEL == msgbox(GTK_MESSAGE_WARNING, GTK_BUTTONS_OK_CANCEL, "STR_INSTALL_TIP2")) + if (GTK_RESPONSE_OK != msgbox(GTK_MESSAGE_WARNING, GTK_BUTTONS_OK_CANCEL, "STR_INSTALL_TIP2")) { return; } @@ -737,7 +795,7 @@ void on_button_update_clicked(GtkWidget *widget, gpointer data) return; } - if (GTK_RESPONSE_CANCEL == msgbox(GTK_MESSAGE_INFO, GTK_BUTTONS_OK_CANCEL, "STR_UPDATE_TIP")) + if (GTK_RESPONSE_OK != msgbox(GTK_MESSAGE_INFO, GTK_BUTTONS_OK_CANCEL, "STR_UPDATE_TIP")) { return; } @@ -884,7 +942,7 @@ void on_part_cfg_ok(GtkWidget *widget, gpointer data) for (pos = input; *pos; pos++) { - if (*pos < '0' || *pos >= '9') + if (*pos < '0' || *pos > '9') { msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "STR_SPACE_VAL_INVALID"); return; @@ -969,9 +1027,16 @@ static void init_part_cfg_window(GtkBuilder *pBuilder) SIGNAL("part_cfg_dlg", "delete_event", on_part_cfg_close); } +static void add_accelerator(GtkAccelGroup *agMain, void *widget, const char *signal, guint accel_key) +{ + gtk_widget_add_accelerator(GTK_WIDGET(widget), signal, agMain, accel_key, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); + gtk_widget_add_accelerator(GTK_WIDGET(widget), signal, agMain, accel_key, GDK_SHIFT_MASK | GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); +} + void on_init_window(GtkBuilder *pBuilder) { GSList *pGroup = NULL; + GtkAccelGroup *agMain = NULL; char version[512]; vlog("on_init_window ...\n"); @@ -1045,6 +1110,15 @@ void on_init_window(GtkBuilder *pBuilder) SIGNAL("menu_item_part_cfg", "activate", on_part_config); SIGNAL("menu_item_clear", "activate", on_clear_ventoy); + agMain = gtk_accel_group_new(); + gtk_window_add_accel_group(GTK_WINDOW(g_topWindow), agMain); + add_accelerator(agMain, g_dev_combobox, "popup", GDK_KEY_d); + add_accelerator(agMain, g_install_button, "clicked", GDK_KEY_i); + add_accelerator(agMain, g_update_button, "clicked", GDK_KEY_u); + add_accelerator(agMain, g_refresh_button, "clicked", GDK_KEY_r); + + gtk_check_menu_item_set_active(g_menu_item_secure_boot, 1 - g_secure_boot_support); + fill_dev_list(NULL); return;