• 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: NSPopUpButtonCell causes UI to "sleep" when clicked
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: NSPopUpButtonCell causes UI to "sleep" when clicked


  • Subject: Re: NSPopUpButtonCell causes UI to "sleep" when clicked
  • From: Peter Ammon <email@hidden>
  • Date: Fri, 24 Apr 2009 15:02:45 -0700

Hi Jerry,

On Apr 24, 2009, at 5:41 AM, Jerry Krinock wrote:

I'm creating an NSPopUpButtonCell programatically.

To show the menu I invoke -[NSPopUpButtonCell performClickWithFrame:inView:]. It works -- however after the menu has popped up, been clicked and dismissed,

 - Timers in the main thread stop firing
 - Keyboard equivalents fail silently

Operation does not return to normal until the user clicks another control TWICE. It seems to me that the UI is "sleeping" and that the first click is necessary to "wake" it.

Is there a name for this state when the UI is "sleeping"? Maybe if I knew that I could research how to fix it. Of course, a fix would be appreciated too :)

This has to do with run loop modes. Check out the documentation on run loops, their various modes, and what they're used for at http://developer.apple.com/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html


While menus are open, the run loop runs in NSEventTrackingRunLoopMode. This is normally desirable - you don't want, say, an important dialog to pop up right before you choose Close Window. This run loop mode is also used, for example, when dragging a slider or when you click (but don't release) on a button.

When you explicitly add a timer or source to a run loop, you have the opportunity to specify a mode. If you specify NSEventTrackingRunLoopMode, then your timer will be active during menu tracking. You can add it to multiple modes.


I guessed that the popup menu may still be "tracking" the mouse (although I don't really know what that means). However, invoking - cancelTracking does not help.

I would expect cancelTracking to close the menu. Hopefully that's what you saw!



Also, invoking -attachPopUpWithFrame:inView: before performClickWithFrame:: does not help either. (I've never been able to find an explanation of what -attachPopUpWithFrame:inView: is supposed to do. As far as I can see it's a no-op.)

This method is mainly a holdover from NeXT menus, and isn't good for much. If you want to pop up a popup button, you can use either performClick: or trackMouse:inRect:ofView:untilMouseUp:


-Peter

_______________________________________________

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


References: 
 >NSPopUpButtonCell causes UI to "sleep" when clicked (From: Jerry Krinock <email@hidden>)

  • Prev by Date: KVO leaks memory
  • Next by Date: Re: KVO leaks memory
  • Previous by thread: NSPopUpButtonCell causes UI to "sleep" when clicked
  • Next by thread: Re: NSPopUpButtonCell causes UI to "sleep" when clicked
  • Index(es):
    • Date
    • Thread