ionah
(Jonas Whale)
October 26, 2020, 10:04am
#1
I would like to unhide some control views in a utility panel when the command key is pressed (without any character key associated with the command key).
I thought the flagsChanged
method was a good candidate for this but I don’t know how to make it work.
A clue?
You’ll probably need to override the -keyDown:
method and check what key’s pressed. Probably on the window.
ionah
(Jonas Whale)
October 26, 2020, 10:58am
#3
Hi Shane,
keyDown
seems to triggers only if a character key is associated (e.g. command+C).
I’ve sub-classed NSPanel.
In the .m file I added:
- (void)flagsChanged:(NSEvent *)theEvent
{
flags = (theEvent.modifierFlags & NSEventModifierFlagCommand) != 0;
NSLog(@"Flag changed %d", flags);
[super flagsChanged:theEvent]; -- not sure this is necessary
}
I can see in the Debug Area of Xcode that the code is working:
My problem is that I don’t know how to get those results in the AppDelegate script.
You just have that method call one in your app delegate:
[[NSApp delegate] commandPressed]
1 Like
ionah
(Jonas Whale)
October 26, 2020, 11:43am
#5
Sorry Shane, I don’t get it.
Where I’m supposed to put this line of code?
I presume it’s not in the AppDelegate.applescript…
Is it in the .h
or .m
file?
I’m totally lost!
In your subclassed panel:
- (void)flagsChanged:(NSEvent *)theEvent
{
flags = (theEvent.modifierFlags & NSEventModifierFlagCommand) != 0;
if (flags) {
[[NSApp delegate] commandPressed];
}
[super flagsChanged:theEvent]; -- this is necessary
}
In your app delegate;
on commandPressed()
-- whatever
Add an informal protocol that defines the method. It should go just above the @implementation
part:
@interface NSObject (ASCompatability)
- (void)commandPressed;
@end
ionah
(Jonas Whale)
October 27, 2020, 9:43am
#9
Not working.
I’ve made a new (testing) app and reconfigured everything, just in case…
The selector remains unknown.
Do we have to declare it in the header file?
It looks like you’ll have to convince the compiler that your app delegate is an NSObject:
- (void)flagsChanged:(NSEvent *)theEvent
{
if (theEvent.modifierFlags & NSEventModifierFlagCommand) {
[(NSObject *)[NSApp delegate] commandPressed];
}
[super flagsChanged:theEvent];
}
ionah
(Jonas Whale)
October 27, 2020, 11:20am
#11
Yeeeesss! This is it!
After hours and hours passed on this, I can’t say how much I’m grateful to you!
2 Likes