ply_terminal_t *local_console_terminal;
ply_device_manager_t *device_manager;
+ ply_trigger_t *show_trigger;
ply_trigger_t *deactivate_trigger;
ply_trigger_t *quit_trigger;
}
static void
-on_show_splash (state_t *state)
+on_show_splash (state_t *state,
+ ply_trigger_t *show_trigger)
{
bool has_open_seats;
return;
}
+ state->show_trigger = show_trigger;
state->is_shown = true;
has_open_seats = ply_device_manager_has_open_seats (state->device_manager);
show_detailed_splash (state);
state->showing_details = true;
}
+
+ if (state->show_trigger != NULL)
+ {
+ ply_trace ("telling boot server about completed show operation");
+ ply_trigger_pull (state->show_trigger, NULL);
+ state->show_trigger = NULL;
+ }
}
static void
}
+static void
+ply_boot_connection_on_splash_shown (ply_boot_connection_t *connection)
+{
+ ply_trace ("shown");
+ if (!ply_write (connection->fd,
+ PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK,
+ strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK)))
+ {
+ ply_trace ("could not finish writing deactivate reply: %m");
+ }
+}
+
static void
ply_boot_connection_on_deactivated (ply_boot_connection_t *connection)
{
}
else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_SHOW_SPLASH) == 0)
{
+ ply_trigger_t *show_trigger;
+
ply_trace ("got show splash request");
+
+ show_trigger = ply_trigger_new (NULL);
+
+ ply_trigger_add_handler (show_trigger,
+ (ply_trigger_handler_t)
+ ply_boot_connection_on_splash_shown,
+ connection);
+
if (server->show_splash_handler != NULL)
- server->show_splash_handler (server->user_data, server);
+ server->show_splash_handler (server->user_data, show_trigger, server);
+
+ free (argument);
+ free (command);
+ return;
}
else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_HIDE_SPLASH) == 0)
{
ply_boot_server_t *server);
typedef void (* ply_boot_server_show_splash_handler_t) (void *user_data,
+ ply_trigger_t *show_trigger,
ply_boot_server_t *server);
typedef void (* ply_boot_server_hide_splash_handler_t) (void *user_data,