system-controller: passthrough support for layer requests
authorJanos Kovacs <jankovac503@gmail.com>
Tue, 4 Mar 2014 11:27:49 +0000 (13:27 +0200)
committerKrisztian Litkey <krisztian.litkey@intel.com>
Thu, 8 Jan 2015 16:37:14 +0000 (18:37 +0200)
Change-Id: Ia4a3b545e447c4371fe793ac3c4ac8f9215c9db0

packaging.in/murphy.lua
src/plugins/system-controller/data-types.h
src/plugins/system-controller/wayland/ico-window-manager.c
src/plugins/system-controller/wayland/layer.c
src/plugins/system-controller/wayland/scripting-layer.c
src/plugins/system-controller/wayland/scripting-wayland.c
src/plugins/system-controller/wayland/scripting-window-manager.c
src/plugins/system-controller/wayland/window-manager.h
src/plugins/system-controller/wayland/window.c

index 08484c4..689f938 100644 (file)
@@ -1046,13 +1046,17 @@ wmgr = window_manager {
                                  window_manager_operation_name(oper))
                        end
                        if oper == 1 then
-                           local umask = window_mask { raise   = true,
-                                                       visible = true,
-                                                       active  = true }
-                           local rmask = window_mask { active  = true }
+                           local wumask = window_mask { raise   = true,
+                                                        visible = true,
+                                                        active  = true }
+                           local wrmask = window_mask { active  = true }
+                           local lumask = layer_mask  { visible = true }
+                           local lrmask = layer_mask  { visible = true }
                            local req = m:JSON({
-                                       passthrough_update  = umask:tointeger(),
-                                       passthrough_request = rmask:tointeger()
+                               passthrough_window_update  = wumask:tointeger(),
+                               passthrough_window_request = wrmask:tointeger(),
+                               passthrough_layer_update   = lumask:tointeger(),
+                               passthrough_layer_request  = lrmask:tointeger()
                            })
                            self:manager_request(req)
                        end
@@ -1340,6 +1344,14 @@ application {
 }
 
 application {
+    appid           = "org.tizen.ico.onscreen",
+    area            = "Center.Full",
+    privileges      = { screen = "system", audio = "system" },
+    resource_class  = "player",
+    screen_priority = 20
+}
+
+application {
     appid           = "org.tizen.ico.login",
     area            = "Center.Full",
     privileges      = { screen = "system", audio = "system" },
index b9d7814..9116d12 100644 (file)
@@ -63,14 +63,15 @@ enum mrp_sysctl_scripting_field_e {
     /* 14 */ MANAGER_UPDATE, OUTPUT_REQUEST, RESOURCE_CLASS, WINDOW_MANAGER,
              WINDOW_REQUEST,
     /* 15 */ MANAGER_REQUEST, SCREEN_PRIORITY,
-    /* 18 */ PASSTHROUGH_UPDATE,
-    /* 19 */ AUDIO_EVENT_HANDLER, PASSTHROUGH_REQUEST, RESOURCE_SET_CREATE,
+    /* 19 */ AUDIO_EVENT_HANDLER, RESOURCE_SET_CREATE,
     /* 20 */ RESOURCE_SET_ACQUIRE, RESOURCE_SET_DESTROY, RESOURCE_SET_RELEASE,
              SCREEN_EVENT_HANDLER,
     /* 22 */ DISABLE_AUDIO_BY_APPID,
     /* 23 */ DISABLE_SCREEN_BY_APPID,
-    /* 25 */ DISABLE_SCREEN_BY_SURFACE,
-    /* 26 */ DISABLE_AUDIO_BY_REQUISITE,
+    /* 24 */ PASSTHROUGH_LAYER_UPDATE,
+    /* 25 */ DISABLE_SCREEN_BY_SURFACE, PASSTHROUGH_LAYER_REQUEST,
+             PASSTHROUGH_WINDOW_UPDATE,
+    /* 26 */ DISABLE_AUDIO_BY_REQUISITE, PASSTHROUGH_WINDOW_REQUEST,
     /* 27 */ DISABLE_SCREEN_BY_REQUISITE,
 };
 
index d5dc05d..df91127 100644 (file)
@@ -428,7 +428,7 @@ static void layer_visible_callback(void *data,
     mrp_debug("layerid=%u visible=%d", layerid, visible);
 
     memset(&u, 0, sizeof(u));
-    u.mask = MRP_WAYLAND_WINDOW_VISIBLE_MASK;
+    u.mask = MRP_WAYLAND_LAYER_VISIBLE_MASK;
     u.visible = visible;
 
     if (!(layer = mrp_wayland_layer_find(wl, layerid))) {
@@ -489,6 +489,7 @@ static void map_surface_callback(void *data,
 }
 
 static void set_layer_visible(mrp_wayland_layer_t *layer,
+                              mrp_wayland_layer_update_mask_t passthrough,
                               mrp_wayland_layer_update_t *u)
 {
     struct ico_window_mgr *ico_window_mgr;
@@ -501,7 +502,9 @@ static void set_layer_visible(mrp_wayland_layer_t *layer,
 
     need_visibility_change = false;
     if (!(mask & MRP_WAYLAND_LAYER_VISIBLE_MASK) ||
-        (u->visible && layer->visible) || (!u->visible && !layer->visible))
+        ((( u->visible &&  layer->visible) ||
+          (!u->visible && !layer->visible)  ) &&
+         !(passthrough & MRP_WAYLAND_LAYER_VISIBLE_MASK)))
     {
         visible = ICO_WINDOW_MGR_V_NOCHANGE;
     }
@@ -526,14 +529,18 @@ static void layer_request(mrp_wayland_layer_t *layer,
                           mrp_wayland_layer_update_t *u)
 {
     mrp_wayland_t *wl;
+    mrp_wayland_window_manager_t *wm;
     mrp_wayland_layer_update_mask_t mask;
+    mrp_wayland_layer_update_mask_t passthrough;
     char buf[2048];
 
     MRP_ASSERT(layer && layer->wm && layer->wm->proxy &&
                layer->wm->interface && layer->wm->interface->wl,
                "invalid argument");
 
-    wl = layer->wm->interface->wl;
+    wm = layer->wm;
+    wl = wm->interface->wl;
+    passthrough = wm->passthrough.layer_request;
     mask = u->mask;
 
     mrp_wayland_layer_request_print(u, buf, sizeof(buf));
@@ -541,7 +548,7 @@ static void layer_request(mrp_wayland_layer_t *layer,
 
     while (mask) {
         if ((mask & MRP_WAYLAND_LAYER_VISIBLE_MASK)) {
-            set_layer_visible(layer, u);
+            set_layer_visible(layer, passthrough, u);
             mask &= ~MRP_WAYLAND_LAYER_VISIBLE_MASK;
         }
         else {
@@ -1021,7 +1028,7 @@ static void window_request(mrp_wayland_window_t *win,
 
     wm = win->wm;
     wl = wm->interface->wl;
-    passthrough = wm->passthrough.request;
+    passthrough = wm->passthrough.window_request;
     mask = u->mask;
 
     mrp_wayland_window_request_print(u, wbuf, sizeof(wbuf));
index 242a5ee..c8e5185 100644 (file)
@@ -274,9 +274,16 @@ static mrp_wayland_layer_update_mask_t update(mrp_wayland_layer_t *layer,
                                               mrp_wayland_layer_update_t *u)
 {
     mrp_wayland_layer_update_mask_t mask = 0;
+    mrp_wayland_layer_update_mask_t passthrough = 0;
+    mrp_wayland_window_manager_t *wm;
+
+    if ((wm = layer->wm))
+        passthrough = wm->passthrough.layer_update;
 
     if ((u->mask & MRP_WAYLAND_LAYER_NAME_MASK)) {
-        if (!layer->name || strcmp(u->name, layer->name)) {
+        if (!layer->name || strcmp(u->name, layer->name) ||
+            (passthrough & MRP_WAYLAND_LAYER_NAME_MASK))
+        {
             mask |= MRP_WAYLAND_LAYER_NAME_MASK;
             mrp_free(layer->name);
             layer->name = mrp_strdup(u->name);
@@ -284,14 +291,19 @@ static mrp_wayland_layer_update_mask_t update(mrp_wayland_layer_t *layer,
     }
 
     if ((u->mask & MRP_WAYLAND_LAYER_TYPE_MASK)) {
-        if (u->type != layer->type) {
+        if (u->type != layer->type ||
+            (passthrough & MRP_WAYLAND_LAYER_TYPE_MASK))
+        {
             mask |= MRP_WAYLAND_LAYER_TYPE_MASK;
             layer->type = u->type;
         }
     }
 
     if ((u->mask & MRP_WAYLAND_LAYER_VISIBLE_MASK)) {
-        if ((u->visible && !layer->visible)||(!u->visible && layer->visible)) {
+        if (( u->visible && !layer->visible) ||
+            (!u->visible &&  layer->visible) ||
+            (passthrough & MRP_WAYLAND_LAYER_VISIBLE_MASK))
+        {
             mask |= MRP_WAYLAND_LAYER_VISIBLE_MASK;
             layer->visible = u->visible;
         }
index b3a3b39..c498161 100644 (file)
@@ -75,6 +75,7 @@ static int  layer_mask_create_from_lua(lua_State *);
 static int  layer_mask_getfield(lua_State *);
 static int  layer_mask_setfield(lua_State *);
 static int  layer_mask_stringify(lua_State *);
+static int  layer_mask_tointeger(lua_State *);
 static void layer_mask_destroy(void *);
 
 static scripting_layer_mask_t *layer_mask_check(lua_State *, int);
@@ -103,6 +104,7 @@ MRP_LUA_CLASS_DEF_SIMPLE (
     layer_mask_destroy,         /* userdata destructor */
     MRP_LUA_METHOD_LIST (       /* methods */
        MRP_LUA_METHOD_CONSTRUCTOR (layer_mask_create_from_lua)
+       MRP_LUA_METHOD(tointeger,   layer_mask_tointeger)
     ),
     MRP_LUA_METHOD_LIST (       /* overrides */
        MRP_LUA_OVERRIDE_CALL      (layer_mask_create_from_lua)
@@ -454,6 +456,18 @@ static int layer_mask_stringify(lua_State *L)
     MRP_LUA_LEAVE(1);
 }
 
+static int layer_mask_tointeger(lua_State *L)
+{
+    scripting_layer_mask_t *um;
+
+    MRP_LUA_ENTER;
+
+    um = layer_mask_check(L, 1);
+    lua_pushinteger(L, um->mask);
+
+    MRP_LUA_LEAVE(1);
+}
+
 static void layer_mask_destroy(void *data)
 {
     scripting_layer_mask_t *um = (scripting_layer_mask_t *)data;
index 4dbf3d2..0427bad 100644 (file)
@@ -663,14 +663,29 @@ mrp_wayland_scripting_field_name_to_type(const char *name, ssize_t len)
             return MANAGER_REQUEST;
         break;
 
-    case 18:
-        if (!strcmp(name, "passthrough_update"))
-            return PASSTHROUGH_UPDATE;
+    case 24:
+        if (!strcmp(name, "passthrough_layer_update"))
+            return PASSTHROUGH_LAYER_UPDATE;
         break;
 
-    case 19:
-        if (!strcmp(name, "passthrough_request"))
-            return PASSTHROUGH_REQUEST;
+    case 25:
+        switch (name[12]) {
+        case 'l':
+            if (!strcmp(name, "passthrough_layer_request"))
+                return PASSTHROUGH_LAYER_REQUEST;
+            break;
+        case 'w':
+            if (!strcmp(name, "passthrough_window_update"))
+                return PASSTHROUGH_WINDOW_UPDATE;
+            break;
+        default:
+            break;
+        }
+        break;
+
+    case 26:
+        if (!strcmp(name, "passthrough_window_request"))
+            return PASSTHROUGH_WINDOW_REQUEST;
         break;
 
     default:
index 8836c51..d6599ce 100644 (file)
@@ -425,19 +425,32 @@ static int window_manager_getfield(lua_State *L)
             mrp_funcbridge_push(L, wmgr->window_update);
             break;
 
-        case PASSTHROUGH_REQUEST:
-            mask = (wl->wm ? wl->wm->passthrough.request : 0);
-            goto push_mask;
+        case PASSTHROUGH_WINDOW_REQUEST:
+            mask = (wl->wm ? wl->wm->passthrough.window_request : 0);
+            goto push_window_mask;
 
-        case PASSTHROUGH_UPDATE:
-            mask = (wl->wm ? wl->wm->passthrough.update : 0);
-            goto push_mask;
+        case PASSTHROUGH_WINDOW_UPDATE:
+            mask = (wl->wm ? wl->wm->passthrough.window_update : 0);
+            goto push_window_mask;
 
-        push_mask:
+        case PASSTHROUGH_LAYER_REQUEST:
+            mask = (wl->wm ? wl->wm->passthrough.layer_request : 0);
+            goto push_layer_mask;
+
+        case PASSTHROUGH_LAYER_UPDATE:
+            mask = (wl->wm ? wl->wm->passthrough.layer_update : 0);
+            goto push_layer_mask;
+
+        push_window_mask:
             if (!mrp_wayland_scripting_window_mask_create_from_c(L, mask))
                 lua_pushnil(L);
             break;
 
+        push_layer_mask:
+            if (!mrp_wayland_scripting_layer_mask_create_from_c(L, mask))
+                lua_pushnil(L);
+            break;
+
         default:
             lua_pushstring(L, fldnam);
             lua_rawget(L, 1);
@@ -596,21 +609,39 @@ static bool manager_request_bridge(lua_State *L,
     mrp_json_foreach_member(json, key,val, it) {
         switch (mrp_wayland_scripting_field_name_to_type(key, -1)) {
 
-        case PASSTHROUGH_REQUEST:
+        case PASSTHROUGH_WINDOW_REQUEST:
+            if (!mrp_wayland_json_integer_copy(wl, &mask, val, 1))
+                mrp_debug("'%s' field has invalid value", key);
+            else {
+                mrp_debug("set passthrough.window_request to 0x%x", mask);
+                wm->passthrough.window_request = mask;
+            }
+            break;
+
+        case PASSTHROUGH_WINDOW_UPDATE:
+            if (!mrp_wayland_json_integer_copy(wl, &mask, val, 1))
+                mrp_debug("'%s' field has invalid value", key);
+            else {
+                mrp_debug("set passthrough.window_update to 0x%x", mask);
+                wm->passthrough.window_update = mask;
+            }
+            break;
+
+        case PASSTHROUGH_LAYER_REQUEST:
             if (!mrp_wayland_json_integer_copy(wl, &mask, val, 1))
                 mrp_debug("'%s' field has invalid value", key);
             else {
-                mrp_debug("set passthrough.request to 0x%x", mask);
-                wm->passthrough.request = mask;
+                mrp_debug("set passthrough.layer_request to 0x%x", mask);
+                wm->passthrough.layer_request = mask;
             }
             break;
 
-        case PASSTHROUGH_UPDATE:
+        case PASSTHROUGH_LAYER_UPDATE:
             if (!mrp_wayland_json_integer_copy(wl, &mask, val, 1))
                 mrp_debug("'%s' field has invalid value", key);
             else {
-                mrp_debug("set passthrough.update to 0x%x", mask);
-                wm->passthrough.update = mask;
+                mrp_debug("set passthrough.layer_update to 0x%x", mask);
+                wm->passthrough.layer_update = mask;
             }
             break;
 
index 36122a4..46256e6 100644 (file)
@@ -50,8 +50,11 @@ enum mrp_wayland_window_manager_operation_e {
                            mrp_wayland_animation_t *,                   \
                            uint32_t);                                   \
     struct {                                                            \
-        mrp_wayland_window_update_mask_t request;                       \
-        mrp_wayland_window_update_mask_t update;                        \
+        mrp_wayland_window_update_mask_t window_request;                \
+        mrp_wayland_window_update_mask_t window_update;                 \
+                                                                        \
+        mrp_wayland_layer_update_mask_t layer_request;                  \
+        mrp_wayland_layer_update_mask_t layer_update;                   \
     } passthrough
 
 
index 62f78be..3b78cc7 100644 (file)
@@ -443,7 +443,9 @@ static mrp_wayland_window_update_mask_t update(mrp_wayland_window_t *win,
                                                mrp_wayland_window_update_t *u)
 {
     mrp_wayland_window_update_mask_t mask = 0;
-    mrp_wayland_window_update_mask_t passthrough = win->wm->passthrough.update;
+    mrp_wayland_window_update_mask_t passthrough;
+
+    passthrough = win->wm->passthrough.window_update;
 
     if ((u->mask & MRP_WAYLAND_WINDOW_NAME_MASK)) {
         if (!win->name || strcmp(u->name, win->name) ||