summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2015-02-19 03:19:33 +1100
committer Vas Crabb <vas@vastheman.com>2015-02-19 03:19:33 +1100
commit099df52e3876e5183391f6f5047f6f15cc37b5fa (patch)
treec63ede261a10d6073b9c9c6dc5c3ac6b1c538c05
parent9770a7aa9c514b96a90c3bb8449dee4712e1e838 (diff)
Allow paste from OS clipboard to debugger windows (use context menu)
-rw-r--r--src/osd/modules/debugger/osx/debugview.h1
-rw-r--r--src/osd/modules/debugger/osx/debugview.m37
-rw-r--r--src/osd/modules/debugger/osx/disassemblyview.m2
-rw-r--r--src/osd/modules/debugger/osx/memoryview.m17
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<debug_view_memory *>(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];
}