Rework playback shortcuts again.

This commit is contained in:
Dzmitry Neviadomski 2021-02-19 08:23:13 +03:00
parent 97cc1e9845
commit 85e27e7496
2 changed files with 54 additions and 50 deletions

View file

@ -8,6 +8,8 @@
#import "PlaylistView.h" #import "PlaylistView.h"
#import <Carbon/Carbon.h>
#import "BlankZeroFormatter.h" #import "BlankZeroFormatter.h"
#import "IndexFormatter.h" #import "IndexFormatter.h"
#import "PlaylistEntry.h" #import "PlaylistEntry.h"
@ -154,37 +156,44 @@
return tableViewMenu; return tableViewMenu;
} }
- (void)keyDown:(NSEvent *)e { - (void)keyDown:(NSEvent *)event {
unsigned int modifiers = BOOL modifiersUsed =([event modifierFlags] & (NSEventModifierFlagShift |
[e modifierFlags] & (NSEventModifierFlagCommand | NSEventModifierFlagShift | NSEventModifierFlagControl |
NSEventModifierFlagControl | NSEventModifierFlagOption); NSEventModifierFlagOption |
NSString *characters = [e characters]; NSEventModifierFlagCommand)) ? YES : NO;
unichar c; if (modifiersUsed) {
[super keyDown:event];
if ([characters length] != 1) {
[super keyDown:e];
return; return;
} }
c = [characters characterAtIndex:0]; switch ([event keyCode]) {
if (modifiers == 0 && case kVK_Space:
(c == NSDeleteCharacter || c == NSBackspaceCharacter || c == NSDeleteFunctionKey)) { [playbackController playPauseResume:self];
[playlistController remove:self]; break;
} else if (modifiers == 0 && c == ' ') { case kVK_Escape:
[playbackController playPauseResume:self]; [playlistController clearFilterPredicate:self];
} else if (modifiers == 0 && (c == NSEnterCharacter || c == NSCarriageReturnCharacter)) { break;
[playbackController play:self];
} else if (modifiers == 0 && c == NSLeftArrowFunctionKey) { case kVK_Delete:
[playbackController eventSeekBackward:self]; case kVK_ForwardDelete:
} else if (modifiers == 0 && c == NSRightArrowFunctionKey) { [playlistController remove:self];
[playbackController eventSeekForward:self]; break;
}
// Escape case kVK_LeftArrow:
else if (modifiers == 0 && c == 0x1b) { [playbackController eventSeekBackward:self];
[playlistController clearFilterPredicate:self]; break;
} else {
[super keyDown:e]; case kVK_RightArrow:
[playbackController eventSeekForward:self];
break;
case kVK_Return:
[playbackController play:self];
break;
default:
[super keyDown:event];
break;
} }
} }

View file

@ -8,6 +8,8 @@
#import "MiniWindow.h" #import "MiniWindow.h"
#import <Carbon/Carbon.h>
@implementation MiniWindow @implementation MiniWindow
- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSWindowStyleMask)windowStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation - (id)initWithContentRect:(NSRect)contentRect styleMask:(NSWindowStyleMask)windowStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation
@ -32,50 +34,43 @@
// Do nothing! // Do nothing!
} }
- (void)keyDown:(NSEvent *)e { - (void)keyDown:(NSEvent *)event {
BOOL modifiersUsed = BOOL modifiersUsed =([event modifierFlags] & (NSEventModifierFlagShift |
([e modifierFlags] & (NSEventModifierFlagShift | NSEventModifierFlagControl |
NSEventModifierFlagControl | NSEventModifierFlagOption |
NSEventModifierFlagOption | NSEventModifierFlagCommand)) ? YES : NO;
NSEventModifierFlagCommand)) ? YES : NO; if (modifiersUsed) {
NSString *characters = [e charactersIgnoringModifiers]; [super keyDown:event];
if (modifiersUsed || [characters length] != 1)
{
[super keyDown:e];
return; return;
} }
unichar c = [characters characterAtIndex:0]; switch ([event keyCode]) {
switch (c) { case kVK_Space:
case 0x20: // Spacebar
[playbackController playPauseResume:self]; [playbackController playPauseResume:self];
break; break;
case NSEnterCharacter: case kVK_Return:
case NSCarriageReturnCharacter:
[playbackController play:self]; [playbackController play:self];
break; break;
case NSLeftArrowFunctionKey: case kVK_LeftArrow:
[playbackController eventSeekBackward:self]; [playbackController eventSeekBackward:self];
break; break;
case NSRightArrowFunctionKey: case kVK_RightArrow:
[playbackController eventSeekForward:self]; [playbackController eventSeekForward:self];
break; break;
case NSUpArrowFunctionKey: case kVK_UpArrow:
[playbackController volumeUp:self]; [playbackController volumeUp:self];
break; break;
case NSDownArrowFunctionKey: case kVK_DownArrow:
[playbackController volumeDown:self]; [playbackController volumeDown:self];
break; break;
default: default:
[super keyDown:e]; [super keyDown:event];
break; break;
} }
} }