application {
appid = "GV3ySIINq7.GhostCluster",
- area = "Mid.Full",
+ area = "Center.Full",
privileges = { screen = "none", audio = "none" },
resource_class = "system",
screen_priority = 30
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 = ""
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
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,
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)
{
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);
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);
+}
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;
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 *);
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)
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;
}
+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,
FUNCBRIDGE(area_create , "oo" , NULL),
FUNCBRIDGE(layer_request , "oo" , NULL),
FUNCBRIDGE(window_request , "oood", NULL),
+ FUNCBRIDGE(buffer_request , "osdd", NULL),
FUNCBRIDGE_END
};
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; \