EINA_SAFETY_ON_FALSE_RETURN(queue_buffer);
if (queue_buffer->exported_wl_buffer)
- wl_list_remove(&queue_buffer->exported_destroy_listener.link);
+ {
+ wayland_tbm_server_export_buffer_set_detach_cb(queue_buffer->exported_wl_buffer, NULL, NULL);
+ wl_list_remove(&queue_buffer->exported_destroy_listener.link);
+ }
EHWQTRACE("DESTROY queue buffer:%p tq:%p tsurface:%p",
NULL, (queue_buffer->queue ? queue_buffer->queue->hwc : NULL),
if (queue_buffer->exported) return EINA_TRUE;
/* export the tbm_surface(wl_buffer) to the client_queue */
- wl_buffer = wayland_tbm_server_client_queue_export_buffer2(user->cqueue, queue_buffer->tsurface,
- E_HWC_WINDOW_QUEUE_BUFFER_FLAGS,
- _e_hwc_window_queue_exported_buffer_detach_cb,
- NULL,
- (void *)queue);
+ wl_buffer = wayland_tbm_server_client_queue_export_buffer(user->cqueue, queue_buffer->tsurface,
+ E_HWC_WINDOW_QUEUE_BUFFER_FLAGS,
+ _e_hwc_window_queue_exported_buffer_detach_cb,
+ (void *)queue);
EINA_SAFETY_ON_FALSE_RETURN_VAL(wl_buffer, EINA_FALSE);
EHWQINF("EXP ts:%p tq:%p wl_buffer:%p",
}
}
+static void
+_e_hwc_window_queue_user_unset(E_Hwc_Window_Queue *queue)
+{
+ if (!queue->user) return;
+
+ EHWQINF("Unset user ehw:%p - {%s}",
+ queue->user->ec, queue->hwc, queue, queue->user,
+ (queue->user->ec ? queue->user->ec->icccm.title : "UNKNOWN"));
+
+ e_hwc_window_restriction_unset(queue->user, E_HWC_WINDOW_RESTRICTION_QUEUE_UNSET_WAITING);
+ e_hwc_window_unref(queue->user);
+ queue->user = NULL;
+}
+
static void
_e_hwc_window_queue_free(E_Hwc_Window_Queue *queue)
{
queue->tqueue = NULL;
+ _e_hwc_window_queue_user_unset(queue);
+
+ queue->state = E_HWC_WINDOW_QUEUE_STATE_UNSET;
+
e_object_del(E_OBJECT(queue));
}
/* release the tqueue */
_e_hwc_window_queue_tqueue_release(queue->tqueue, queue->user);
-
- EHWQINF("Unset user ehw:%p - {%s}",
- queue->user->ec, queue->hwc, queue, queue->user,
- (queue->user->ec ? queue->user->ec->icccm.title : "UNKNOWN"));
-
- /* unset the hwc_window from the queue */
- e_hwc_window_restriction_unset(queue->user, E_HWC_WINDOW_RESTRICTION_QUEUE_UNSET_WAITING);
- e_hwc_window_unref(queue->user);
- queue->user = NULL;
+ _e_hwc_window_queue_user_unset(queue);
/* set the queue_state_unset */
queue->state = E_HWC_WINDOW_QUEUE_STATE_UNSET;
- if (eina_list_count(queue->user_pending_set))
+ if (queue->tqueue && eina_list_count(queue->user_pending_set))
_e_hwc_window_queue_unset_event_add(queue);
e_object_unref(E_OBJECT(queue));