]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
restore color palette when closing window
authorRay Strode <rstrode@redhat.com>
Thu, 26 Jun 2008 20:43:52 +0000 (16:43 -0400)
committerRay Strode <rstrode@redhat.com>
Thu, 26 Jun 2008 20:45:06 +0000 (16:45 -0400)
We should probably do it when changing vts as well

TODO
src/libplybootsplash/ply-window.c

diff --git a/TODO b/TODO
index 81ee87c4712dcc59607e4578ef3f21fcd8612a71..70748247be2ec17bc860898e46a32ba25dcfbe95 100644 (file)
--- a/TODO
+++ b/TODO
@@ -9,4 +9,4 @@
 - rotate boot.log per boot cycle (might be easiest to just fork/exec out to logrotate directly)
 - fix error handling.  In particular, ply_open_module gets it completely wrong (replies on errno instead of dlerror())
 - consider moving text code from ply-window to a ply-text-buffer analog of ply-frame-buffer
-- restore text color palette on exit
+- maybe watch for VT switches and do things like restoring text color palette and stopping drawing the framebuffer
index b29dce75f2cc133d07edf5262c4b777f30e24652..23db760f5a62253bbf1828e9bd42d8c975329368 100644 (file)
@@ -104,6 +104,7 @@ struct _ply_window
   ply_window_color_t foreground_color;
   ply_window_color_t background_color;
 
+  uint8_t original_color_palette[TEXT_PALETTE_SIZE];
   uint8_t color_palette[TEXT_PALETTE_SIZE];
 
   int number_of_text_rows;
@@ -379,6 +380,22 @@ ply_window_change_color_palette (ply_window_t *window)
   return true;
 }
 
+static void
+ply_window_save_color_palette (ply_window_t *window)
+{
+  memcpy (window->original_color_palette, window->color_palette,
+          TEXT_PALETTE_SIZE);
+}
+
+static void
+ply_window_restore_color_palette (ply_window_t *window)
+{
+  memcpy (window->color_palette, window->original_color_palette,
+          TEXT_PALETTE_SIZE);
+
+  ply_window_change_color_palette (window);
+}
+
 bool
 ply_window_open (ply_window_t *window)
 {
@@ -410,6 +427,8 @@ ply_window_open (ply_window_t *window)
   if (!ply_window_look_up_color_palette (window))
     return false;
 
+  ply_window_save_color_palette (window);
+
   ply_window_hide_text_cursor (window);
   ply_window_set_text_cursor_position (window, 0, 0);
 
@@ -436,6 +455,7 @@ ply_window_open (ply_window_t *window)
 void
 ply_window_close (ply_window_t *window)
 {
+  ply_window_restore_color_palette (window);
   ply_window_set_text_cursor_position (window, 0, 0);
 
   if (ply_frame_buffer_device_is_open (window->frame_buffer))