1fa1a8c
From 288c110fa1e35b0bf32f0e3480cf677e83a5bc23 Mon Sep 17 00:00:00 2001
1fa1a8c
From: Ray Strode <rstrode@redhat.com>
1fa1a8c
Date: Thu, 8 Oct 2009 15:22:27 -0400
1fa1a8c
Subject: [PATCH 1/4] [main] Disconnect from tty when hiding splash
1fa1a8c
1fa1a8c
We were still processing keystrokes when the splash screen was
1fa1a8c
hidden. This caused problems because the tty is used by other
1fa1a8c
programs at that time.
1fa1a8c
---
1fa1a8c
 src/main.c |    2 ++
1fa1a8c
 1 files changed, 2 insertions(+), 0 deletions(-)
1fa1a8c
1fa1a8c
diff --git a/src/main.c b/src/main.c
1fa1a8c
index 31f2b1e..6f8c6bd 100644
1fa1a8c
--- a/src/main.c
1fa1a8c
+++ b/src/main.c
1fa1a8c
@@ -549,6 +549,8 @@ remove_displays_and_keyboard (state_t *state)
1fa1a8c
       node = next_node;
1fa1a8c
     }
1fa1a8c
 
1fa1a8c
+  ply_keyboard_stop_watching_for_input (state->keyboard);
1fa1a8c
+  ply_keyboard_free (state->keyboard);
1fa1a8c
   state->keyboard = NULL;
1fa1a8c
 }
1fa1a8c
 
1fa1a8c
-- 
1fa1a8c
1.6.5.rc2
1fa1a8c
1fa1a8c
1fa1a8c
From d8835ebfd35724dd12ec6e6a4c7b303996a37066 Mon Sep 17 00:00:00 2001
1fa1a8c
From: Ray Strode <rstrode@redhat.com>
1fa1a8c
Date: Thu, 8 Oct 2009 15:33:40 -0400
1fa1a8c
Subject: [PATCH 2/4] [terminal] Only close terminal on free when open
1fa1a8c
1fa1a8c
We were closing the terminal twice, causing assertions
1fa1a8c
to blow.
1fa1a8c
---
1fa1a8c
 src/libplybootsplash/ply-terminal.c |    3 ++-
1fa1a8c
 1 files changed, 2 insertions(+), 1 deletions(-)
1fa1a8c
1fa1a8c
diff --git a/src/libplybootsplash/ply-terminal.c b/src/libplybootsplash/ply-terminal.c
1fa1a8c
index 462a4c6..8147e86 100644
1fa1a8c
--- a/src/libplybootsplash/ply-terminal.c
1fa1a8c
+++ b/src/libplybootsplash/ply-terminal.c
1fa1a8c
@@ -499,7 +499,8 @@ ply_terminal_free (ply_terminal_t *terminal)
1fa1a8c
                                            ply_terminal_detach_from_event_loop,
1fa1a8c
                                            terminal);
1fa1a8c
 
1fa1a8c
-  ply_terminal_close (terminal);
1fa1a8c
+  if (terminal->is_open)
1fa1a8c
+    ply_terminal_close (terminal);
1fa1a8c
 
1fa1a8c
   free (terminal);
1fa1a8c
 }
1fa1a8c
-- 
1fa1a8c
1.6.5.rc2
1fa1a8c
1fa1a8c
1fa1a8c
From 78d610e82a9eebdce7ab43a6e3acfee1057f6a2c Mon Sep 17 00:00:00 2001
1fa1a8c
From: Ray Strode <rstrode@redhat.com>
1fa1a8c
Date: Thu, 8 Oct 2009 15:40:16 -0400
1fa1a8c
Subject: [PATCH 3/4] [main] remove displays before closing renderer
1fa1a8c
1fa1a8c
---
1fa1a8c
 src/main.c |    6 +++---
1fa1a8c
 1 files changed, 3 insertions(+), 3 deletions(-)
1fa1a8c
1fa1a8c
diff --git a/src/main.c b/src/main.c
1fa1a8c
index 6f8c6bd..c309fab 100644
1fa1a8c
--- a/src/main.c
1fa1a8c
+++ b/src/main.c
1fa1a8c
@@ -604,6 +604,9 @@ quit_splash (state_t *state)
1fa1a8c
       state->boot_splash = NULL;
1fa1a8c
     }
1fa1a8c
 
1fa1a8c
+  ply_trace ("removing displays and keyboard");
1fa1a8c
+  remove_displays_and_keyboard (state);
1fa1a8c
+
1fa1a8c
   if (state->renderer != NULL)
1fa1a8c
     {
1fa1a8c
       ply_renderer_close (state->renderer);
1fa1a8c
@@ -618,9 +621,6 @@ quit_splash (state_t *state)
1fa1a8c
       state->terminal = NULL;
1fa1a8c
     }
1fa1a8c
 
1fa1a8c
-  ply_trace ("removing displays and keyboard");
1fa1a8c
-  remove_displays_and_keyboard (state);
1fa1a8c
-
1fa1a8c
   if (state->session != NULL)
1fa1a8c
     {
1fa1a8c
       ply_trace ("detaching session");
1fa1a8c
-- 
1fa1a8c
1.6.5.rc2
1fa1a8c
1fa1a8c
1fa1a8c
From e938daa05b05d5517cec61fab7caf0df75e5fa14 Mon Sep 17 00:00:00 2001
1fa1a8c
From: Ray Strode <rstrode@redhat.com>
1fa1a8c
Date: Thu, 8 Oct 2009 15:41:06 -0400
1fa1a8c
Subject: [PATCH 4/4] [renderer] make input_source_close idempotent
1fa1a8c
1fa1a8c
---
1fa1a8c
 src/libplybootsplash/ply-renderer.c |   12 ++++++++++--
1fa1a8c
 1 files changed, 10 insertions(+), 2 deletions(-)
1fa1a8c
1fa1a8c
diff --git a/src/libplybootsplash/ply-renderer.c b/src/libplybootsplash/ply-renderer.c
1fa1a8c
index f7f3c90..0966418 100644
1fa1a8c
--- a/src/libplybootsplash/ply-renderer.c
1fa1a8c
+++ b/src/libplybootsplash/ply-renderer.c
1fa1a8c
@@ -52,6 +52,8 @@ struct _ply_renderer
1fa1a8c
   char *device_name;
1fa1a8c
   ply_terminal_t *terminal;
1fa1a8c
   ply_console_t *console;
1fa1a8c
+
1fa1a8c
+  uint32_t input_source_is_open : 1;
1fa1a8c
 };
1fa1a8c
 
1fa1a8c
 typedef const ply_renderer_plugin_interface_t *
1fa1a8c
@@ -321,8 +323,10 @@ ply_renderer_open_input_source (ply_renderer_t              *renderer,
1fa1a8c
   assert (renderer != NULL);
1fa1a8c
   assert (input_source != NULL);
1fa1a8c
 
1fa1a8c
-  return renderer->plugin_interface->open_input_source (renderer->backend,
1fa1a8c
-                                                        input_source);
1fa1a8c
+  renderer->input_source_is_open = renderer->plugin_interface->open_input_source (renderer->backend,
1fa1a8c
+                                                                                  input_source);
1fa1a8c
+
1fa1a8c
+  return renderer->input_source_is_open;
1fa1a8c
 }
1fa1a8c
 
1fa1a8c
 void
1fa1a8c
@@ -347,8 +351,12 @@ ply_renderer_close_input_source (ply_renderer_t              *renderer,
1fa1a8c
   assert (renderer != NULL);
1fa1a8c
   assert (input_source != NULL);
1fa1a8c
 
1fa1a8c
+  if (!renderer->input_source_is_open)
1fa1a8c
+    return;
1fa1a8c
+
1fa1a8c
   renderer->plugin_interface->close_input_source (renderer->backend,
1fa1a8c
                                                   input_source);
1fa1a8c
+  renderer->input_source_is_open = false;
1fa1a8c
 }
1fa1a8c
 
1fa1a8c
 /* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
1fa1a8c
-- 
1fa1a8c
1.6.5.rc2
1fa1a8c
24dc014
From 30fa8e2d48ab6ea8909a997aa983c475753059b2 Mon Sep 17 00:00:00 2001
24dc014
From: Ray Strode <rstrode@redhat.com>
24dc014
Date: Thu, 8 Oct 2009 15:42:27 -0400
24dc014
Subject: [PATCH] [keyboard] make stop_watching_for_terminal_input idempotent
24dc014
24dc014
---
24dc014
 src/libplybootsplash/ply-keyboard.c |    3 +++
24dc014
 1 files changed, 3 insertions(+), 0 deletions(-)
24dc014
24dc014
diff --git a/src/libplybootsplash/ply-keyboard.c b/src/libplybootsplash/ply-keyboard.c
24dc014
index 375ddd5..ab72823 100644
24dc014
--- a/src/libplybootsplash/ply-keyboard.c
24dc014
+++ b/src/libplybootsplash/ply-keyboard.c
24dc014
@@ -357,6 +357,9 @@ ply_keyboard_watch_for_terminal_input (ply_keyboard_t *keyboard)
24dc014
 static void
24dc014
 ply_keyboard_stop_watching_for_terminal_input (ply_keyboard_t *keyboard)
24dc014
 {
24dc014
+  if (keyboard->provider.if_terminal->input_watch == NULL)
24dc014
+    return;
24dc014
+
24dc014
   ply_event_loop_stop_watching_fd (keyboard->loop,
24dc014
                                    keyboard->provider.if_terminal->input_watch);
24dc014
   keyboard->provider.if_terminal->input_watch = NULL;
24dc014
-- 
24dc014
1.6.5.rc2
24dc014
91873e1
From adf98f119b5f06c238b86860f690fe2af608d57f Mon Sep 17 00:00:00 2001
91873e1
From: Ray Strode <rstrode@redhat.com>
91873e1
Date: Tue, 6 Oct 2009 16:47:41 -0400
91873e1
Subject: [PATCH] [main] clean up terminal when done with it
91873e1
91873e1
Before we were relying on the renderer to clean
91873e1
up the terminal, which was wrong.
91873e1
---
91873e1
 src/main.c |   12 ++++++++++++
91873e1
 1 files changed, 12 insertions(+), 0 deletions(-)
91873e1
91873e1
diff --git a/src/main.c b/src/main.c
91873e1
index e827da4..31f2b1e 100644
91873e1
--- a/src/main.c
91873e1
+++ b/src/main.c
91873e1
@@ -94,6 +94,7 @@ typedef struct
91873e1
   ply_command_parser_t *command_parser;
91873e1
   ply_mode_t mode;
91873e1
   ply_renderer_t *renderer;
91873e1
+  ply_terminal_t *terminal;
91873e1
 
91873e1
   ply_trigger_t *quit_trigger;
91873e1
 
91873e1
@@ -608,6 +609,13 @@ quit_splash (state_t *state)
91873e1
       state->renderer = NULL;
91873e1
     }
91873e1
 
91873e1
+  if (state->terminal != NULL)
91873e1
+    {
91873e1
+      ply_terminal_close (state->terminal);
91873e1
+      ply_terminal_free (state->terminal);
91873e1
+      state->terminal = NULL;
91873e1
+    }
91873e1
+
91873e1
   ply_trace ("removing displays and keyboard");
91873e1
   remove_displays_and_keyboard (state);
91873e1
 
91873e1
@@ -935,6 +943,8 @@ add_display_and_keyboard_for_terminal (state_t    *state,
91873e1
       return;
91873e1
     }
91873e1
 
91873e1
+  state->terminal = terminal;
91873e1
+
91873e1
   ply_console_set_active_vt (state->console,
91873e1
                              ply_terminal_get_vt_number (terminal));
91873e1
 
91873e1
@@ -1005,6 +1015,8 @@ add_default_displays_and_keyboard (state_t *state)
91873e1
       return;
91873e1
     }
91873e1
 
91873e1
+  state->terminal = terminal;
91873e1
+
91873e1
   keyboard = ply_keyboard_new_for_renderer (renderer);
91873e1
   set_keyboard (state, keyboard);
91873e1
 
91873e1
-- 
91873e1
1.6.5.rc2
91873e1