• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Dismissing menu from menu item that uses custom view
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Dismissing menu from menu item that uses custom view


  • Subject: Re: Dismissing menu from menu item that uses custom view
  • From: Steve Mills <email@hidden>
  • Date: Thu, 30 May 2013 08:49:24 -0500

I previously assumed I could simply draw my view a couple times with a delay between, to simulate the quick flash that a menu item does when you choose it. Of course, so many things have to be difficult in the world of Cocoa. I assume drawing can't get flushed to the screen until control is returned to the tracking event loop? What I came up with works, but seems ridiculously inelegant. Is there some better way to give the current event loop time so I can have the drawing and canceling done right in my mouseUp handler?

-(void) mouseUp:(NSEvent*)event
{
	UNUSED_VAR(event);

	NSMenuItem*		item = [self enclosingMenuItem];
	NSMenu*			menu = [item menu];

	// Flash the menu item off and back on just like real ones:
	[self performSelector:@selector(flashOff:) withObject:menu afterDelay:0.05 inModes:[NSArray arrayWithObject:NSEventTrackingRunLoopMode]];
}


-(void) flashOff:(NSMenu*)menu
{
	isHilited = NO;
	[self display];
	[self performSelector:@selector(flashOn:) withObject:menu afterDelay:0.05 inModes:[NSArray arrayWithObject:NSEventTrackingRunLoopMode]];
}


-(void) flashOn:(NSMenu*)menu
{
	isHilited = YES;
	[self display];
	[self performSelector:@selector(cancelMenu:) withObject:menu afterDelay:0.05 inModes:[NSArray arrayWithObject:NSEventTrackingRunLoopMode]];
}


-(void) cancelMenu:(NSMenu*)menu
{
	[menu cancelTracking];
	[self performSelector:@selector(delayedSendAction:) withObject:nil afterDelay:0 inModes:[NSArray arrayWithObjects:NSEventTrackingRunLoopMode, NSDefaultRunLoopMode, nil]];
}


-(void) delayedSendAction:(id)obj
{
	UNUSED_VAR(obj);

	// Then send the action to the target:
	NSMenuItem*		item = [self enclosingMenuItem];
	SEL				act = [item action];
	id				targ = [item target];

	if(act != nil && targ != nil)
		[NSApp sendAction:act to:targ from:item];
}

--
Steve Mills
office: 952-818-3871
home: 952-401-6255
cell: 612-803-6157



_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please 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

  • Follow-Ups:
    • Re: Dismissing menu from menu item that uses custom view
      • From: Kyle Sluder <email@hidden>
    • Re: Dismissing menu from menu item that uses custom view
      • From: Shane Stanley <email@hidden>
References: 
 >Dismissing menu from menu item that uses custom view (From: Steve Mills <email@hidden>)
 >Re: Dismissing menu from menu item that uses custom view (From: Lee Ann Rucker <email@hidden>)
 >Re: Dismissing menu from menu item that uses custom view (From: Steve Mills <email@hidden>)
 >Re: Dismissing menu from menu item that uses custom view (From: Lee Ann Rucker <email@hidden>)
 >Re: Dismissing menu from menu item that uses custom view (From: Steve Mills <email@hidden>)

  • Prev by Date: Re: NSMapTable with C strings as keys
  • Next by Date: Re: NSMapTable with C strings as keys
  • Previous by thread: Re: Dismissing menu from menu item that uses custom view
  • Next by thread: Re: Dismissing menu from menu item that uses custom view
  • Index(es):
    • Date
    • Thread