]> glassweightruler.freedombox.rocks Git - Ventoy.git/commitdiff
update for scroll menu text
authorlongpanda <admin@ventoy.net>
Wed, 30 Mar 2022 08:35:07 +0000 (16:35 +0800)
committerlongpanda <admin@ventoy.net>
Wed, 30 Mar 2022 08:35:07 +0000 (16:35 +0800)
GRUB2/MOD_SRC/grub-2.04/grub-core/fs/fshelp.c
GRUB2/MOD_SRC/grub-2.04/grub-core/gfxmenu/view.c
GRUB2/MOD_SRC/grub-2.04/grub-core/kern/disk.c
GRUB2/MOD_SRC/grub-2.04/grub-core/normal/menu.c
GRUB2/MOD_SRC/grub-2.04/grub-core/term/efi/mouse.c
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c

index 9a98c04bd5be9cfb18e784ec64891a02d3b689bb..f5b6772e2f85d602977ecf9513e39c0ac0edf6d2 100644 (file)
@@ -426,7 +426,7 @@ grub_fshelp_read_file (grub_disk_t disk, grub_fshelp_node_t node,
          if (grub_errno)
            return -1;
        }
          if (grub_errno)
            return -1;
        }
-      else if (read_hook != (void *)grub_disk_blocklist_read)
+      else if (read_hook != (grub_disk_read_hook_t)grub_disk_blocklist_read)
        grub_memset (buf, 0, blockend);
 
       buf += blocksize - skipfirst;
        grub_memset (buf, 0, blockend);
 
       buf += blocksize - skipfirst;
index 51fb1752e57370c9198ae45d3a5322afb98eaf59..b69f0991c7a90627817654427e2bdf310cf9b12f 100644 (file)
@@ -437,16 +437,21 @@ grub_gfxmenu_scroll_chosen_entry (void *data, int diren)
   grub_gfxmenu_view_t view = data;
   const char *item_title;
   int off;
   grub_gfxmenu_view_t view = data;
   const char *item_title;
   int off;
+  int max;
 
   if (!view->menu->size)
     return;
 
   item_title = grub_menu_get_entry (view->menu, view->selected)->title;
   off = view->menu_title_offset[view->selected] + diren;
 
   if (!view->menu->size)
     return;
 
   item_title = grub_menu_get_entry (view->menu, view->selected)->title;
   off = view->menu_title_offset[view->selected] + diren;
-
-  if (off < 0
-      || off > grub_utf8_get_num_code (item_title, grub_strlen(item_title)))
-    return;
+  max = grub_utf8_get_num_code (item_title, grub_strlen(item_title));
+
+  if (diren == 1000000)
+    off = (max >= 20) ? (max - 20) : 0;
+  else if (off < 0)
+    off = 0;
+  else if (off > max)
+    off = max;
 
   view->menu_title_offset[view->selected] = off;
   grub_gfxmenu_redraw_menu (view);
 
   view->menu_title_offset[view->selected] = off;
   grub_gfxmenu_redraw_menu (view);
index e3da637fb4263dd72ba3b5ed3c99df34fdb7a16a..04d6ce76db085eaa1ca027621124589912f0b484 100644 (file)
@@ -471,7 +471,7 @@ grub_err_t
 grub_disk_read (grub_disk_t disk, grub_disk_addr_t sector,
                grub_off_t offset, grub_size_t size, void *buf)
 {
 grub_disk_read (grub_disk_t disk, grub_disk_addr_t sector,
                grub_off_t offset, grub_size_t size, void *buf)
 {
-    if (disk->read_hook == (void *)grub_disk_blocklist_read)
+    if (disk->read_hook == (grub_disk_read_hook_t)grub_disk_blocklist_read)
     {
         return grub_disk_blocklist_read((ventoy_img_chunk_list *)disk->read_hook_data, sector, size, disk->log_sector_size);
     }
     {
         return grub_disk_blocklist_read((ventoy_img_chunk_list *)disk->read_hook_data, sector, size, disk->log_sector_size);
     }
index 7781ab3bd34ec9bf94c3ef085c0f96b0a9b4d2d2..62b4e83577fdf264f5274c1bdce56abdada16229 100644 (file)
@@ -861,6 +861,12 @@ run_menu (grub_menu_t menu, int nested, int *auto_boot)
            case GRUB_TERM_KEY_LEFT:
              menu_scroll_chosen_entry (-1);
              break;
            case GRUB_TERM_KEY_LEFT:
              menu_scroll_chosen_entry (-1);
              break;
+           case GRUB_TERM_CTRL | GRUB_TERM_KEY_RIGHT:
+             menu_scroll_chosen_entry (1000000);
+             break;
+           case GRUB_TERM_CTRL | GRUB_TERM_KEY_LEFT:
+             menu_scroll_chosen_entry (-1000000);
+             break;
 
            case '\n':
            case '\r':
 
            case '\n':
            case '\r':
index c4e3ace5ab0babd34a4b774cd75ebc503edfa4e1..957ae17f59dcc8f7e8172554ae9328498ec14886 100644 (file)
@@ -23,6 +23,7 @@
 #include <grub/command.h>
 #include <grub/i18n.h>
 #include <grub/err.h>
 #include <grub/command.h>
 #include <grub/i18n.h>
 #include <grub/err.h>
+#include <grub/env.h>
 #include <grub/efi/efi.h>
 #include <grub/efi/api.h>
 
 #include <grub/efi/efi.h>
 #include <grub/efi/api.h>
 
@@ -159,9 +160,16 @@ grub_mouse_getkey (struct grub_term_input *term)
   grub_efi_mouse_prot_t *mouse = term->data;
   //int x;
   int y;
   grub_efi_mouse_prot_t *mouse = term->data;
   //int x;
   int y;
+  int delta = 0;
+  const char *env;
   grub_efi_uintn_t i;
   if (!mouse)
     return GRUB_TERM_NO_KEY;
   grub_efi_uintn_t i;
   if (!mouse)
     return GRUB_TERM_NO_KEY;
+
+  env = grub_env_get("mouse_delta");
+  if (env)
+    delta = (int)grub_strtol(env, NULL, 10);
+  
   for (i = 0; i < mouse->count; i++)
   {
     efi_call_2 (mouse->mouse[i]->get_state, mouse->mouse[i], &cur);
   for (i = 0; i < mouse->count; i++)
   {
     efi_call_2 (mouse->mouse[i]->get_state, mouse->mouse[i], &cur);
@@ -172,9 +180,9 @@ grub_mouse_getkey (struct grub_term_input *term)
         return 0x0d;
       if (cur.right)
         return GRUB_TERM_ESC;
         return 0x0d;
       if (cur.right)
         return GRUB_TERM_ESC;
-      if (y > 0)
+      if (y > delta)
         return GRUB_TERM_KEY_DOWN;
         return GRUB_TERM_KEY_DOWN;
-      if (y < 0)
+      if (y < -delta)
         return GRUB_TERM_KEY_UP;
     }
   }
         return GRUB_TERM_KEY_UP;
     }
   }
index 61703ef482b2fd9d300c4d5cbde32527df5da4ee..c5897d9e8da99b57f39e8339880012162cab5149 100644 (file)
@@ -3152,7 +3152,7 @@ int ventoy_get_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, gr
     }
     else
     {
     }
     else
     {
-        file->read_hook = (void *)grub_disk_blocklist_read;
+        file->read_hook = (grub_disk_read_hook_t)grub_disk_blocklist_read;
         file->read_hook_data = chunklist;
 
         for (size = file->size; size > 0; size -= read)
         file->read_hook_data = chunklist;
 
         for (size = file->size; size > 0; size -= read)