summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2016-12-08 15:23:54 -0500
committerRay Strode <rstrode@redhat.com>2016-12-09 09:34:54 -0500
commit266d954b7a0ff5b046df6ed54c22e3322b2c80d0 (patch)
tree5a62b8cb019442feed6d60d10fe395c42fc6fe52
parenta8e238c3c677fd72eb9a19e58914fd2ae37a83a2 (diff)
device-manager: dont pass terminal as renderer devicewip/fix-non-udev-codepath
Various bits of fall back code pass the terminal device as the renderer device. This is wrong, ply_renderer is a graphical renderer abstraction. This commit passes NULL in those cases, so each renderer does what it's configured to do by default.
-rw-r--r--src/libply-splash-core/ply-device-manager.c38
1 files changed, 26 insertions, 12 deletions
diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c
index 88274c65..4004e114 100644
--- a/src/libply-splash-core/ply-device-manager.c
+++ b/src/libply-splash-core/ply-device-manager.c
@@ -665,7 +665,8 @@ create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager,
ply_renderer_t *renderer = NULL;
ply_keyboard_t *keyboard = NULL;
- renderer = ply_hashtable_lookup (manager->renderers, (void *) device_path);
+ if (device_path != NULL)
+ renderer = ply_hashtable_lookup (manager->renderers, (void *) device_path);
if (renderer != NULL) {
ply_trace ("ignoring device %s since it's already managed", device_path);
@@ -676,9 +677,10 @@ create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager,
device_path ? : "", renderer_type, terminal ? ply_terminal_get_name (terminal) : "none");
if (renderer_type != PLY_RENDERER_TYPE_NONE) {
+ ply_renderer_t *old_renderer = NULL;
renderer = ply_renderer_new (renderer_type, device_path, terminal);
- if (!ply_renderer_open (renderer)) {
+ if (renderer != NULL && !ply_renderer_open (renderer)) {
ply_trace ("could not open renderer for %s", device_path);
ply_renderer_free (renderer);
renderer = NULL;
@@ -686,6 +688,18 @@ create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager,
if (renderer_type != PLY_RENDERER_TYPE_AUTO)
return;
}
+
+ old_renderer = ply_hashtable_lookup (manager->renderers,
+ (void *) ply_renderer_get_device_name (renderer));
+
+ if (old_renderer != NULL) {
+ ply_trace ("ignoring device %s since it's alerady managed",
+ ply_renderer_get_device_name (renderer));
+ ply_renderer_free (renderer);
+
+ renderer = NULL;
+ return;
+ }
}
if (renderer != NULL) {
@@ -696,7 +710,7 @@ create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager,
manager->keyboard_added_handler (manager->event_handler_data, keyboard);
create_pixel_displays_for_renderer (manager, renderer);
- ply_hashtable_insert (manager->renderers, strdup (device_path), renderer);
+ ply_hashtable_insert (manager->renderers, strdup (ply_renderer_get_device_name (renderer)), renderer);
create_pixel_displays_for_renderer (manager, renderer);
if (manager->renderers_activated) {
@@ -731,13 +745,13 @@ create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager,
static void
create_devices_for_terminal (const char *device_path,
- ply_terminal_t *terminal,
- ply_device_manager_t *manager)
+ ply_terminal_t *terminal,
+ ply_device_manager_t *manager)
{
create_devices_for_terminal_and_renderer_type (manager,
- device_path,
- terminal,
- PLY_RENDERER_TYPE_NONE);
+ NULL,
+ terminal,
+ PLY_RENDERER_TYPE_NONE);
}
static bool
create_devices_from_terminals (ply_device_manager_t *manager)
@@ -783,9 +797,9 @@ create_devices_from_udev (ply_device_manager_t *manager)
ply_trace ("Creating non-graphical devices, since there's no suitable graphics hardware");
create_devices_for_terminal_and_renderer_type (manager,
- ply_terminal_get_name (manager->local_console_terminal),
- manager->local_console_terminal,
- PLY_RENDERER_TYPE_NONE);
+ NULL,
+ manager->local_console_terminal,
+ PLY_RENDERER_TYPE_NONE);
}
#endif
@@ -793,7 +807,7 @@ static void
create_fallback_devices (ply_device_manager_t *manager)
{
create_devices_for_terminal_and_renderer_type (manager,
- ply_terminal_get_name (manager->local_console_terminal),
+ NULL,
manager->local_console_terminal,
PLY_RENDERER_TYPE_AUTO);
}