mirror of
https://github.com/TomHarte/CLK.git
synced 2025-01-12 00:30:31 +00:00
Establishes an interface for requesting shortcut theft. Not yet implemented.
This commit is contained in:
parent
f28c124039
commit
8f88addf9f
@ -110,8 +110,22 @@ typedef NS_ENUM(NSInteger, CSOpenGLViewRedrawEvent) {
|
|||||||
@property (atomic, weak, nullable) id <CSOpenGLViewDelegate> delegate;
|
@property (atomic, weak, nullable) id <CSOpenGLViewDelegate> delegate;
|
||||||
@property (nonatomic, weak, nullable) id <CSOpenGLViewResponderDelegate> responderDelegate;
|
@property (nonatomic, weak, nullable) id <CSOpenGLViewResponderDelegate> responderDelegate;
|
||||||
|
|
||||||
|
/// Determines whether the view offers mouse capturing — i.e. if the user clicks on the view then
|
||||||
|
/// then the system cursor is disabled and the mouse events defined by CSOpenGLViewResponderDelegate
|
||||||
|
/// are forwarded, unless and until the user releases the mouse using the control+command shortcut.
|
||||||
@property (nonatomic, assign) BOOL shouldCaptureMouse;
|
@property (nonatomic, assign) BOOL shouldCaptureMouse;
|
||||||
|
|
||||||
|
/// Determines whether the CSOpenGLViewResponderDelegate of this window expects to use the command
|
||||||
|
/// key as though it were any other key — i.e. all command combinations should be forwarded to the delegate,
|
||||||
|
/// not being allowed to trigger regular application shortcuts such as command+q or command+h.
|
||||||
|
///
|
||||||
|
/// How the view respects this will depend on other state; if this view is one that captures the mouse then it
|
||||||
|
/// will usurp command only while the mouse is captured.
|
||||||
|
///
|
||||||
|
/// TODO: what's smart behaviour if this view doesn't capture the mouse? Probably
|
||||||
|
/// force a similar capturing behaviour?
|
||||||
|
@property (nonatomic, assign) BOOL shouldUsurpCommand;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Ends the timer tracking time; should be called prior to giving up the last owning reference
|
Ends the timer tracking time; should be called prior to giving up the last owning reference
|
||||||
to ensure that any retain cycles implied by the timer are resolved.
|
to ensure that any retain cycles implied by the timer are resolved.
|
||||||
|
@ -7,10 +7,11 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import "CSOpenGLView.h"
|
#import "CSOpenGLView.h"
|
||||||
|
#import "CSApplication.h"
|
||||||
@import CoreVideo;
|
@import CoreVideo;
|
||||||
@import GLKit;
|
@import GLKit;
|
||||||
|
|
||||||
@interface CSOpenGLView () <NSDraggingDestination>
|
@interface CSOpenGLView () <NSDraggingDestination, CSApplicationKeyboardEventDelegate>
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation CSOpenGLView {
|
@implementation CSOpenGLView {
|
||||||
@ -139,23 +140,43 @@ static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeSt
|
|||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)propagateKeyboardEvent:(NSEvent *)event {
|
||||||
|
switch(event.type) {
|
||||||
|
default: break;
|
||||||
|
|
||||||
|
case kCGEventKeyDown:
|
||||||
|
[self.responderDelegate keyDown:event];
|
||||||
|
break;
|
||||||
|
case kCGEventKeyUp:
|
||||||
|
[self.responderDelegate keyUp:event];
|
||||||
|
break;
|
||||||
|
case kCGEventFlagsChanged:
|
||||||
|
// Release the mouse upon a control + command.
|
||||||
|
if(_mouseIsCaptured &&
|
||||||
|
event.modifierFlags & NSEventModifierFlagControl &&
|
||||||
|
event.modifierFlags & NSEventModifierFlagCommand) {
|
||||||
|
[self releaseMouse];
|
||||||
|
}
|
||||||
|
|
||||||
|
[self.responderDelegate flagsChanged:event];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
- (void)keyDown:(NSEvent *)theEvent {
|
- (void)keyDown:(NSEvent *)theEvent {
|
||||||
[self.responderDelegate keyDown:theEvent];
|
[self propagateKeyboardEvent:theEvent];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)keyUp:(NSEvent *)theEvent {
|
- (void)keyUp:(NSEvent *)theEvent {
|
||||||
[self.responderDelegate keyUp:theEvent];
|
[self propagateKeyboardEvent:theEvent];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)flagsChanged:(NSEvent *)theEvent {
|
- (void)flagsChanged:(NSEvent *)theEvent {
|
||||||
[self.responderDelegate flagsChanged:theEvent];
|
[self propagateKeyboardEvent:theEvent];
|
||||||
|
}
|
||||||
|
|
||||||
// Release the mouse upon a control + command.
|
- (void)sendEvent:(NSEvent *)event {
|
||||||
if(_mouseIsCaptured &&
|
[self propagateKeyboardEvent:event];
|
||||||
theEvent.modifierFlags & NSEventModifierFlagControl &&
|
|
||||||
theEvent.modifierFlags & NSEventModifierFlagCommand) {
|
|
||||||
[self releaseMouse];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)paste:(id)sender {
|
- (void)paste:(id)sender {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user