]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
[drm] reconnect input source on disconnect
authorRay Strode <rstrode@redhat.com>
Fri, 5 Mar 2010 18:15:39 +0000 (13:15 -0500)
committerRay Strode <rstrode@redhat.com>
Fri, 5 Mar 2010 18:54:36 +0000 (13:54 -0500)
This is like 6f8d51c2cb2f46eac4c2040f5fc8512f65c8d2da
but for the drm renderer.

src/plugins/renderers/drm/plugin.c

index 5e9c0485e525e31021027b470091271cbd8b8446..4bc93e4404bc8f605783f25fed6b9feb63314a2c 100644 (file)
@@ -82,6 +82,7 @@ struct _ply_renderer_head
 
 struct _ply_renderer_input_source
 {
+  ply_renderer_backend_t *backend;
   ply_fd_watch_t *terminal_input_watch;
 
   ply_buffer_t   *key_buffer;
@@ -117,6 +118,8 @@ struct _ply_renderer_backend
 ply_renderer_plugin_interface_t *ply_renderer_backend_get_interface (void);
 static void ply_renderer_head_redraw (ply_renderer_backend_t *backend,
                                       ply_renderer_head_t    *head);
+static bool open_input_source (ply_renderer_backend_t      *backend,
+                               ply_renderer_input_source_t *input_source);
 
 static ply_renderer_head_t *
 ply_renderer_head_new (ply_renderer_backend_t *backend,
@@ -1049,6 +1052,14 @@ on_key_event (ply_renderer_input_source_t *input_source,
 
 }
 
+static void
+on_input_source_disconnected (ply_renderer_input_source_t *input_source)
+{
+  ply_trace ("input source disconnected, reopening");
+
+  open_input_source (input_source->backend, input_source);
+}
+
 static bool
 open_input_source (ply_renderer_backend_t      *backend,
                    ply_renderer_input_source_t *input_source)
@@ -1060,9 +1071,11 @@ open_input_source (ply_renderer_backend_t      *backend,
 
   terminal_fd = ply_terminal_get_fd (backend->terminal);
 
+  input_source->backend = backend;
   input_source->terminal_input_watch = ply_event_loop_watch_fd (backend->loop, terminal_fd, PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
                                                                 (ply_event_handler_t) on_key_event,
-                                                                NULL, input_source);
+                                                                (ply_event_handler_t)
+                                                                on_input_source_disconnected, input_source);
   return true;
 }
 
@@ -1088,6 +1101,7 @@ close_input_source (ply_renderer_backend_t      *backend,
 
   ply_event_loop_stop_watching_fd (backend->loop, input_source->terminal_input_watch);
   input_source->terminal_input_watch = NULL;
+  input_source->backend = NULL;
 }
 
 ply_renderer_plugin_interface_t *