diff --git a/src/app/osx_app.m b/src/app/osx_app.m index 11d7c24..e89bd70 100644 --- a/src/app/osx_app.m +++ b/src/app/osx_app.m @@ -1750,23 +1750,51 @@ void oc_osx_update_layers(oc_window_data* window) void oc_osx_surface_bring_to_front(oc_surface_data* surface) { - oc_window_data* window = oc_window_ptr_from_handle(surface->layer.window); - if(window) + dispatch_block_t block = ^{ + @autoreleasepool + { + oc_window_data* window = oc_window_ptr_from_handle(surface->layer.window); + if(window) + { + oc_list_remove(&window->osx.layers, &surface->layer.listElt); + oc_list_push_back(&window->osx.layers, &surface->layer.listElt); + oc_osx_update_layers(window); + } + } + }; + + if([NSThread isMainThread]) { - oc_list_remove(&window->osx.layers, &surface->layer.listElt); - oc_list_push_back(&window->osx.layers, &surface->layer.listElt); - oc_osx_update_layers(window); + block(); + } + else + { + dispatch_sync(dispatch_get_main_queue(), block); } } void oc_osx_surface_send_to_back(oc_surface_data* surface) { - oc_window_data* window = oc_window_ptr_from_handle(surface->layer.window); - if(window) + dispatch_block_t block = ^{ + @autoreleasepool + { + oc_window_data* window = oc_window_ptr_from_handle(surface->layer.window); + if(window) + { + oc_list_remove(&window->osx.layers, &surface->layer.listElt); + oc_list_push(&window->osx.layers, &surface->layer.listElt); + oc_osx_update_layers(window); + } + } + }; + + if([NSThread isMainThread]) { - oc_list_remove(&window->osx.layers, &surface->layer.listElt); - oc_list_push(&window->osx.layers, &surface->layer.listElt); - oc_osx_update_layers(window); + block(); + } + else + { + dispatch_sync(dispatch_get_main_queue(), block); } } diff --git a/src/runtime.c b/src/runtime.c index 47e6b2b..2f3d3c8 100644 --- a/src/runtime.c +++ b/src/runtime.c @@ -675,6 +675,8 @@ i32 orca_runloop(void* user) if(app->debugOverlay.show) { + oc_surface_bring_to_front(app->debugOverlay.surface); + oc_ui_style debugUIDefaultStyle = { .bgColor = { 0 }, .color = { 1, 1, 1, 1 }, .font = app->debugOverlay.fontReg, diff --git a/src/wasmbind/surface_api.json b/src/wasmbind/surface_api.json index 3166c0d..714c63e 100644 --- a/src/wasmbind/surface_api.json +++ b/src/wasmbind/surface_api.json @@ -36,6 +36,30 @@ {"name": "pixels", "type": {"name": "u8*", "tag": "p"}}] }, +{ + "name": "oc_surface_contents_scaling", + "cname": "oc_surface_contents_scaling", + "ret": {"name": "oc_vec2", "tag": "S"}, + "args": [ + {"name": "surface", + "type": {"name": "oc_surface", "tag": "S"}}] +}, +{ + "name": "oc_surface_bring_to_front", + "cname": "oc_surface_bring_to_front", + "ret": {"name": "void", "tag": "v"}, + "args": [ + {"name": "surface", + "type": {"name": "oc_surface", "tag": "S"}}] +}, +{ + "name": "oc_surface_send_to_back", + "cname": "oc_surface_send_to_back", + "ret": {"name": "void", "tag": "v"}, + "args": [ + {"name": "surface", + "type": {"name": "oc_surface", "tag": "S"}}] +}, { "name": "oc_surface_select", "cname": "oc_surface_select", @@ -52,14 +76,6 @@ {"name": "surface", "type": {"name": "oc_surface", "tag": "S"}}] }, -{ - "name": "oc_surface_contents_scaling", - "cname": "oc_surface_contents_scaling", - "ret": {"name": "oc_vec2", "tag": "S"}, - "args": [ - {"name": "surface", - "type": {"name": "oc_surface", "tag": "S"}}] -}, { "name": "oc_surface_render_commands", "cname": "orca_surface_render_commands",