system-controller: support for map_buffer
authorJanos Kovacs <jankovac503@gmail.com>
Mon, 17 Mar 2014 14:41:09 +0000 (16:41 +0200)
committerKrisztian Litkey <krisztian.litkey@intel.com>
Thu, 8 Jan 2015 16:37:15 +0000 (18:37 +0200)
Change-Id: I94561949b22363d79e00b30e1fed8b26d63da316

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/scripting-wayland.c
src/plugins/system-controller/wayland/scripting-window-manager.c
src/plugins/system-controller/wayland/window-manager.h

index 4351c94..2cd2e23 100644 (file)
@@ -1432,7 +1432,7 @@ application {
 
 application {
     appid           = "GV3ySIINq7.GhostCluster",
-    area            = "Mid.Full",
+    area            = "Center.Full",
     privileges      = { screen = "none", audio = "none" },
     resource_class  = "system",
     screen_priority = 30
@@ -1454,7 +1454,7 @@ if sc then
 
         if command == 0xFFFF then
             if verbose > 1 then
-                print('client ' .. cid .. ' (' .. msg.appid .. ') disconnected')
+                print('client ' .. cid .. ' disconnected')
             end
             if msg.appid == homescreen then
                 homescreen = ""
@@ -1628,14 +1628,27 @@ if sc then
                 print(msg.arg)
                 print('framerate: '..framerate)
             end
-            --wmgr:window_request(msg.arg, a, framerate)
+            wmgr:window_request(msg.arg, a, framerate)
         elseif msg.command == 0x10012 then   -- ico UNMAP_THUMB
             msg.arg.mapped = 0
             if verbose > 2 then
                 print('### ==> UNMAP_THUMB REQUEST')
                 print(msg.arg)
             end
-            --wmgr:window_request(msg.arg, a, 0)
+            wmgr:window_request(msg.arg, a, 0)
+        elseif msg.command == 0x10013 then -- ico MAP_BUFFER command
+            local shmname = msg.arg.anim_name
+            local bufsize = msg.arg.width
+            local bufnum  = msg.arg.height
+            if shmname and bufsize and bufnum then
+                if verbose > 2 then
+                    print('### ==> MAP_BUFFER REQUEST')
+                    print("shmaname='" .. shmname ..
+                          "' bufsize='" .. bufsize ..
+                          " bufnum=" .. bufnum)
+                end
+                wmgr:buffer_request(shmname, bufsize, bufnum)
+            end
         elseif msg.command == 0x10020 then   -- ico SHOW_LAYER command
             msg.arg.visible = 1
             if verbose > 2 then
index 2fec595..dc8c9a0 100644 (file)
@@ -61,8 +61,8 @@ enum mrp_sysctl_scripting_field_e {
              WINDOW_RAISE,
     /* 13 */ BLINKER_RIGHT, INPUT_REQUEST, LAYER_REQUEST, OUTPUT_UPDATE,
              WINDOW_UPDATE,
-    /* 14 */ MANAGER_UPDATE, OUTPUT_REQUEST, RESOURCE_CLASS, WINDOW_MANAGER,
-             WINDOW_REQUEST,
+    /* 14 */ BUFFER_REQUEST, MANAGER_UPDATE, OUTPUT_REQUEST, RESOURCE_CLASS,
+             WINDOW_MANAGER, WINDOW_REQUEST,
     /* 15 */ MANAGER_REQUEST, SCREEN_PRIORITY,
     /* 19 */ AUDIO_EVENT_HANDLER, RESOURCE_SET_CREATE,
     /* 20 */ RESOURCE_SET_ACQUIRE, RESOURCE_SET_DESTROY, RESOURCE_SET_RELEASE,
index 50de17d..de5797f 100644 (file)
@@ -118,6 +118,9 @@ static void window_request(mrp_wayland_window_t *,
 
 static mrp_wayland_layer_type_t get_layer_type(uint32_t);
 
+static void buffer_request(mrp_wayland_window_manager_t *, const char *,
+                           uint32_t, uint32_t);
+
 
 bool mrp_ico_window_manager_register(mrp_wayland_t *wl)
 {
@@ -155,6 +158,7 @@ static bool window_manager_constructor(mrp_wayland_t *wl,
 
     wm->layer_request = layer_request;
     wm->window_request = window_request;
+    wm->buffer_request = buffer_request;
 
     sts = ico_window_mgr_add_listener((struct ico_window_mgr *)wm->proxy,
                                       &listener, wm);
@@ -1144,3 +1148,22 @@ static mrp_wayland_layer_type_t get_layer_type(uint32_t layertype)
         return MRP_WAYLAND_LAYER_TYPE_UNKNOWN;
     }
 }
+
+static void buffer_request(mrp_wayland_window_manager_t *wm,
+                           const char *shmname,
+                           uint32_t bufsize,
+                           uint32_t bufnum)
+{
+
+    struct ico_window_mgr *ico_window_mgr;
+
+    MRP_ASSERT(wm && wm->proxy && shmname, "invalid argument");
+
+    ico_window_mgr = (struct ico_window_mgr *)wm->proxy;
+
+    mrp_debug("calling ico_window_mgr_set_map_buffer"
+              "(shmname='%s', bufsize=%u, bufnum=%u)",
+              shmname, bufsize,bufnum);
+
+    ico_window_mgr_set_map_buffer(ico_window_mgr, shmname, bufsize,bufnum);
+}
index 9b9b016..a64e8ad 100644 (file)
@@ -654,6 +654,10 @@ mrp_wayland_scripting_field_name_to_type(const char *name, ssize_t len)
 
     case 14:
         switch (name[0]) {
+        case 'b':
+            if (!strcmp(name, "buffer_request"))
+                return BUFFER_REQUEST;
+            break;
         case 'm':
             if (!strcmp(name, "manager_update"))
                 return MANAGER_UPDATE;
index ea7c223..d3e01f5 100644 (file)
@@ -145,6 +145,11 @@ static void layer_update_callback(mrp_wayland_t *,
                                   mrp_wayland_layer_update_mask_t,
                                   mrp_wayland_layer_t *);
 
+static bool buffer_request_bridge(lua_State *, void *,
+                                  const char *, mrp_funcbridge_value_t *,
+                                  char *, mrp_funcbridge_value_t *);
+
+
 static uint32_t copy_json_fields(mrp_wayland_t *, mrp_json_t *,
                                  request_def_t *, void *);
 static bool register_methods(lua_State *);
@@ -172,6 +177,7 @@ static mrp_funcbridge_t *output_request;
 static mrp_funcbridge_t *area_create;
 static mrp_funcbridge_t *layer_request;
 static mrp_funcbridge_t *window_request;
+static mrp_funcbridge_t *buffer_request;
 
 
 void mrp_wayland_scripting_window_manager_init(lua_State *L)
@@ -451,6 +457,10 @@ static int window_manager_getfield(lua_State *L)
             mrp_funcbridge_push(L, wmgr->window_update);
             break;
 
+        case BUFFER_REQUEST:
+            mrp_funcbridge_push(L, buffer_request);
+            break;
+
         case PASSTHROUGH_WINDOW_REQUEST:
             mask = (wl->wm ? wl->wm->passthrough.window_request : 0);
             goto push_window_mask;
@@ -1170,6 +1180,54 @@ static void layer_update_callback(mrp_wayland_t *wl,
 }
 
 
+static bool buffer_request_bridge(lua_State *L,
+                                  void *data,
+                                  const char *signature,
+                                  mrp_funcbridge_value_t *args,
+                                  char *ret_type,
+                                  mrp_funcbridge_value_t *ret_val)
+{
+    mrp_wayland_t *wl;
+    mrp_wayland_window_manager_t *wm;
+    const char *shmname;
+    uint32_t bufsize;
+    uint32_t bufnum;
+
+    MRP_UNUSED(L);
+    MRP_UNUSED(data);
+    MRP_UNUSED(ret_val);
+    MRP_ASSERT(signature && args && ret_type, "invalid argument");
+
+    *ret_type = MRP_FUNCBRIDGE_NO_DATA;
+
+    if (strcmp(signature, "osdd")) {
+        mrp_log_error("system-controller: bad signature: "
+                      "expected 'osdd' got '%s'",signature);
+        return false;
+    }
+
+    if (!(wl = mrp_wayland_scripting_window_manager_unwrap(args[0].pointer))) {
+        mrp_log_error("system-controller: argument 1 is not a "
+                      "'window_manager' class object");
+        return false;
+    }
+
+    if (!(wm = wl->wm)) {
+        mrp_debug("ignoring buffer request: window manager is down");
+        return false;
+    }
+
+    shmname = args[1].string;
+    bufsize = args[2].integer;
+    bufnum  = args[3].integer;
+
+    if (wm->buffer_request)
+        wm->buffer_request(wm, shmname, bufsize, bufnum);
+
+    return true;
+}
+
+
 static uint32_t copy_json_fields(mrp_wayland_t *wl,
                                  mrp_json_t *json,
                                  request_def_t *fields,
@@ -1214,6 +1272,7 @@ static bool register_methods(lua_State *L)
         FUNCBRIDGE(area_create    , "oo"  , NULL),
         FUNCBRIDGE(layer_request  , "oo"  , NULL),
         FUNCBRIDGE(window_request , "oood", NULL),
+        FUNCBRIDGE(buffer_request , "osdd", NULL),
         FUNCBRIDGE_END
     };
 
index 46256e6..82d57ef 100644 (file)
@@ -49,6 +49,9 @@ enum mrp_wayland_window_manager_operation_e {
                            mrp_wayland_window_update_t *,               \
                            mrp_wayland_animation_t *,                   \
                            uint32_t);                                   \
+    void (*buffer_request)(mrp_wayland_window_manager_t *,              \
+                           const char *,                                \
+                           uint32_t, uint32_t);                         \
     struct {                                                            \
         mrp_wayland_window_update_mask_t window_request;                \
         mrp_wayland_window_update_mask_t window_update;                 \