PEPPER_CHECK(ret, goto end, "headless_input_init() failed\n");
/* Init Output */
- ret = pepper_output_led_init(compositor);
- PEPPER_CHECK(ret, goto end, "pepper_output_led_init() failed.\n");
+ ret = headless_output_init(compositor);
+ PEPPER_CHECK(ret, goto end, "headless_output_init() failed.\n");
/* Init Shell */
ret = headless_shell_init(compositor);
end:
/* Deinit Process */
+ headless_shell_deinit(compositor);
headless_input_deinit(compositor);
- pepper_output_led_deinit(compositor);
+ headless_output_deinit(compositor);
pepper_compositor_destroy(compositor);
return EXIT_SUCCESS;
extern "C" {
#endif
-PEPPER_API pepper_bool_t pepper_output_led_init(pepper_compositor_t *compositor);
-PEPPER_API void pepper_output_led_deinit(pepper_compositor_t *compositor);
+/* APIs for headless_output */
+PEPPER_API pepper_bool_t headless_output_init(pepper_compositor_t *compositor);
+PEPPER_API void headless_output_deinit(pepper_compositor_t *compositor);
+/* APIs for headless_shell */
PEPPER_API pepper_bool_t headless_shell_init(pepper_compositor_t *compositor);
+PEPPER_API void headless_shell_deinit(pepper_compositor_t *compositor);
/* APIs for headless_input */
PEPPER_API pepper_bool_t headless_input_init(pepper_compositor_t *compositor);
static void led_output_update(led_output_t *output);
static void
-led_output_destroy(void *o)
+led_output_destroy(void *data)
{
- led_output_t *output = (led_output_t *)o;
+ led_output_t *output = (led_output_t *)data;
PEPPER_TRACE("Output Destroy %p base %p\n", output, output->output);
- if (output->ui_led)
+ if (output->ui_led) {
HL_UI_LED_Close(output->ui_led);
+ output->ui_led = NULL;
+ }
- if (output->tbm_server)
+ if (output->tbm_server) {
wayland_tbm_server_deinit(output->tbm_server);
-
- free(output);
+ output->tbm_server = NULL;
+ }
}
static int32_t
}
pepper_bool_t
-pepper_output_led_init(pepper_compositor_t *compositor)
+headless_output_init(pepper_compositor_t *compositor)
{
led_output_t *output = (led_output_t*)calloc(sizeof(led_output_t), 1);
PEPPER_CHECK(output->plane, goto error, "pepper_output_add_plane() failed.\n");
pepper_object_set_user_data((pepper_object_t *)compositor,
- &KEY_OUTPUT, output, led_output_destroy);
+ &KEY_OUTPUT, output, NULL);
PEPPER_TRACE("\t Add Output %p, base %p\n", output, output->output);
PEPPER_TRACE("\t Add Output %p, plane %p\n", output, output->plane);
PEPPER_TRACE("\t Userdata %p\n", pepper_object_get_user_data((pepper_object_t *)compositor,&KEY_OUTPUT));
}
void
-pepper_output_led_deinit(pepper_compositor_t *compositor)
+headless_output_deinit(pepper_compositor_t *compositor)
{
+ led_output_t *output;
+
+ output = pepper_object_get_user_data((pepper_object_t *)compositor, &KEY_OUTPUT);
+
+ pepper_output_destroy(output->output);
+ led_output_destroy(output);
+
+ pepper_object_set_user_data((pepper_object_t *)compositor, &KEY_OUTPUT, NULL, NULL);
+ free(output);
+
PEPPER_TRACE("Output Deinit ... DONE\n");
}
}
static void
-headless_shell_deinit(void *data)
+headless_shell_destroy(headless_shell_t *shell)
{
- headless_shell_t *shell = (headless_shell_t*)data;
- if (!shell) return;
+ if (!shell)
+ return;
if (shell->cb_idle)
wl_event_source_remove(shell->cb_idle);
headless_shell_deinit_listeners(shell);
zxdg_deinit(shell);
tizen_policy_deinit(shell);
+}
+
+void
+headless_shell_deinit(pepper_compositor_t *compositor)
+{
+ headless_shell_t *shell;
+
+ PEPPER_CHECK(compositor, return, "compositor is NULL\n");
+
+ shell = (headless_shell_t *)pepper_object_get_user_data((pepper_object_t *)compositor, &KEY_SHELL);
+ PEPPER_CHECK(shell, return, "shell is NULL\n");
+
+ headless_shell_destroy(shell);
pepper_object_set_user_data((pepper_object_t *)shell->compositor, &KEY_SHELL, NULL, NULL);
free(shell);
PEPPER_CHECK(zxdg_init(shell), goto error, "zxdg_init() failed\n");
PEPPER_CHECK(tizen_policy_init(shell), goto error, "tizen_policy_init() failed\n");
- pepper_object_set_user_data((pepper_object_t *)compositor, &KEY_SHELL, NULL, headless_shell_deinit);
+ pepper_object_set_user_data((pepper_object_t *)compositor, &KEY_SHELL, shell, NULL);
return PEPPER_TRUE;
+
error:
- headless_shell_deinit(shell);
+ if (shell) {
+ headless_shell_destroy(shell);
+ free(shell);
+ }
return PEPPER_FALSE;
}
static int KEY_WL_BUFFER = 0;
static int KEY_CLIENT = 0;
+static uint32_t _getpid()
+{
+ static pid_t pid = 0;
+
+ if (pid)
+ {
+ return pid;
+ }
+
+ pid = getpid();
+
+ return (uint32_t)pid;
+}
+
static void
buffer_release(void *data, struct wl_buffer *buffer)
{
//TRACE("[UPDATE] commit wl_buffer:%p, surface:%p\n", wl_buffer, surface);
}
-static uint32_t _getpid()
-{
- static pid_t pid = 0;
-
- if (pid)
- {
- return pid;
- }
-
- pid = getpid();
-
- return (uint32_t)pid;
-}
-
static void
do_action(app_data_t *client, const char *keyname)
{