}
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;
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
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
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 *
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;
}
<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>
#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,
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,
+};
+
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 {
/**
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)
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
}