e_client/e_comp_wl_rsm: add remote surface provider/consumer client set 66/103666/3
authorMinJeong Kim <minjjj.kim@samsung.com>
Fri, 9 Dec 2016 04:50:22 +0000 (13:50 +0900)
committerGwanglim Lee <gl77.lee@samsung.com>
Fri, 9 Dec 2016 07:23:30 +0000 (23:23 -0800)
Change-Id: Ifded9f1243575045ec08c40fdbda8b5ad8cef541

src/bin/e_client.h
src/bin/e_comp_wl_rsm.c

index 30aa740e4383e12269c3bcee86c63061e179db0c..2eaa7bb2e916b2b0e3ca83a1ea9635bcae5ba6ff 100644 (file)
@@ -893,6 +893,12 @@ struct E_Client
    } indicator;
 
    E_Plane_Renderer_Client *renderer_client;
+
+   struct
+     {
+        Eina_Bool provider : 1;
+        Eina_Bool consumer : 1;
+     } remote_surface;
 };
 
 #define e_client_focus_policy_click(ec) \
index ef04d6f9ba65e351b3eaeb015935b4e10a93954f..f21ca0e4791493f1a1caf76c45e6958eaa698217 100644 (file)
@@ -377,6 +377,15 @@ _remote_provider_visible_set(E_Comp_Wl_Remote_Provider *provider, Eina_Bool set)
    _remote_provider_onscreen_parent_calculate(provider);
 }
 
+static void
+_remote_provider_client_set(E_Client *ec, Eina_Bool set)
+{
+   if (!ec) return;
+   if ((e_object_is_del(E_OBJECT(ec)))) return;
+
+   ec->remote_surface.provider = set;
+}
+
 static E_Comp_Wl_Remote_Provider *
 _remote_provider_find(E_Client *ec)
 {
@@ -464,6 +473,15 @@ _remote_surface_region_clear(E_Comp_Wl_Remote_Surface *remote_surface)
      }
 }
 
+static void
+_remote_surface_client_set(E_Client *ec, Eina_Bool set)
+{
+   if (!ec) return;
+   if ((e_object_is_del(E_OBJECT(ec)))) return;
+
+   ec->remote_surface.consumer = set;
+}
+
 static void
 _remote_region_cb_mirror_del(void *data, Evas *e, Evas_Object *obj, void *event_info)
 {
@@ -556,6 +574,8 @@ _remote_provider_cb_resource_destroy(struct wl_resource *resource)
              tizen_remote_surface_send_missing(remote_surface->resource);
           }
      }
+
+   _remote_provider_client_set(provider->ec, EINA_FALSE);
    _remote_provider_offscreen_set(provider, EINA_FALSE);
    E_FREE(provider);
 }
@@ -615,7 +635,10 @@ _remote_surface_cb_resource_destroy(struct wl_resource *resource)
    if (remote_surface->bind_ec)
      _remote_surface_bind_client(remote_surface, NULL);
    if (remote_surface->owner)
-     eina_hash_del_by_key(_rsm->surface_hash, &remote_surface->owner);
+     {
+        eina_hash_del_by_key(_rsm->surface_hash, &remote_surface->owner);
+        _remote_surface_client_set(remote_surface->owner, EINA_FALSE);
+     }
 
    E_FREE(remote_surface);
 }
@@ -1014,11 +1037,17 @@ _remote_surface_cb_owner_set(struct wl_client *client, struct wl_resource *resou
    if (surface_resource)
      owner = wl_resource_get_user_data(surface_resource);
 
+   if (remote_surface->owner)
+     _remote_surface_client_set(remote_surface->owner, EINA_FALSE);
+
    remote_surface->owner = owner;
    eina_hash_del_by_data(_rsm->surface_hash, remote_surface);
 
    if (owner)
-     eina_hash_add(_rsm->surface_hash, &owner, remote_surface);
+     {
+        eina_hash_add(_rsm->surface_hash, &owner, remote_surface);
+        _remote_surface_client_set(remote_surface->owner, EINA_TRUE);
+     }
 
    if (remote_surface->provider)
      _remote_provider_onscreen_parent_calculate(remote_surface->provider);
@@ -1123,6 +1152,7 @@ _remote_manager_cb_provider_create(struct wl_client *client, struct wl_resource
           ec->pixmap, ec,
           "PROVIDER", provider, resource);
 
+   _remote_provider_client_set(ec, EINA_TRUE);
    _remote_provider_offscreen_set(provider, EINA_TRUE);
 
    /* send resource id */