diff options
Diffstat (limited to 'lib/CWayland')
| -rw-r--r-- | lib/CWayland/CWayland.cc | 23 | ||||
| -rw-r--r-- | lib/CWayland/CWayland.h | 16 |
2 files changed, 22 insertions, 17 deletions
diff --git a/lib/CWayland/CWayland.cc b/lib/CWayland/CWayland.cc index 718785f..7ff9332 100644 --- a/lib/CWayland/CWayland.cc +++ b/lib/CWayland/CWayland.cc @@ -174,7 +174,7 @@ lean_obj_res waylean_display_new(b_lean_obj_arg name) if (!disp) { return io_result_mk_from_errno(name_cstr ? name_cstr : "<default>"); } lean_object* waylean_disp = lean_alloc_external(waylean_display_class(), disp); - wl_proxy_add_dispatcher((wl_proxy*)disp, dispatcher_func, waylean_disp, nullptr); + // wl_proxy_add_dispatcher((wl_proxy*)disp, dispatcher_func, waylean_disp, nullptr); return lean_io_result_mk_ok(waylean_disp); } @@ -870,6 +870,7 @@ namespace } public: + int get_count() { return writer_idx; } wl_argument* get_args() { return args.data(); } void write_int(int32_t value) @@ -916,11 +917,12 @@ namespace meta[i].ref = std::move(value); } - void write_new_id(std::uint32_t value) + void write_new_id(ref value) { auto i = next_write(); - args[i].n = value; - meta[i].type = type::new_id; + args[i].o = static_cast<wl_object*>(lean_get_external_data(value.get())); + meta[i].type = type::object; + meta[i].ref = std::move(value); } void write_array(ref value) @@ -1092,7 +1094,7 @@ lean_obj_res waylean_argument_buffer_write_uint(b_lean_obj_arg buffer_obj, uint3 return lean_io_result_mk_ok(lean_box(0)); } -// ArgumentBuffer.writeFloat : (buffer : @& ArgumentBuffer) → (value : Float) → IO Unit +// ArgumentBuffer.writeFixed : (buffer : @& ArgumentBuffer) → (value : Float) → IO Unit lean_obj_res waylean_argument_buffer_write_fixed(b_lean_obj_arg buffer_obj, float value) { auto buffer = static_cast<argument_buffer*>(lean_get_external_data(buffer_obj)); @@ -1120,8 +1122,7 @@ lean_obj_res waylean_argument_buffer_write_object(b_lean_obj_arg buffer_obj, b_l lean_obj_res waylean_argument_buffer_write_new_id(b_lean_obj_arg buffer_obj, b_lean_obj_arg value) { auto buffer = static_cast<argument_buffer*>(lean_get_external_data(buffer_obj)); - auto proxy = static_cast<wl_proxy*>(lean_get_external_data(value)); - buffer->write_new_id(wl_proxy_get_id(proxy)); + buffer->write_new_id(ref{ value }); return lean_io_result_mk_ok(lean_box(0)); } @@ -1148,7 +1149,7 @@ lean_obj_res waylean_argument_buffer_read_int(b_lean_obj_arg buffer_obj) return lean_io_result_mk_ok(buffer->read_int().release()); } -// ArgumentBuffer.readUInt : (buffer : @& ArgumentBuffer) → IO Int32 +// ArgumentBuffer.readUInt : (buffer : @& ArgumentBuffer) → IO UInt32 lean_obj_res waylean_argument_buffer_read_uint(b_lean_obj_arg buffer_obj) { auto buffer = static_cast<argument_buffer*>(lean_get_external_data(buffer_obj)); @@ -1203,6 +1204,7 @@ namespace { int dispatcher_func(const void* user_data, void* target, uint32_t opcode, const wl_message* msg, wl_argument* args) { + fprintf(stderr, "Dispatcher func!\n"); if (!user_data) { return 0; } auto handler = ref{ (lean_object*)user_data }; @@ -1279,7 +1281,8 @@ lean_obj_res waylean_proxy_new(b_lean_obj_arg factory_obj, b_lean_obj_arg map_ob lean_object* waylean_res = lean_alloc_external(waylean_proxy_class(), res); if (!res) { return io_result_mk_from_errno("<unknown>"); } - wl_proxy_add_dispatcher(res, dispatcher_func, waylean_res, nullptr); + int stat = wl_proxy_add_dispatcher(res, dispatcher_func, waylean_res, nullptr); + fprintf(stderr, "add_dispatcher: %d\n", stat); return lean_io_result_mk_ok(waylean_res); } @@ -1289,7 +1292,9 @@ lean_obj_res waylean_proxy_send(b_lean_obj_arg proxy_obj, uint32_t opcode, b_lea { auto proxy = static_cast<wl_proxy*>(lean_get_external_data(proxy_obj)); auto buffer = static_cast<argument_buffer*>(lean_get_external_data(buffer_obj)); + wl_proxy_marshal_array(proxy, opcode, buffer->get_args()); + return lean_io_result_mk_ok(lean_box(0)); } diff --git a/lib/CWayland/CWayland.h b/lib/CWayland/CWayland.h index fbfea9b..eecc1eb 100644 --- a/lib/CWayland/CWayland.h +++ b/lib/CWayland/CWayland.h @@ -60,14 +60,14 @@ lean_obj_res waylean_argument_buffer_write_array (b_lean_obj_arg writer, b_lean_obj_arg value); lean_obj_res waylean_argument_buffer_write_fd (b_lean_obj_arg writer, int32_t value); -lean_obj_res waylean_argument_buffer_read_int (b_lean_obj_arg reader); -lean_obj_res waylean_argument_buffer_read_uint (b_lean_obj_arg reader); -lean_obj_res waylean_argument_buffer_read_fixed (b_lean_obj_arg reader); -lean_obj_res waylean_argument_buffer_read_string(b_lean_obj_arg reader); -lean_obj_res waylean_argument_buffer_read_object(b_lean_obj_arg reader); -lean_obj_res waylean_argument_buffer_read_new_id(b_lean_obj_arg reader); -lean_obj_res waylean_argument_buffer_read_array (b_lean_obj_arg reader); -lean_obj_res waylean_argument_buffer_read_fd (b_lean_obj_arg reader); +lean_obj_res waylean_argument_buffer_read_int (b_lean_obj_arg reader); +lean_obj_res waylean_argument_buffer_read_uint (b_lean_obj_arg reader); +lean_obj_res waylean_argument_buffer_read_fixed (b_lean_obj_arg reader); +lean_obj_res waylean_argument_buffer_read_string (b_lean_obj_arg reader); +lean_obj_res waylean_argument_buffer_read_object (b_lean_obj_arg reader); +lean_obj_res waylean_argument_buffer_read_new_id (b_lean_obj_arg reader); +lean_obj_res waylean_argument_buffer_read_array (b_lean_obj_arg reader); +lean_obj_res waylean_argument_buffer_read_fd (b_lean_obj_arg reader); // -- Proxy |
