temporary fix: save the client request information to e_pixmap 59/38459/1
authorBoram Park <boram1288.park@samsung.com>
Fri, 17 Apr 2015 07:25:13 +0000 (16:25 +0900)
committerBoram Park <boram1288.park@samsung.com>
Tue, 21 Apr 2015 05:54:48 +0000 (14:54 +0900)
Change-Id: I5e7f75fc76f844804964ed2331163f1b9df4aa33

src/bin/e_comp_wl.c
src/bin/e_comp_wl.h
src/bin/e_pixmap.c
src/bin/e_pixmap.h
src/modules/wl_desktop_shell/e_scaler.c

index 0752367acda4ff8a96ad45c0e88f41ff5e03ecec..2580347bb33c1990e98d934e222891c8938ed5c2 100644 (file)
@@ -1679,6 +1679,9 @@ _e_comp_wl_compositor_cb_surface_create(struct wl_client *client, struct wl_reso
    /* set reference to pixmap so we can fetch it later */
    wl_resource_set_user_data(res, ep);
 
+   E_Comp_Wl_Client_Data *cdata = e_pixmap_cdata_get(ep);
+   cdata->wl_surface = res;
+
    /* emit surface create signal */
    wl_signal_emit(&comp->wl_comp_data->signals.surface.create, res);
 }
@@ -2338,6 +2341,12 @@ _e_comp_wl_client_cb_new(void *data EINA_UNUSED, E_Client *ec)
    /* add this client to the hash */
    /* eina_hash_add(clients_win_hash, &win, ec); */
    e_hints_client_list_set();
+
+   E_Comp_Wl_Client_Data *cdata = e_pixmap_cdata_get(ec->pixmap);
+   struct wl_resource *wl_resource = cdata->wl_surface;
+   ec->comp_data->scaler = cdata->scaler;
+   e_pixmap_cdata_set(ec->pixmap, ec->comp_data);
+   _e_comp_wl_surface_cb_commit(NULL, wl_resource);
 }
 
 static void
index 1d9efedcf23eaa8798ae8cba4b38c0110d977887..2ce5488f257ce4f5fd249f33e3fd184379b490ea 100644 (file)
@@ -261,6 +261,8 @@ struct _E_Comp_Wl_Data
 
 struct _E_Comp_Wl_Client_Data
 {
+   struct wl_resource *wl_surface;
+
    Ecore_Timer *first_draw_tmr;
 
    struct
index 5bb244503af166d01ca5f13b93817ef9ee6db178..22ffb8c9fa899fbb88e77fecd7198dcf3cb9b40c 100644 (file)
@@ -36,6 +36,8 @@ struct _E_Pixmap
    struct wl_listener buffer_destroy_listener;
    void *data;
    Eina_Rectangle opaque;
+
+   E_Comp_Wl_Client_Data *cdata;
 #endif
 
    Eina_Bool usable : 1;
@@ -140,6 +142,7 @@ _e_pixmap_new(E_Pixmap_Type type)
    cp->w = cp->h = 0;
    cp->refcount = 1;
    cp->dirty = 1;
+   cp->cdata = calloc(1, sizeof(E_Comp_Wl_Client_Data));
    return cp;
 }
 
@@ -949,3 +952,19 @@ e_pixmap_image_opaque_get(E_Pixmap *cp, int *x, int *y, int *w, int *h)
    if (h) *h = 0;
 #endif
 }
+
+EAPI E_Comp_Client_Data *
+e_pixmap_cdata_get(E_Pixmap *cp)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(cp, NULL);
+   return (E_Comp_Client_Data*)cp->cdata;
+}
+
+EAPI void
+e_pixmap_cdata_set(E_Pixmap *cp, E_Comp_Client_Data *cdata)
+{
+   EINA_SAFETY_ON_NULL_RETURN(cp);
+   EINA_SAFETY_ON_NULL_RETURN(cdata);
+   free (cp->cdata);
+   cp->cdata = (E_Comp_Wl_Client_Data*)cdata;
+}
index f13025192cc0b9a263f85d882a9d261150b6ef92..ff577b073465eb98ea21cb07891cc34622d65d33 100644 (file)
@@ -17,6 +17,8 @@ EAPI E_Pixmap *e_pixmap_ref(E_Pixmap *cp);
 EAPI E_Pixmap *e_pixmap_new(E_Pixmap_Type type, ...);
 EAPI E_Pixmap_Type e_pixmap_type_get(const E_Pixmap *cp);
 EAPI void *e_pixmap_resource_get(E_Pixmap *cp);
+EAPI E_Comp_Client_Data *e_pixmap_cdata_get(E_Pixmap *cp);
+EAPI void e_pixmap_cdata_set(E_Pixmap *cp, E_Comp_Client_Data *cdata);
 EAPI void e_pixmap_resource_set(E_Pixmap *cp, void *resource);
 EAPI void e_pixmap_parent_window_set(E_Pixmap *cp, Ecore_Window win);
 EAPI void e_pixmap_visual_cmap_set(E_Pixmap *cp, void *visual, unsigned int cmap);
index b27798114a38310493329986e34d7e98acc697a3..e0aabe9e3b7abfe0b8693f5ad273e4263132be53 100644 (file)
@@ -151,14 +151,11 @@ _e_scaler_cb_get_viewport(struct wl_client *client EINA_UNUSED, struct wl_resour
 {
    int version = wl_resource_get_version(scaler);
    E_Pixmap *ep;
-   E_Client *ec;
    struct wl_resource *res;
    E_Comp_Client_Data *cdata;
 
    if (!(ep = wl_resource_get_user_data(surface_resource))) return;
-   if (!(ec = e_pixmap_client_get(ep))) return;
-   if (e_object_is_del(E_OBJECT(ec))) return;
-   if (!(cdata = ec->comp_data)) return;
+   if (!(cdata = e_pixmap_cdata_get(ep))) return;
 
    if (cdata->scaler.viewport)
      {