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_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 (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);
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);
}
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':
#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>
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;
+
+ 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);
return 0x0d;
if (cur.right)
return GRUB_TERM_ESC;
- if (y > 0)
+ if (y > delta)
return GRUB_TERM_KEY_DOWN;
- if (y < 0)
+ if (y < -delta)
return GRUB_TERM_KEY_UP;
}
}
}
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)