]> glassweightruler.freedombox.rocks Git - Ventoy.git/blobdiff - LinuxGUI/Ventoy2Disk/GTK/ventoy_gtk.c
1.1.07 release
[Ventoy.git] / LinuxGUI / Ventoy2Disk / GTK / ventoy_gtk.c
index e705247127527de54e957139fba96a69f8c4949a..bb9215a221d2943ffba576f44d0dfc4ede63342d 100644 (file)
@@ -26,6 +26,7 @@
 #include <errno.h>
 #include <time.h>
 #include <unistd.h>
 #include <errno.h>
 #include <time.h>
 #include <unistd.h>
+#include <linux/limits.h>
 
 #include <ventoy_define.h>
 #include <ventoy_json.h>
 
 #include <ventoy_define.h>
 #include <ventoy_json.h>
@@ -34,6 +35,7 @@
 #include <ventoy_http.h>
 
 #include <gtk/gtk.h>
 #include <ventoy_http.h>
 
 #include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
 #include "ventoy_gtk.h"
 
 int g_secure_boot_support = 0;
 #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;
 
 {
     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);        
     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
     {
     }
     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);
         }
         {
             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;
 static ventoy_disk *select_active_dev(const char *select, int *activeid)
 {
     int i;
+    int alldev;
     ventoy_disk *cur = NULL;
 
     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;
     /* 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;
             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;
     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;
         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;
     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;
         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 */
     }
 
     /* 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)
 }
 
 static void fill_dev_list(const char *select)
@@ -466,12 +495,12 @@ void on_clear_ventoy(GtkMenuItem *menuItem, gpointer data)
         return;
     }
 
         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;
     }
 
     {
         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;
     }
     {
         return;
     }
@@ -613,6 +642,8 @@ static int install_proc(ventoy_disk *cur)
 void on_button_install_clicked(GtkWidget *widget, gpointer data) 
 {
     int active;
 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())
     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;
 
 
     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 (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;
     }
 
     {
         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;
     }
     {
         return;
     }
@@ -737,7 +795,7 @@ void on_button_update_clicked(GtkWidget *widget, gpointer data)
         return;
     }
 
         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;
     }
     {
         return;
     }
@@ -884,7 +942,7 @@ void on_part_cfg_ok(GtkWidget *widget, gpointer data)
 
         for (pos = input; *pos; pos++)
         {
 
         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;
             {
                 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);
 }
 
     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;
 void on_init_window(GtkBuilder *pBuilder)
 {
     GSList *pGroup = NULL;
+    GtkAccelGroup *agMain = NULL;
     char version[512];
 
     vlog("on_init_window ...\n");
     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);
 
     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;
     fill_dev_list(NULL);
 
     return;