2006-09-10 21:53:38 +00:00
|
|
|
//
|
|
|
|
// HotKeyControl.m
|
|
|
|
// General
|
|
|
|
//
|
|
|
|
// Created by Zaphod Beeblebrox on 9/4/06.
|
|
|
|
// Copyright 2006 __MyCompanyName__. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
#import "HotKeyControl.h"
|
|
|
|
|
|
|
|
typedef int CGSConnection;
|
|
|
|
typedef enum {
|
|
|
|
CGSGlobalHotKeyEnable = 0,
|
|
|
|
CGSGlobalHotKeyDisable = 1,
|
|
|
|
} CGSGlobalHotKeyOperatingMode;
|
|
|
|
|
|
|
|
extern CGSConnection _CGSDefaultConnection(void);
|
|
|
|
|
|
|
|
extern CGError CGSGetGlobalHotKeyOperatingMode(
|
|
|
|
CGSConnection connection, CGSGlobalHotKeyOperatingMode *mode);
|
|
|
|
|
|
|
|
extern CGError CGSSetGlobalHotKeyOperatingMode(CGSConnection connection,
|
|
|
|
CGSGlobalHotKeyOperatingMode mode);
|
|
|
|
|
|
|
|
@implementation HotKeyControl
|
|
|
|
|
|
|
|
- (void)awakeFromNib
|
|
|
|
{
|
|
|
|
observing = NO;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)disableAllHotKeys
|
|
|
|
{
|
|
|
|
CGSConnection conn = _CGSDefaultConnection();
|
|
|
|
CGSSetGlobalHotKeyOperatingMode(conn, CGSGlobalHotKeyDisable);
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)enableAllHotKeys
|
|
|
|
{
|
|
|
|
CGSConnection conn = _CGSDefaultConnection();
|
|
|
|
CGSSetGlobalHotKeyOperatingMode(conn, CGSGlobalHotKeyEnable);
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)startObserving
|
|
|
|
{
|
|
|
|
[self disableAllHotKeys];
|
|
|
|
|
|
|
|
observing = YES;
|
2007-07-08 22:51:49 +00:00
|
|
|
[self setStringValue:NSLocalizedStringFromTableInBundle(@"Press Key...", nil, [NSBundle bundleForClass:[self class]], @"")];
|
2006-09-10 21:53:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
- (void)stopObserving
|
|
|
|
{
|
|
|
|
[self enableAllHotKeys];
|
|
|
|
observing = NO;
|
|
|
|
|
|
|
|
[self updateStringValue];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (BOOL)becomeFirstResponder
|
|
|
|
{
|
|
|
|
[self startObserving];
|
|
|
|
|
|
|
|
return YES;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (BOOL)resignFirstResponder
|
|
|
|
{
|
|
|
|
[self stopObserving];
|
|
|
|
|
|
|
|
return YES;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (BOOL)performKeyEquivalent:(NSEvent*)anEvent
|
|
|
|
{
|
|
|
|
if (observing == YES)
|
|
|
|
{
|
|
|
|
return [super performKeyEquivalent:anEvent];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return NO;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)keyDown:(NSEvent *)theEvent
|
|
|
|
{
|
|
|
|
if (observing == YES)
|
|
|
|
{
|
|
|
|
[super keyDown:theEvent];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)mouseDown:(NSEvent *)theEvent
|
|
|
|
{
|
|
|
|
[self startObserving];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)setKeyCode: (unsigned short)k
|
|
|
|
{
|
|
|
|
keyCode = k;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)setCharacter: (unichar)c
|
|
|
|
{
|
|
|
|
character = c;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)setModifierFlags: (unsigned long)m
|
|
|
|
{
|
|
|
|
modifierFlags = m;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)updateStringValue
|
|
|
|
{
|
|
|
|
[self setStringValue:stringForKeyCodeAndModifierFlags( keyCode, character, modifierFlags )];
|
|
|
|
}
|
|
|
|
@end
|