]> git.proxmox.com Git - grub2.git/commitdiff
* grub-core/gfxmenu/gui_list.c: Refresh first_shown_entry value when
authorVladimir Testov <vladimir.testov@rosalab.ru>
Mon, 29 Apr 2013 11:40:11 +0000 (13:40 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 29 Apr 2013 11:40:11 +0000 (13:40 +0200)
cached view is reused.
* grub-core/gfxmenu/view.c: Call the refresh procedure for all
open boot menus.

ChangeLog
grub-core/gfxmenu/gui_list.c
grub-core/gfxmenu/view.c
include/grub/gui.h

index eff0b6b0fda6b2adcb1be5c9343abe2757080d0a..86effa0fb70798c84857164e499c37724cee3168 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2013-04-29 Vladimir Testov <vladimir.testov@rosalab.ru>
+
+       * grub-core/gfxmenu/gui_list.c: Refresh first_shown_entry value when
+       cached view is reused.
+       * grub-core/gfxmenu/view.c: Call the refresh procedure for all
+       open boot menus.
+
 2013-04-29  Vladimir Serbinenko  <phcoder@gmail.com>
 
        Unify more code in grub-install_header.
index 1982d9a40d256bacbbea57eb2da84f745302e0b3..a06603b0bc60c9dcd216c785440057f8e9ba0d11 100644 (file)
@@ -541,6 +541,16 @@ list_set_view_info (void *vself,
   self->view = view;
 }
 
+/* Refresh list variables */
+static void
+list_refresh_info (void *vself,
+                   grub_gfxmenu_view_t view)
+{
+  list_impl_t self = vself;
+  if (view->nested)
+    self->first_shown_index = 0;
+}
+
 static struct grub_gui_component_ops list_comp_ops =
   {
     .destroy = list_destroy,
@@ -557,7 +567,8 @@ static struct grub_gui_component_ops list_comp_ops =
 
 static struct grub_gui_list_ops list_ops =
 {
-  .set_view_info = list_set_view_info
+  .set_view_info = list_set_view_info,
+  .refresh_list = list_refresh_info
 };
 
 grub_gui_component_t
index 6de96ca006cf236e844986b4b0dd816d819ce30c..475fc76c5e3e8e617b84037c87de3d42abbecc88 100644 (file)
@@ -236,6 +236,27 @@ update_menu_components (grub_gfxmenu_view_t view)
                                 update_menu_visit, view);
 }
 
+static void
+refresh_menu_visit (grub_gui_component_t component,
+              void *userdata)
+{
+  grub_gfxmenu_view_t view;
+  view = userdata;
+  if (component->ops->is_instance (component, "list"))
+    {
+      grub_gui_list_t list = (grub_gui_list_t) component;
+      list->ops->refresh_list (list, view);
+    }
+}
+
+/* Refresh list information (useful for submenus) */
+static void
+refresh_menu_components (grub_gfxmenu_view_t view)
+{
+  grub_gui_iterate_recursively ((grub_gui_component_t) view->canvas,
+                                refresh_menu_visit, view);
+}
+
 static void
 draw_message (grub_gfxmenu_view_t view)
 {
@@ -294,6 +315,7 @@ grub_gfxmenu_view_draw (grub_gfxmenu_view_t view)
                          view->screen.x, view->screen.y,
                          view->screen.width, view->screen.height);
 
+  refresh_menu_components (view);
   update_menu_components (view);
 
   grub_gfxmenu_view_redraw (view, &view->screen);
index ef0795cf7c1845a0a099aec250c557dfced8c342..4b8ec8965e97c0eb66455a0bb5737ab1f0011dc1 100644 (file)
@@ -67,6 +67,8 @@ struct grub_gui_list_ops
 {
   void (*set_view_info) (void *self,
                          grub_gfxmenu_view_t view);
+  void (*refresh_list) (void *self,
+                        grub_gfxmenu_view_t view);
 };
 
 struct grub_gui_progress_ops