]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2010-03-04 Robert Millan <rmh.grub@aybabtu.com>
authorRobert Millan <rmh.grub@aybabtu.com>
Thu, 4 Mar 2010 22:16:34 +0000 (23:16 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 4 Mar 2010 22:16:34 +0000 (23:16 +0100)
Support relative image path in theme file.

* gfxmenu/gui_image.c (grub_gui_image): New member theme_dir.
(image_set_property): Handle theme_dir and relative path.

ChangeLog
gfxmenu/gui_image.c

index e5f1186a967d92fa10c7399c2452c657b5d83c2a..ae4a19108f73481fe99b2bfb1cd66dfe846591e0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2010-03-04  Robert Millan  <rmh.grub@aybabtu.com>
+
+       Support relative image path in theme file.
+
+       * gfxmenu/gui_image.c (grub_gui_image): New member theme_dir.
+       (image_set_property): Handle theme_dir and relative path.
+
 2010-03-04  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * configure.ac: Alias amd64 to x86_64.
index ef8bcbe9afd34a1328bb71095084bd6cac5233ce..3988f4ba81de106802275f14d4233750b47fa19d 100644 (file)
@@ -31,6 +31,7 @@ struct grub_gui_image
   grub_gui_container_t parent;
   grub_video_rect_t bounds;
   char *id;
+  char *theme_dir;
   struct grub_video_bitmap *raw_bitmap;
   struct grub_video_bitmap *bitmap;
 };
@@ -208,8 +209,28 @@ static grub_err_t
 image_set_property (void *vself, const char *name, const char *value)
 {
   grub_gui_image_t self = vself;
-  if (grub_strcmp (name, "file") == 0)
-    return load_image (self, value);
+  if (grub_strcmp (name, "theme_dir") == 0)
+    {
+      grub_free (self->theme_dir);
+      self->theme_dir = grub_strdup (value);
+    }
+  else if (grub_strcmp (name, "file") == 0)
+    {
+      char *absvalue;
+      grub_err_t err;
+
+      /* Resolve to an absolute path.  */
+      if (! self->theme_dir)
+       return grub_error (GRUB_ERR_BAD_ARGUMENT, "unspecified theme_dir");
+      absvalue = grub_resolve_relative_path (self->theme_dir, value);
+      if (! absvalue)
+       return grub_errno;
+
+      err = load_image (self, absvalue);
+      grub_free (absvalue);
+
+      return err;
+    }
   else if (grub_strcmp (name, "id") == 0)
     {
       grub_free (self->id);