Skip to content

Commit

Permalink
Fixing keyboard shortcuts in MessageViewer.
Browse files Browse the repository at this point in the history
Pretty extensive change - I'm using Mail.app APIs for a lot of shortcuts
since many of these may differ on different keyboard layouts.  The
bundle's functionality would also break if you happened to remap Mail
shortcuts with the global keyboard shortcuts preferences.
  • Loading branch information
nompute committed Mar 16, 2014
1 parent 1f04ada commit 6c7ac1f
Showing 1 changed file with 22 additions and 59 deletions.
81 changes: 22 additions & 59 deletions GMailinator/GMailinator.m
Expand Up @@ -46,8 +46,6 @@ + (void)load {

class_addMethod(c, overrideSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
class_replaceMethod(c, originalSelector, method_getImplementation(overrideMethod), method_getTypeEncoding(overrideMethod));

NSLog(@"OLD STLYE");
}

+ (void)registerBundle
Expand All @@ -61,11 +59,11 @@ + (void)registerBundle

- (void)overrideMailKeyDown:(NSEvent*)event {
unichar key = [[event characters] characterAtIndex:0];
id messageViewer = [[self performSelector:@selector(delegate)] performSelector:@selector(delegate)];

switch (key) {
case 'e':
case 'y': {
id messageViewer = [[self performSelector:@selector(delegate)] performSelector:@selector(delegate)];
[messageViewer performSelector:@selector(archiveMessages:) withObject:nil];
break;
}
Expand Down Expand Up @@ -104,36 +102,23 @@ - (void)overrideMailKeyDown:(NSEvent*)event {
break;
}
case '#': {
id messageViewer = [[self performSelector:@selector(delegate)] performSelector:@selector(delegate)];
[messageViewer performSelector:@selector(deleteMessages:) withObject:nil];
break;
}
case 'c': {
CGEventRef cgEvent = CGEventCreateKeyboardEvent(NULL, 45, true);
CGEventSetFlags(cgEvent, kCGEventFlagMaskCommand);
NSEvent *newEvent = [NSEvent eventWithCGEvent: cgEvent];
[self overrideMailKeyDown: newEvent];
[messageViewer performSelector:@selector(showComposeWindow:) withObject:nil];
break;
}
case 'r': {
CGEventRef cgEvent = CGEventCreateKeyboardEvent(NULL, 15, true);
CGEventSetFlags(cgEvent, kCGEventFlagMaskCommand);
NSEvent *newEvent = [NSEvent eventWithCGEvent: cgEvent];
[self overrideMailKeyDown: newEvent];
[messageViewer performSelector:@selector(replyMessage:) withObject:nil];
break;
}
case 'a': {
CGEventRef cgEvent = CGEventCreateKeyboardEvent(NULL, 15, true);
CGEventSetFlags(cgEvent, kCGEventFlagMaskCommand | kCGEventFlagMaskShift);
NSEvent *newEvent = [NSEvent eventWithCGEvent: cgEvent];
[self overrideMailKeyDown: newEvent];
case 'f': {
[messageViewer performSelector:@selector(forwardMessage:) withObject:nil];
break;
}
case 'f': {
CGEventRef cgEvent = CGEventCreateKeyboardEvent(NULL, 3, true);
CGEventSetFlags(cgEvent, kCGEventFlagMaskCommand | kCGEventFlagMaskShift);
NSEvent *newEvent = [NSEvent eventWithCGEvent: cgEvent];
[self overrideMailKeyDown: newEvent];
case 'a': {
[messageViewer performSelector:@selector(replyAllMessage:) withObject:nil];
break;
}
case '/': {
Expand All @@ -156,68 +141,46 @@ - (void)overrideMessagesKeyDown:(NSEvent*)event {
switch (key) {
case 'e':
case 'y': {
id messageViewer = [[self performSelector:@selector(delegate)] performSelector:@selector(delegate)];
[messageViewer performSelector:@selector(archiveMessages:) withObject:nil];
[self performSelector:@selector(archiveMessages:) withObject:nil];
break;
}
// case 'h': {
// NSEvent *newEvent = [NSEvent eventWithCGEvent: CGEventCreateKeyboardEvent(NULL, 115, true)];
// [self overrideMessagesKeyDown: newEvent];
// These don't work so well, but it looks like this is a Mail bug; the
// menu option for Select next/previous message in conversation just jumps
// to the next/previous thread instead. Also, it looks like capturing left/
// right doesn't work for MessageViewer for some reason.
// case 'k': {
// [self performSelector:@selector(selectNextInThread:) withObject:nil];
// break;
// }
// case 'l': {
// NSEvent *newEvent = [NSEvent eventWithCGEvent: CGEventCreateKeyboardEvent(NULL, 119, true)];
// [self overrideMessagesKeyDown: newEvent];
// case 'j': {
// [self performSelector:@selector(selectPreviousInThread:) withObject:nil];
// break;
// }
case 'k': {
NSEvent *newEvent = [NSEvent eventWithCGEvent: CGEventCreateKeyboardEvent(NULL, 123, true)];
[self overrideMessagesKeyDown: newEvent];
break;
}
case 'j': {
NSEvent *newEvent = [NSEvent eventWithCGEvent: CGEventCreateKeyboardEvent(NULL, 124, true)];
[self overrideMessagesKeyDown: newEvent];
break;
}
case '#': {
id messageViewer = [[self performSelector:@selector(delegate)] performSelector:@selector(delegate)];
[messageViewer performSelector:@selector(deleteMessages:) withObject:nil];
[self performSelector:@selector(deleteMessages:) withObject:nil];
break;
}
case 'c': {
CGEventRef cgEvent = CGEventCreateKeyboardEvent(NULL, 45, true);
CGEventSetFlags(cgEvent, kCGEventFlagMaskCommand);
NSEvent *newEvent = [NSEvent eventWithCGEvent: cgEvent];
[self overrideMessagesKeyDown: newEvent];
[self performSelector:@selector(showComposeWindow:) withObject:nil];
break;
}
case 'r': {
CGEventRef cgEvent = CGEventCreateKeyboardEvent(NULL, 15, true);
CGEventSetFlags(cgEvent, kCGEventFlagMaskCommand);
NSEvent *newEvent = [NSEvent eventWithCGEvent: cgEvent];
[self overrideMessagesKeyDown: newEvent];
[self performSelector:@selector(replyMessage:) withObject:nil];
break;
}
case 'f': {
CGEventRef cgEvent = CGEventCreateKeyboardEvent(NULL, 3, true);
CGEventSetFlags(cgEvent, kCGEventFlagMaskCommand | kCGEventFlagMaskShift);
NSEvent *newEvent = [NSEvent eventWithCGEvent: cgEvent];
[self overrideMessagesKeyDown: newEvent];
[self performSelector:@selector(forwardMessage:) withObject:nil];
break;
}
case 'a': {
CGEventRef cgEvent = CGEventCreateKeyboardEvent(NULL, 15, true);
CGEventSetFlags(cgEvent, kCGEventFlagMaskCommand | kCGEventFlagMaskShift);
NSEvent *newEvent = [NSEvent eventWithCGEvent: cgEvent];
[self overrideMessagesKeyDown: newEvent];
[self performSelector:@selector(replyAllMessage:) withObject:nil];
break;
}
case '/': {
CGEventRef cgEvent = CGEventCreateKeyboardEvent(NULL, 3, true);
CGEventSetFlags(cgEvent, kCGEventFlagMaskCommand | kCGEventFlagMaskAlternate);
NSEvent *newEvent = [NSEvent eventWithCGEvent: cgEvent];
[self overrideMailKeyDown: newEvent];
[self overrideMessagesKeyDown: newEvent];
break;
}
default:
Expand Down

0 comments on commit 6c7ac1f

Please sign in to comment.