All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Call background_image after terminal_output gfxterm
@ 2010-07-05 15:24 Colin Watson
  2010-07-05 17:03 ` Colin Watson
  0 siblings, 1 reply; 3+ messages in thread
From: Colin Watson @ 2010-07-05 15:24 UTC (permalink / raw)
  To: grub-devel

GRUB_BACKGROUND doesn't work right now, as background_image only works
after 'terminal_output gfxterm' has been called.

I looked at lifting that restriction, but it seemed moderately complex
to do so and it wasn't clear what the semantics ought to be if you tear
down gfxterm and re-initialise it (would we need to have a new option to
background_image to delete the cached bitmap or something?); and after
all background_image is documented as loading the background image for
the *active* terminal, not for some future terminal.

Instead of all that, it seems best to just arrange not to run
background_image until gfxterm has been set as the active output
terminal.  This patch does that.  It means that several commands are now
unconditional at run-time when they were previously conditional on
loadfont succeeding, but I think that's OK; none of those commands will
result in different behaviour unless gfxterm is the active output
terminal anyway.

2010-07-05  Colin Watson  <cjwatson@ubuntu.com>

	* util/grub.d/00_header.in: Process GRUB_THEME and GRUB_BACKGROUND
	after setting gfxterm as the active terminal.  GRUB_BACKGROUND
	doesn't work otherwise.

=== modified file 'util/grub.d/00_header.in'
--- util/grub.d/00_header.in	2010-06-29 15:20:49 +0000
+++ util/grub.d/00_header.in	2010-07-05 15:15:51 +0000
@@ -127,40 +127,74 @@ if loadfont `make_system_path_relative_t
   set gfxmode=${GRUB_GFXMODE}
   load_video
   insmod gfxterm
+fi
 EOF
+fi
+
+case x${GRUB_TERMINAL_INPUT} in
+  x)
+    # Just use the native terminal
+  ;;
+  x*)
+    cat << EOF
+if terminal_input ${GRUB_TERMINAL_INPUT} ; then true ; else
+  # For backward compatibility with versions of terminal.mod that don't
+  # understand terminal_input
+  terminal ${GRUB_TERMINAL_INPUT}
+fi
+EOF
+  ;;
+esac
+
+case x${GRUB_TERMINAL_OUTPUT} in
+  x)
+    # Just use the native terminal
+  ;;
+  x*)
+    cat << EOF
+if terminal_output ${GRUB_TERMINAL_OUTPUT} ; then true ; else
+  # For backward compatibility with versions of terminal.mod that don't
+  # understand terminal_output
+  terminal ${GRUB_TERMINAL_OUTPUT}
+fi
+EOF
+  ;;
+esac
+
+if [ "x$gfxterm" = x1 ]; then
     if [ "x$GRUB_THEME" != x ] && [ -f "$GRUB_THEME" ] \
 	&& is_path_readable_by_grub "$GRUB_THEME"; then
 	echo "Found theme: $GRUB_THEME" >&2
 	prepare_grub_to_access_device `${grub_probe} --target=device "$GRUB_THEME"` | sed -e "s/^/  /"
 	cat << EOF
-  insmod gfxmenu
+insmod gfxmenu
 EOF
 	themedir="`dirname "$GRUB_THEME"`"
 	for x in "$themedir"/*.pf2 "$themedir"/f/*.pf2; do
 	    if [ -f "$x" ]; then
 		cat << EOF
-  loadfont (\$root)`make_system_path_relative_to_its_root $x`
+loadfont (\$root)`make_system_path_relative_to_its_root $x`
 EOF
 	    fi
 	done
 	if [ x"`echo "$themedir"/*.jpg`" != x"$themedir/*.jpg" ] || [ x"`echo "$themedir"/*.jpeg`" != x"$themedir/*.jpeg" ]; then
 	    cat << EOF
-  insmod jpeg
+insmod jpeg
 EOF
 	fi
 	if [ x"`echo "$themedir"/*.png`" != x"$themedir/*.png" ]; then
 	    cat << EOF
-  insmod png
+insmod png
 EOF
 	fi
 	if [ x"`echo "$themedir"/*.tga`" != x"$themedir/*.tga" ]; then
 	    cat << EOF
-  insmod tga
+insmod tga
 EOF
 	fi
 	    
 	cat << EOF
-  set theme=(\$root)`make_system_path_relative_to_its_root $GRUB_THEME`
+set theme=(\$root)`make_system_path_relative_to_its_root $GRUB_THEME`
 EOF
     elif [ "x$GRUB_BACKGROUND" != x ] && [ -f "$GRUB_BACKGROUND" ] \
 	    && is_path_readable_by_grub "$GRUB_BACKGROUND"; then
@@ -173,45 +207,12 @@ EOF
 	esac
 	prepare_grub_to_access_device `${grub_probe} --target=device "$GRUB_BACKGROUND"` | sed -e "s/^/  /"
 	cat << EOF
-  insmod $reader
-  background_image -m stretch `make_system_path_relative_to_its_root "$GRUB_BACKGROUND"`
+insmod $reader
+background_image -m stretch `make_system_path_relative_to_its_root "$GRUB_BACKGROUND"`
 EOF
     fi
-    cat << EOF
-fi
-EOF
 fi
 
-case x${GRUB_TERMINAL_INPUT} in
-  x)
-    # Just use the native terminal
-  ;;
-  x*)
-    cat << EOF
-if terminal_input ${GRUB_TERMINAL_INPUT} ; then true ; else
-  # For backward compatibility with versions of terminal.mod that don't
-  # understand terminal_input
-  terminal ${GRUB_TERMINAL_INPUT}
-fi
-EOF
-  ;;
-esac
-
-case x${GRUB_TERMINAL_OUTPUT} in
-  x)
-    # Just use the native terminal
-  ;;
-  x*)
-    cat << EOF
-if terminal_output ${GRUB_TERMINAL_OUTPUT} ; then true ; else
-  # For backward compatibility with versions of terminal.mod that don't
-  # understand terminal_output
-  terminal ${GRUB_TERMINAL_OUTPUT}
-fi
-EOF
-  ;;
-esac
-
 # Gettext variables and module
 if [ "x${LANG}" != "xC" ] && [ -d "${locale_dir}" ] ; then
     prepare_grub_to_access_device $(${grub_probe} --target=device ${locale_dir})

-- 
Colin Watson                                       [cjwatson@ubuntu.com]


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-07-06  0:03 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-07-05 15:24 [PATCH] Call background_image after terminal_output gfxterm Colin Watson
2010-07-05 17:03 ` Colin Watson
2010-07-06  0:02   ` Vladimir 'φ-coder/phcoder' Serbinenko

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.