split 'tizen_transient_for' interface from tizen_surface_extension 25/39525/2
authorDuna Oh <duna.oh@samsung.com>
Mon, 18 May 2015 09:34:00 +0000 (18:34 +0900)
committerDuna Oh <duna.oh@samsung.com>
Mon, 18 May 2015 10:48:24 +0000 (19:48 +0900)
Change-Id: Ie59510f9e502878d2d8525821e9613b8a4756b8f
Signed-off-by: Duna Oh <duna.oh@samsung.com>
src/modules/wl_desktop_shell/e_mod_main.c
src/modules/wl_desktop_shell/tizen_extension.xml
src/modules/wl_desktop_shell/tizen_extension_protocol.c
src/modules/wl_desktop_shell/tizen_extension_server_protocol.h

index 6a241136c59f97ae8d13fda7d9ed4ea9a84d1d0d..54d8ba13313bb7a5028c076a32aec9024fbc1103 100644 (file)
@@ -1402,7 +1402,7 @@ _e_tz_surf_ext_cb_tz_res_get(struct wl_client *client, struct wl_resource *resou
 }
 
 static void
-_e_tz_surf_ext_cb_transient_for_set(struct wl_client *client, struct wl_resource *resource, uint32_t child_id, uint32_t parent_id)
+_e_tz_transient_for_cb_set(struct wl_client *client, struct wl_resource *resource, uint32_t child_id, uint32_t parent_id)
 {
    E_Client *ec, *pc;
    struct wl_resource *parent_res;
@@ -1418,6 +1418,9 @@ _e_tz_surf_ext_cb_transient_for_set(struct wl_client *client, struct wl_resource
 
    parent_res = pc->comp_data->surface;
    _e_shell_surface_parent_set(ec, parent_res);
+   tizen_transient_for_send_done(resource, child_id);
+
+   EC_CHANGED(ec);
 }
 
 static void
@@ -1458,10 +1461,14 @@ _e_tz_surf_ext_cb_place_below_parent(struct wl_client *client, struct wl_resourc
 static const struct tizen_surface_extension_interface  _e_tz_surf_ext_interface =
 {
    _e_tz_surf_ext_cb_tz_res_get,
-   _e_tz_surf_ext_cb_transient_for_set,
    _e_tz_surf_ext_cb_place_below_parent,
 };
 
+static const struct tizen_transient_for_interface _e_tz_transient_for_interface =
+{
+   _e_tz_transient_for_cb_set,
+};
+
 static const struct wl_shell_interface _e_shell_interface =
 {
    _e_shell_cb_shell_surface_get
@@ -1596,6 +1603,31 @@ _e_tz_surf_ext_cb_bind(struct wl_client *client, void *data, uint32_t version, u
    wl_resource_set_implementation(res, &_e_tz_surf_ext_interface, cdata, NULL);
 }
 
+static void
+_e_tz_transient_for_cb_bind(struct wl_client *client, void *data, uint32_t version, uint32_t id)
+{
+   E_Comp_Data *cdata;
+   struct wl_resource *res;
+
+   if (!(cdata = data))
+     {
+        wl_client_post_no_memory(client);
+        return;
+     }
+
+   if (!(res = wl_resource_create(client,
+                                  &tizen_transient_for_interface,
+                                  MIN(version, 1),
+                                  id)))
+     {
+        ERR("Could not create tizen_transient_for resource: %m");
+        wl_client_post_no_memory(client);
+        return;
+     }
+
+   wl_resource_set_implementation(res, &_e_tz_transient_for_interface, cdata, NULL);
+}
+
 EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Wl_Desktop_Shell" };
 
 EAPI void *
@@ -1641,6 +1673,16 @@ e_modapi_init(E_Module *m)
         ERR("Could not create tizen_surface_extension to wayland globals: %m");
         return NULL;
      }
+   /* try to create global tizen transient_for interface */
+   if (!wl_global_create(cdata->wl.disp,
+                         &tizen_transient_for_interface,
+                         1,
+                         cdata,
+                         _e_tz_transient_for_cb_bind))
+     {
+        ERR("Could not create tizen_transient_for to wayland globals: %m");
+        return NULL;
+     }
 
    return m;
 }
index cf3da89a4e60eca9785f5f8971fe7541d55ca634..c533fd4480d03dd76e44c1fd6f115515f2c8cb7f 100644 (file)
          <arg name="id" type="new_id" interface="tizen_resource" /> 
          <arg name="surface" type="object" interface="wl_surface" /> 
       </request>
-      <request name="set_transient_for">
-         <arg name="child_id" type="uint" /> 
-         <arg name="parent_id" type="uint" /> 
-      </request>
       <request name="place_below_parent">
          <arg name="subsurface" type="object" interface="wl_subsurface"/>
       </request>
    </interface>
+   <interface name="tizen_transient_for" version="1">
+      <request name="set">
+         <arg name="child_id" type="uint" />
+         <arg name="parent_id" type="uint" />
+      </request>
+      <event name="done">
+         <arg name="child_id" type="uint"/>
+      </event>
+   </interface>
 </protocol>
index 30851a3270a602d7f7c43f9de14469c870a14daf..3de79ba197b9019e57523ee71965ea1f9d6594d4 100644 (file)
@@ -3,8 +3,8 @@
 #include "wayland-util.h"
 
 extern const struct wl_interface tizen_resource_interface;
-extern const struct wl_interface wl_subsurface_interface;
 extern const struct wl_interface wl_surface_interface;
+extern const struct wl_interface wl_subsurface_interface;
 
 static const struct wl_interface *types[] = {
        NULL,
@@ -30,13 +30,26 @@ WL_EXPORT const struct wl_interface tizen_resource_interface = {
 
 static const struct wl_message tizen_surface_extension_requests[] = {
        { "get_tizen_resource", "no", types + 2 },
-       { "set_transient_for", "uu", types + 0 },
        { "place_below_parent", "o", types + 4 },
 };
 
 WL_EXPORT const struct wl_interface tizen_surface_extension_interface = {
        "tizen_surface_extension", 1,
-       3, tizen_surface_extension_requests,
+       2, tizen_surface_extension_requests,
        0, NULL,
 };
 
+static const struct wl_message tizen_transient_for_requests[] = {
+       { "set", "uu", types + 0 },
+};
+
+static const struct wl_message tizen_transient_for_events[] = {
+       { "done", "u", types + 0 },
+};
+
+WL_EXPORT const struct wl_interface tizen_transient_for_interface = {
+       "tizen_transient_for", 1,
+       1, tizen_transient_for_requests,
+       1, tizen_transient_for_events,
+};
+
index d1ce426159f6e609aa0900acf290f47fc3c6fe48..ab288438b0f1fedffbee762f4c68dbae9ea58394 100644 (file)
@@ -14,9 +14,11 @@ struct wl_resource;
 
 struct tizen_resource;
 struct tizen_surface_extension;
+struct tizen_transient_for;
 
 extern const struct wl_interface tizen_resource_interface;
 extern const struct wl_interface tizen_surface_extension_interface;
+extern const struct wl_interface tizen_transient_for_interface;
 
 struct tizen_resource_interface {
        /**
@@ -46,15 +48,6 @@ struct tizen_surface_extension_interface {
                                   struct wl_resource *resource,
                                   uint32_t id,
                                   struct wl_resource *surface);
-       /**
-        * set_transient_for - (none)
-        * @child_id: (none)
-        * @parent_id: (none)
-        */
-       void (*set_transient_for)(struct wl_client *client,
-                                 struct wl_resource *resource,
-                                 uint32_t child_id,
-                                 uint32_t parent_id);
        /**
         * place_below_parent - (none)
         * @subsurface: (none)
@@ -64,6 +57,25 @@ struct tizen_surface_extension_interface {
                                   struct wl_resource *subsurface);
 };
 
+struct tizen_transient_for_interface {
+       /**
+        * set - (none)
+        * @child_id: (none)
+        * @parent_id: (none)
+        */
+       void (*set)(struct wl_client *client,
+                   struct wl_resource *resource,
+                   uint32_t child_id,
+                   uint32_t parent_id);
+};
+
+#define TIZEN_TRANSIENT_FOR_DONE       0
+
+static inline void
+tizen_transient_for_send_done(struct wl_resource *resource_, uint32_t child_id)
+{
+       wl_resource_post_event(resource_, TIZEN_TRANSIENT_FOR_DONE, child_id);
+}
 
 #ifdef  __cplusplus
 }