Posting to clipboard now works.

This commit is contained in:
Yuval Dolev 2020-01-13 03:20:58 +02:00
parent 7d2a91805b
commit f7b0b05426
2 changed files with 49 additions and 3 deletions

View File

@ -193,6 +193,9 @@ struct Mac_Vars {
u32 clipboard_change_count;
b32 next_clipboard_is_self;
Arena clip_post_arena;
String_Const_u8 clip_post;
NSWindow *window;
FCoder_View *view;
f32 screen_scale_factor;
@ -480,8 +483,8 @@ mac_read_clipboard_contents(Arena *scratch){
{
NSPasteboard *board = [NSPasteboard generalPasteboard];
NSString *utf8_type = @"public.utf8-plain-text";
NSArray *array = [NSArray arrayWithObjects:utf8_type, nil];
NSString *has_string = [board availableTypeFromArray:array];
NSArray *types_array = [NSArray arrayWithObjects:utf8_type, nil];
NSString *has_string = [board availableTypeFromArray:types_array];
if (has_string != nil){
NSData *data = [board dataForType:utf8_type];
if (data != nil){
@ -504,6 +507,25 @@ mac_read_clipboard_contents(Arena *scratch){
return(result);
}
function void
mac_post_clipboard(Arena *scratch, char *text, i32 len){
NSPasteboard *board = [NSPasteboard generalPasteboard];
NSString *utf8_type = @"public.utf8-plain-text";
NSArray<NSString*> *types_array = [NSArray arrayWithObjects:utf8_type, nil];
[board declareTypes:types_array
owner:nil];
NSString *paste_string = [[NSString alloc] initWithBytes:text
length:len
encoding:NSUTF8StringEncoding];
[board setString:paste_string
forType:utf8_type];
[paste_string release];
mac_vars.next_clipboard_is_self = true;
}
#if defined(FRED_INTERNAL)
function inline void
mac_profile(char *name, u64 begin, u64 end){
@ -659,6 +681,8 @@ i = 1, mac_profile(name, begin, system_now_time()))
input.clipboard = mac_vars.clipboard_contents;
}
mac_vars.clip_post.size = 0;
Application_Step_Result result = {};
MacProfileScope("Step"){
// NOTE(yuval): Application Core Update
@ -675,6 +699,14 @@ i = 1, mac_profile(name, begin, system_now_time()))
}
}
// NOTE(yuval): Post new clipboard content
MacProfileScope("Post Clipboard"){
if (mac_vars.clip_post.size > 0){
Scratch_Block scratch(mac_vars.tctx, Scratch_Share);
mac_post_clipboard(scratch, (char*)mac_vars.clip_post.str, (i32)mac_vars.clip_post.size);
}
}
MacProfileScope("Render"){
// NOTE(yuval): Render
renderer->render(renderer, &target);

View File

@ -431,7 +431,21 @@ system_sleep_sig(){
function
system_post_clipboard_sig(){
NotImplemented;
Arena *arena = &mac_vars.clip_post_arena;
if (arena->base_allocator == 0){
*arena = make_arena_system();
} else{
linalloc_clear(arena);
}
mac_vars.clip_post.str = push_array(arena, u8, str.size + 1);
if (mac_vars.clip_post.str != 0){
block_copy(mac_vars.clip_post.str, str.str, str.size);
mac_vars.clip_post.str[str.size] = 0;
mac_vars.clip_post.size = str.size;
} else{
// NOTE(yuval): Failed to allocate buffer for clipboard post
}
}
////////////////////////////////