]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
renderer: track activeness
authorRay Strode <rstrode@redhat.com>
Wed, 22 Jul 2015 14:05:51 +0000 (10:05 -0400)
committerRay Strode <rstrode@redhat.com>
Thu, 30 Jul 2015 20:03:11 +0000 (16:03 -0400)
Right now, ply-seat has to handle tracking
renderer activeness on its own.  This commit
moves activeness tracking to ply-renderer
directly.

src/libply-splash-core/ply-renderer.c
src/libply-splash-core/ply-renderer.h
src/libply-splash-core/ply-seat.c

index f64eac549f53d0b991e84c1b0db2dccc7eb9fef8..16957d7fc16760eb2e54730b245f426fea304035 100644 (file)
@@ -55,6 +55,7 @@ struct _ply_renderer
 
         uint32_t                               input_source_is_open : 1;
         uint32_t                               is_mapped : 1;
+        uint32_t                               is_active : 1;
 };
 
 typedef const ply_renderer_plugin_interface_t *
@@ -268,15 +269,19 @@ ply_renderer_open (ply_renderer_t *renderer)
                 { PLY_RENDERER_TYPE_NONE,         NULL                                             }
         };
 
+        renderer->is_active = false;
         for (i = 0; known_plugins[i].type != PLY_RENDERER_TYPE_NONE; i++) {
                 if (renderer->type == known_plugins[i].type ||
                     renderer->type == PLY_RENDERER_TYPE_AUTO)
-                        if (ply_renderer_open_plugin (renderer, known_plugins[i].path))
-                                return true;
+                        if (ply_renderer_open_plugin (renderer, known_plugins[i].path)) {
+                                renderer->is_active = true;
+                                goto out;
+                        }
         }
 
         ply_trace ("could not find suitable rendering plugin");
-        return false;
+out:
+        return renderer->is_active;
 }
 
 void
@@ -284,6 +289,7 @@ ply_renderer_close (ply_renderer_t *renderer)
 {
         ply_renderer_unmap_from_device (renderer);
         ply_renderer_close_device (renderer);
+        renderer->is_active = false;
 }
 
 void
@@ -291,7 +297,11 @@ ply_renderer_activate (ply_renderer_t *renderer)
 {
         assert (renderer->plugin_interface != NULL);
 
-        return renderer->plugin_interface->activate (renderer->backend);
+        if (renderer->is_active)
+              return;
+
+        renderer->plugin_interface->activate (renderer->backend);
+        renderer->is_active = true;
 }
 
 void
@@ -302,6 +312,12 @@ ply_renderer_deactivate (ply_renderer_t *renderer)
         return renderer->plugin_interface->deactivate (renderer->backend);
 }
 
+bool
+ply_renderer_is_active (ply_renderer_t *renderer)
+{
+        return renderer->is_active;
+}
+
 ply_list_t *
 ply_renderer_get_heads (ply_renderer_t *renderer)
 {
index a019a4d731e7e5f4d0937f361d213a4ee67309fd..59391e170ef462b4b93d85fa9100ff408dc35fa8 100644 (file)
@@ -57,6 +57,7 @@ bool ply_renderer_open (ply_renderer_t *renderer);
 void ply_renderer_close (ply_renderer_t *renderer);
 void ply_renderer_activate (ply_renderer_t *renderer);
 void ply_renderer_deactivate (ply_renderer_t *renderer);
+bool ply_renderer_is_active (ply_renderer_t *renderer);
 const char *ply_renderer_get_device_name (ply_renderer_t *renderer);
 ply_list_t *ply_renderer_get_heads (ply_renderer_t *renderer);
 ply_pixel_buffer_t *ply_renderer_get_buffer_for_head (ply_renderer_t      *renderer,
index 700332fc1b20559654f1099c1d655e2bbf803e3d..2105ca5663d5563fc8d1bc36c0b9ba1b4177739f 100644 (file)
@@ -49,7 +49,6 @@ struct _ply_seat
         ply_list_t        *text_displays;
         ply_list_t        *pixel_displays;
 
-        uint32_t           renderer_active : 1;
         uint32_t           keyboard_active : 1;
 };
 
@@ -131,13 +130,11 @@ ply_seat_open (ply_seat_t         *seat,
                         ply_renderer_free (renderer);
 
                         seat->renderer = NULL;
-                        seat->renderer_active = false;
 
                         if (renderer_type != PLY_RENDERER_TYPE_AUTO)
                                 return false;
                 } else {
                         seat->renderer = renderer;
-                        seat->renderer_active = true;
                 }
         }
 
@@ -189,11 +186,6 @@ ply_seat_deactivate_keyboard (ply_seat_t *seat)
 void
 ply_seat_deactivate_renderer (ply_seat_t *seat)
 {
-        if (!seat->renderer_active)
-                return;
-
-        seat->renderer_active = false;
-
         if (seat->renderer == NULL)
                 return;
 
@@ -227,8 +219,6 @@ ply_seat_activate_renderer (ply_seat_t *seat)
 
         ply_trace ("activating renderer");
         ply_renderer_activate (seat->renderer);
-
-        seat->renderer_active = true;
 }
 
 void