From 099df52e3876e5183391f6f5047f6f15cc37b5fa Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Thu, 19 Feb 2015 03:19:33 +1100 Subject: Allow paste from OS clipboard to debugger windows (use context menu) --- src/osd/modules/debugger/osx/debugview.h | 1 + src/osd/modules/debugger/osx/debugview.m | 37 ++++++++++++++++++++++++++ src/osd/modules/debugger/osx/disassemblyview.m | 2 +- src/osd/modules/debugger/osx/memoryview.m | 17 ++++++++---- 4 files changed, 51 insertions(+), 6 deletions(-) diff --git a/src/osd/modules/debugger/osx/debugview.h b/src/osd/modules/debugger/osx/debugview.h index 1a58975cc79..6d393072bb4 100644 --- a/src/osd/modules/debugger/osx/debugview.h +++ b/src/osd/modules/debugger/osx/debugview.h @@ -49,6 +49,7 @@ - (debug_view_xy)cursorPosition; - (IBAction)copyVisible:(id)sender; +- (IBAction)paste:(id)sender; - (void)windowDidBecomeKey:(NSNotification *)notification; - (void)windowDidResignKey:(NSNotification *)notification; diff --git a/src/osd/modules/debugger/osx/debugview.m b/src/osd/modules/debugger/osx/debugview.m index 2e90e8b0598..dbe0bc271a8 100644 --- a/src/osd/modules/debugger/osx/debugview.m +++ b/src/osd/modules/debugger/osx/debugview.m @@ -358,6 +358,23 @@ static void debugwin_view_update(debug_view &view, void *osdprivate) } +- (IBAction)paste:(id)sender { + NSPasteboard *const board = [NSPasteboard generalPasteboard]; + NSString *const avail = [board availableTypeFromArray:[NSArray arrayWithObject:NSStringPboardType]]; + if (avail == nil) + { + NSBeep(); + return; + } + + NSData *const data = [[board stringForType:avail] dataUsingEncoding:NSASCIIStringEncoding + allowLossyConversion:YES]; + char const *const bytes = (char const *)[data bytes]; + for (NSUInteger i = 0, l = [data length]; i < l; i++) + view->process_char(bytes[i]); +} + + - (void)windowDidBecomeKey:(NSNotification *)notification { NSWindow *win = [notification object]; if ((win == [self window]) && ([win firstResponder] == self) && view->cursor_supported()) @@ -379,6 +396,11 @@ static void debugwin_view_update(debug_view &view, void *osdprivate) action:@selector(copyVisible:) keyEquivalent:@""]; [item setTarget:self]; + + item = [menu addItemWithTitle:@"Paste" + action:@selector(paste:) + keyEquivalent:@""]; + [item setTarget:self]; } @@ -653,4 +675,19 @@ static void debugwin_view_update(debug_view &view, void *osdprivate) } } + +- (BOOL)validateMenuItem:(NSMenuItem *)item { + SEL action = [item action]; + + if (action == @selector(paste:)) + { + NSPasteboard *const board = [NSPasteboard generalPasteboard]; + return [board availableTypeFromArray:[NSArray arrayWithObject:NSStringPboardType]] != nil; + } + else + { + return YES; + } +} + @end diff --git a/src/osd/modules/debugger/osx/disassemblyview.m b/src/osd/modules/debugger/osx/disassemblyview.m index 317f2e99b77..0be36d9f5f9 100644 --- a/src/osd/modules/debugger/osx/disassemblyview.m +++ b/src/osd/modules/debugger/osx/disassemblyview.m @@ -38,7 +38,7 @@ } else { - return YES; + return [super validateMenuItem:item]; } } diff --git a/src/osd/modules/debugger/osx/memoryview.m b/src/osd/modules/debugger/osx/memoryview.m index 4ac5e28559b..fa52689454d 100644 --- a/src/osd/modules/debugger/osx/memoryview.m +++ b/src/osd/modules/debugger/osx/memoryview.m @@ -34,16 +34,23 @@ NSInteger tag = [item tag]; debug_view_memory *memview = downcast(view); - if (action == @selector(showChunkSize:)) { + if (action == @selector(showChunkSize:)) + { [item setState:((tag == memview->bytes_per_chunk()) ? NSOnState : NSOffState)]; - } else if (action == @selector(showPhysicalAddresses:)) { + } + else if (action == @selector(showPhysicalAddresses:)) + { [item setState:((tag == memview->physical()) ? NSOnState : NSOffState)]; - } else if (action == @selector(showReverseView:)) { + } + else if (action == @selector(showReverseView:)) + { [item setState:((tag == memview->reverse()) ? NSOnState : NSOffState)]; - } else if (action == @selector(showReverseViewToggle:)) { + } + else if (action == @selector(showReverseViewToggle:)) + { [item setState:(memview->reverse() ? NSOnState : NSOffState)]; } - return YES; + return [super validateMenuItem:item]; } -- cgit v1.2.3