Re: Catching NSSlider -mouseUp: events (workaround)
Re: Catching NSSlider -mouseUp: events (workaround)
- Subject: Re: Catching NSSlider -mouseUp: events (workaround)
- From: Roland Torres <email@hidden>
- Date: Thu, 12 Apr 2007 14:51:08 -0700
On Apr 12, 2007, at 7:10 AM, Ron Fleckner wrote:
Roland Torres wrote:
Searching the archives, I couldn't find a solution to this problem:
Some controls (like NSSlider) have their own event loop established
in -mouseDown:, with the net effect that the -mouseUp: event is
caught and processed behind the scenes. The downside to this is that
if you override -mouseUp: with your own method, it won't get invoked.
Bummer if you want to key off of the mouseUp event to do something or
stop something in progress.
So, for the archives, here's the workaround I came up with for my
NSSlider subclass:
- (void)mouseDown:(NSEvent *)event
{
[super mouseDown:event]; // eats the mouse-up event
NSEvent upEvent=[NSEvent mouseEventWithType:NSLeftMouseUp ...
[NSApp sendEvent:upEvent]; // dispatch mouse-up event
}
- (void)mouseUp:(NSEvent *)event
{
[super mouseUp:event];
// your code goes here ...
}
Roland
Roland,
even easier:
// in subclassed NSSlider
- (void)mouseDown:(NSEvent *)event
{
// do your stuff here, then...
[super mouseDown:event];
}
works for me.
Ron,
I don't see how this way can act on mouse-up, with your code placed
_before_ the call to super. Don't you need to have the slider track
the mouse movement, and then when the mouse button is let up, do post
processing? If I place my code before the [super mouseDown:event],
the slider does not move under the cursor, and my action occurs
before the slider's value changes, which is definitely odd behavior,
and not the same as capturing mouse-up.
Roland
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden