if (eom_output->state == MIRROR)
_e_eom_output_stop_mirror(eom_output);
+ else if (eom_output->state == PRESENTATION)
+ _e_eom_output_stop_presentation(eom_output);
/* update eom_output disconnect */
eom_output->width = 0;
_e_eom_output_state_set_mode(eom_output, EOM_OUTPUT_MODE_NONE);
_e_eom_output_state_set_attribute(eom_output, EOM_OUTPUT_ATTRIBUTE_NONE);
- _e_eom_output_deinit(eom_output);
+ _e_eom_output_deinit(eom_output, 1);
eom_output->state = NONE;
}
static void
-_e_eom_output_deinit(E_EomOutputPtr eom_output)
+_e_eom_output_stop_presentation(E_EomOutputPtr eom_output)
+{
+ E_EomClientPtr iterator = NULL;
+ Eina_List *l;
+
+ if (eom_output->state == NONE)
+ return;
+
+ _e_eom_output_state_set_status(eom_output, TDM_OUTPUT_CONN_STATUS_DISCONNECTED);
+ _e_eom_output_state_set_mode(eom_output, EOM_OUTPUT_MODE_NONE);
+
+ _e_eom_output_deinit(eom_output, 0);
+
+ EINA_LIST_FOREACH(g_eom->clients, l, iterator)
+ if (iterator && iterator->output_id == eom_output->id)
+ _e_eom_client_free_buffers(iterator);
+
+ eom_output->state = NONE;
+}
+
+static void
+_e_eom_output_deinit(E_EomOutputPtr eom_output, int pp)
{
tdm_error err = TDM_ERROR_NONE;
E_EomClientPtr iterator = NULL;
if (err != TDM_ERROR_NONE)
EOM_ERR("set DPMS off:%d", err);
- for (i = 0; i < NUM_MAIN_BUF; i++)
+ if (pp == 1)
{
- tdm_buffer_remove_release_handler(eom_output->dst_buffers[i],
- _e_eom_cb_pp, eom_output);
+ for (i = 0; i < NUM_MAIN_BUF; i++)
+ {
+ tdm_buffer_remove_release_handler(eom_output->dst_buffers[i],
+ _e_eom_cb_pp, eom_output);
- if (eom_output->dst_buffers[i])
- tbm_surface_destroy(eom_output->dst_buffers[i]);
- }
+ if (eom_output->dst_buffers[i])
+ tbm_surface_destroy(eom_output->dst_buffers[i]);
+ }
+ }
if (g_eom->main_output_state == DOWN)
EINA_LIST_FOREACH(g_eom->clients, l, iterator)
static int _e_eom_output_get_position(void);
static void _e_eom_output_start_mirror(E_EomOutputPtr eom_output);
static void _e_eom_output_stop_mirror(E_EomOutputPtr eom_output);
-static void _e_eom_output_deinit(E_EomOutputPtr eom_output);
+static void _e_eom_output_stop_presentation(E_EomOutputPtr eom_output);
+static void _e_eom_output_deinit(E_EomOutputPtr eom_output, int pp);
static tdm_layer *_e_eom_output_get_layer(E_EomOutputPtr eom_output);
static E_EomOutputPtr _e_eom_output_get_by_id(int id);
static Eina_Bool _e_eom_output_start_pp(E_EomOutputPtr eom_output);