}
EINTERN void
-e_comp_wl_client_input_region_set(E_Client *ec, pixman_region32_t *region)
+e_comp_wl_client_input_region_unset(E_Client *ec)
{
- if (pixman_region32_not_empty(region))
+ if (!e_input_thread_check_client_cloning_needed())
return;
- ELOGF("COMP", " |unset input rect", NULL);
- e_view_client_input_objs_del(e_client_view_get(ec));
- e_view_client_input_area_set(e_client_view_get(ec), -1, -1, 1, 1);
-
- if (e_input_thread_check_client_cloning_needed())
- {
- E_Input_Thread_Request_EClient_Data ec_data;
- memset(&ec_data, 0, sizeof(E_Input_Thread_Request_EClient_Data));
+ E_Input_Thread_Request_EClient_Data ec_data;
+ memset(&ec_data, 0, sizeof(E_Input_Thread_Request_EClient_Data));
- Eina_Rectangle *input_rect;
- input_rect = eina_rectangle_new(-1, -1, 1, 1);
+ Eina_Rectangle *input_rect;
+ input_rect = eina_rectangle_new(-1, -1, 1, 1);
- if (input_rect)
- {
- ec_data.ec = ec;
- ec_data.rect = input_rect;
+ if (input_rect)
+ {
+ ec_data.ec = ec;
+ ec_data.rect = input_rect;
- ICINF("[%s] ec(%p), x(-1), y(-1), w(1), h(1)\n", __func__, ec);
- e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_clear, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
- e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_append, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
- }
+ ICINF("[%s] ec(%p), x(-1), y(-1), w(1), h(1)\n", __func__, ec);
+ e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_clear, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
+ e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_append, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
}
}
EINTERN void e_comp_wl_client_surface_init(E_Client *ec);
EINTERN void e_comp_wl_client_surface_finish(E_Client *ec);
EINTERN void e_comp_wl_client_surface_pending_buffer_set(E_Client *ec, E_Comp_Wl_Buffer *buffer, int32_t sx, int32_t sy);
-EINTERN void e_comp_wl_client_input_region_set(E_Client *ec, pixman_region32_t *region);
+EINTERN void e_comp_wl_client_input_region_unset(E_Client *ec);
EINTERN Eina_Bool e_comp_wl_client_subsurface_cyclic_reference_check(E_Client *ec, E_Client *parent);
EINTERN void e_comp_wl_client_subsurface_commit_to_cache(E_Client *ec);
ds_surface->current.dy);
}
-static void
-_e_surface_pending_input_region_update(E_Surface *surface)
-{
- struct ds_surface *ds_surface = surface->ds_surface;
- E_Client *ec = surface->ec;
-
- e_comp_wl_client_input_region_set(ec, &ds_surface->current.input);
-}
-
static void
_e_surface_pending_buffer_transform_update(E_Surface *surface)
{
if (ds_surface->current.committed & DS_SURFACE_STATE_BUFFER)
_e_surface_pending_buffer_update(surface);
- if (ds_surface->current.committed & DS_SURFACE_STATE_INPUT_REGION)
- _e_surface_pending_input_region_update(surface);
-
if (ds_surface->current.committed & DS_SURFACE_STATE_TRANSFORM)
_e_surface_pending_buffer_transform_update(surface);
#include "e_compositor_private.h"
#include "e_surface_view_intern.h"
#include "e_comp_input_intern.h"
+#include "e_view_client_intern.h"
#include <stdlib.h>
#include <wayland-util.h>
e_comp_wl_hook_call(E_COMP_WL_HOOK_CLIENT_ALPHA_CHANGE, view->ec);
}
+static void
+_surface_view_input_region_update(E_Surface_View *view)
+{
+ E_Client *ec = view->ec;
+ pixman_region32_t *input_region = e_surface_input_region_get(view->surface);
+
+ if (pixman_region32_not_empty(input_region))
+ return;
+
+ ESV_INF("Unset input region", ec);
+
+ e_view_client_input_objs_del(e_client_view_get(ec));
+ e_view_client_input_area_set(e_client_view_get(ec), -1, -1, 1, 1);
+
+ e_comp_wl_client_input_region_unset(ec);
+}
+
static void
_surface_view_cb_surface_commit(struct wl_listener *listener, void *data)
{
if (event->committed & E_SURFACE_STATE_OPAQUE_REGION)
_surface_view_opaque_region_update(view);
+ if (event->committed & E_SURFACE_STATE_INPUT_REGION)
+ _surface_view_input_region_update(view);
+
if (e_comp_wl_remote_surface_commit(view->ec))
return;