|
|
f96e0b |
From a4ff5d5fe50365bd4ba31addc3fa67b59aa59d78 Mon Sep 17 00:00:00 2001
|
|
|
f96e0b |
From: Vladimir Testov <vladimir.testov@rosalab.ru>
|
|
|
f96e0b |
Date: Mon, 29 Apr 2013 13:40:11 +0200
|
|
|
f96e0b |
Subject: [PATCH 392/482] * grub-core/gfxmenu/gui_list.c: Refresh
|
|
|
f96e0b |
first_shown_entry value when cached view is reused. *
|
|
|
f96e0b |
grub-core/gfxmenu/view.c: Call the refresh procedure for all open boot
|
|
|
f96e0b |
menus.
|
|
|
f96e0b |
|
|
|
f96e0b |
---
|
|
|
f96e0b |
ChangeLog | 7 +++++++
|
|
|
f96e0b |
grub-core/gfxmenu/gui_list.c | 13 ++++++++++++-
|
|
|
f96e0b |
grub-core/gfxmenu/view.c | 22 ++++++++++++++++++++++
|
|
|
f96e0b |
include/grub/gui.h | 2 ++
|
|
|
f96e0b |
4 files changed, 43 insertions(+), 1 deletion(-)
|
|
|
f96e0b |
|
|
|
f96e0b |
diff --git a/ChangeLog b/ChangeLog
|
|
|
f96e0b |
index eff0b6b..86effa0 100644
|
|
|
f96e0b |
--- a/ChangeLog
|
|
|
f96e0b |
+++ b/ChangeLog
|
|
|
f96e0b |
@@ -1,3 +1,10 @@
|
|
|
f96e0b |
+2013-04-29 Vladimir Testov <vladimir.testov@rosalab.ru>
|
|
|
f96e0b |
+
|
|
|
f96e0b |
+ * grub-core/gfxmenu/gui_list.c: Refresh first_shown_entry value when
|
|
|
f96e0b |
+ cached view is reused.
|
|
|
f96e0b |
+ * grub-core/gfxmenu/view.c: Call the refresh procedure for all
|
|
|
f96e0b |
+ open boot menus.
|
|
|
f96e0b |
+
|
|
|
f96e0b |
2013-04-29 Vladimir Serbinenko <phcoder@gmail.com>
|
|
|
f96e0b |
|
|
|
f96e0b |
Unify more code in grub-install_header.
|
|
|
f96e0b |
diff --git a/grub-core/gfxmenu/gui_list.c b/grub-core/gfxmenu/gui_list.c
|
|
|
f96e0b |
index 1982d9a..a06603b 100644
|
|
|
f96e0b |
--- a/grub-core/gfxmenu/gui_list.c
|
|
|
f96e0b |
+++ b/grub-core/gfxmenu/gui_list.c
|
|
|
f96e0b |
@@ -541,6 +541,16 @@ list_set_view_info (void *vself,
|
|
|
f96e0b |
self->view = view;
|
|
|
f96e0b |
}
|
|
|
f96e0b |
|
|
|
f96e0b |
+/* Refresh list variables */
|
|
|
f96e0b |
+static void
|
|
|
f96e0b |
+list_refresh_info (void *vself,
|
|
|
f96e0b |
+ grub_gfxmenu_view_t view)
|
|
|
f96e0b |
+{
|
|
|
f96e0b |
+ list_impl_t self = vself;
|
|
|
f96e0b |
+ if (view->nested)
|
|
|
f96e0b |
+ self->first_shown_index = 0;
|
|
|
f96e0b |
+}
|
|
|
f96e0b |
+
|
|
|
f96e0b |
static struct grub_gui_component_ops list_comp_ops =
|
|
|
f96e0b |
{
|
|
|
f96e0b |
.destroy = list_destroy,
|
|
|
f96e0b |
@@ -557,7 +567,8 @@ static struct grub_gui_component_ops list_comp_ops =
|
|
|
f96e0b |
|
|
|
f96e0b |
static struct grub_gui_list_ops list_ops =
|
|
|
f96e0b |
{
|
|
|
f96e0b |
- .set_view_info = list_set_view_info
|
|
|
f96e0b |
+ .set_view_info = list_set_view_info,
|
|
|
f96e0b |
+ .refresh_list = list_refresh_info
|
|
|
f96e0b |
};
|
|
|
f96e0b |
|
|
|
f96e0b |
grub_gui_component_t
|
|
|
f96e0b |
diff --git a/grub-core/gfxmenu/view.c b/grub-core/gfxmenu/view.c
|
|
|
f96e0b |
index 6de96ca..475fc76 100644
|
|
|
f96e0b |
--- a/grub-core/gfxmenu/view.c
|
|
|
f96e0b |
+++ b/grub-core/gfxmenu/view.c
|
|
|
f96e0b |
@@ -237,6 +237,27 @@ update_menu_components (grub_gfxmenu_view_t view)
|
|
|
f96e0b |
}
|
|
|
f96e0b |
|
|
|
f96e0b |
static void
|
|
|
f96e0b |
+refresh_menu_visit (grub_gui_component_t component,
|
|
|
f96e0b |
+ void *userdata)
|
|
|
f96e0b |
+{
|
|
|
f96e0b |
+ grub_gfxmenu_view_t view;
|
|
|
f96e0b |
+ view = userdata;
|
|
|
f96e0b |
+ if (component->ops->is_instance (component, "list"))
|
|
|
f96e0b |
+ {
|
|
|
f96e0b |
+ grub_gui_list_t list = (grub_gui_list_t) component;
|
|
|
f96e0b |
+ list->ops->refresh_list (list, view);
|
|
|
f96e0b |
+ }
|
|
|
f96e0b |
+}
|
|
|
f96e0b |
+
|
|
|
f96e0b |
+/* Refresh list information (useful for submenus) */
|
|
|
f96e0b |
+static void
|
|
|
f96e0b |
+refresh_menu_components (grub_gfxmenu_view_t view)
|
|
|
f96e0b |
+{
|
|
|
f96e0b |
+ grub_gui_iterate_recursively ((grub_gui_component_t) view->canvas,
|
|
|
f96e0b |
+ refresh_menu_visit, view);
|
|
|
f96e0b |
+}
|
|
|
f96e0b |
+
|
|
|
f96e0b |
+static void
|
|
|
f96e0b |
draw_message (grub_gfxmenu_view_t view)
|
|
|
f96e0b |
{
|
|
|
f96e0b |
char *text = view->progress_message_text;
|
|
|
f96e0b |
@@ -294,6 +315,7 @@ grub_gfxmenu_view_draw (grub_gfxmenu_view_t view)
|
|
|
f96e0b |
view->screen.x, view->screen.y,
|
|
|
f96e0b |
view->screen.width, view->screen.height);
|
|
|
f96e0b |
|
|
|
f96e0b |
+ refresh_menu_components (view);
|
|
|
f96e0b |
update_menu_components (view);
|
|
|
f96e0b |
|
|
|
f96e0b |
grub_gfxmenu_view_redraw (view, &view->screen);
|
|
|
f96e0b |
diff --git a/include/grub/gui.h b/include/grub/gui.h
|
|
|
f96e0b |
index ef0795c..4b8ec89 100644
|
|
|
f96e0b |
--- a/include/grub/gui.h
|
|
|
f96e0b |
+++ b/include/grub/gui.h
|
|
|
f96e0b |
@@ -67,6 +67,8 @@ struct grub_gui_list_ops
|
|
|
f96e0b |
{
|
|
|
f96e0b |
void (*set_view_info) (void *self,
|
|
|
f96e0b |
grub_gfxmenu_view_t view);
|
|
|
f96e0b |
+ void (*refresh_list) (void *self,
|
|
|
f96e0b |
+ grub_gfxmenu_view_t view);
|
|
|
f96e0b |
};
|
|
|
f96e0b |
|
|
|
f96e0b |
struct grub_gui_progress_ops
|
|
|
f96e0b |
--
|
|
|
f96e0b |
1.8.2.1
|
|
|
f96e0b |
|