Support lower request for wayland surface 91/41291/1
authorMinJeong Kim <minjjj.kim@samsung.com>
Fri, 12 Jun 2015 08:35:02 +0000 (17:35 +0900)
committerMinJeong Kim <minjjj.kim@samsung.com>
Fri, 12 Jun 2015 09:14:59 +0000 (18:14 +0900)
Change-Id: I3160bd396d24cf9775f6e4b66ae3b09d884a4585
Signed-off-by: MinJeong Kim <minjjj.kim@samsung.com>
src/e_mod_wl.c
src/e_tizen_policy_server_protocol.c
src/e_tizen_policy_server_protocol.h

index f3dcbc4..b071681 100644 (file)
@@ -122,6 +122,36 @@ _e_tizen_policy_cb_activate(struct wl_client *client,
 }
 
 static void
+_e_tizen_policy_cb_lower(struct wl_client *client,
+                         struct wl_resource *policy,
+                         struct wl_resource *surface_resource)
+{
+   E_Pixmap *ep;
+   E_Client *ec, *below = NULL;
+
+   ep = wl_resource_get_user_data(surface_resource);
+   EINA_SAFETY_ON_NULL_RETURN(ep);
+
+   ec = e_pixmap_client_get(ep);
+   EINA_SAFETY_ON_NULL_RETURN(ec);
+   EINA_SAFETY_ON_NULL_RETURN(ec->frame);
+
+   below = ec;
+   while ((below = e_client_below_get(below)))
+     {
+        if ((e_client_util_ignored_get(below)) ||
+            (below->iconic)) continue;
+
+        break;
+     }
+
+   evas_object_lower(ec->frame);
+
+   if ((!below) || (!ec->focused)) return;
+   evas_object_focus_set(below->frame, 1);
+}
+
+static void
 _e_tizen_policy_cb_position_set(struct wl_client *client,
                                 struct wl_resource *policy,
                                 struct wl_resource *surface_resource,
@@ -207,6 +237,7 @@ static const struct tizen_policy_interface _e_tizen_policy_interface =
 {
    _e_tizen_policy_cb_visibility_get,
    _e_tizen_policy_cb_activate,
+   _e_tizen_policy_cb_lower,
    _e_tizen_policy_cb_position_set,
    _e_tizen_policy_cb_focus_skip_set,
    _e_tizen_policy_cb_focus_skip_unset,
index b85438f..70c3b47 100644 (file)
@@ -11,6 +11,7 @@ static const struct wl_interface *types[] = {
        &wl_surface_interface,
        &wl_surface_interface,
        &wl_surface_interface,
+       &wl_surface_interface,
        NULL,
        NULL,
        &wl_surface_interface,
@@ -20,14 +21,15 @@ static const struct wl_interface *types[] = {
 static const struct wl_message tizen_policy_requests[] = {
        { "get_visibility", "no", types + 1 },
        { "activate", "o", types + 3 },
-       { "position_set", "oii", types + 4 },
-       { "focus_skip_set", "o", types + 7 },
-       { "focus_skip_unset", "o", types + 8 },
+       { "lower", "o", types + 4 },
+       { "position_set", "oii", types + 5 },
+       { "focus_skip_set", "o", types + 8 },
+       { "focus_skip_unset", "o", types + 9 },
 };
 
 WL_EXPORT const struct wl_interface tizen_policy_interface = {
        "tizen_policy", 1,
-       5, tizen_policy_requests,
+       6, tizen_policy_requests,
        0, NULL,
 };
 
index 1aa79dc..4328ec2 100644 (file)
@@ -38,6 +38,13 @@ struct tizen_policy_interface {
                         struct wl_resource *resource,
                         struct wl_resource *surface);
        /**
+        * lower - (none)
+        * @surface: surface object
+        */
+       void (*lower)(struct wl_client *client,
+                        struct wl_resource *resource,
+                        struct wl_resource *surface);
+       /**
         * position_set - (none)
         * @surface: surface object
         * @x: (none)