]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
[two-step] pull trigger right away if already idle
authorRay Strode <rstrode@redhat.com>
Mon, 4 May 2009 21:17:36 +0000 (17:17 -0400)
committerRay Strode <rstrode@redhat.com>
Wed, 20 May 2009 21:27:54 +0000 (17:27 -0400)
The trigger always needs to get pulled so that the
daemon knows that it can quit.  Previously, we weren't
pulling it if two-step was already idle.  This meant that
plymouthd never quit.

src/plugins/splash/two-step/plugin.c

index f0fd0a87cadf3cabde68c8acd92a068f46d8c14a..4008119bd541e26abfec7f1a44fa4ad01643ebfa 100644 (file)
@@ -106,6 +106,7 @@ struct _ply_boot_splash_plugin
   uint32_t root_is_mounted : 1;
   uint32_t is_visible : 1;
   uint32_t is_animating : 1;
+  uint32_t is_idle : 1;
 };
 
 static void add_handlers (ply_boot_splash_plugin_t *plugin);
@@ -277,6 +278,8 @@ start_animation (ply_boot_splash_plugin_t *plugin)
   if (plugin->is_animating)
      return;
 
+  plugin->is_idle = false;
+
   draw_background (plugin, NULL);
 
   if (plugin->mode == PLY_BOOT_SPLASH_MODE_SHUTDOWN)
@@ -577,6 +580,7 @@ on_animation_stopped (ply_boot_splash_plugin_t *plugin)
       ply_trigger_pull (plugin->idle_trigger, NULL);
       plugin->idle_trigger = NULL;
     }
+  plugin->is_idle = true;
 }
 
 void
@@ -716,6 +720,12 @@ void
 become_idle (ply_boot_splash_plugin_t *plugin,
              ply_trigger_t            *idle_trigger)
 {
+  if (plugin->is_idle)
+    {
+      ply_trigger_pull (idle_trigger, NULL);
+      return;
+    }
+
   plugin->idle_trigger = idle_trigger;
 
   if (ply_animation_is_stopped (plugin->animation))