Based on Corbin's tip, I overrode -hitTest: on NSToolbarView to call NSView's implementation instead and suddenly everything works. I expected something to break in NSToolbarView from doing this, but I've tested pretty thoroughly and there seem to be no issues. I don't know exactly how dangerous this is because I don't know what NSToolbarView's implementation of hitTest: is, but so far no issues.
@interface NSToolbarView : NSView @end @interface NSToolbarView (RightMouse) @end @implementation NSToolbarView (RightMouse) - (void)hitTest:(NSPoint)aPoint { [super hitTest:aPoint]; } @end That said, would my application get rejected from the Mac App Store for overriding *public* methods of a *private* class via a category? I could achieve the same result by checking the class and swizzling NSView's implementation of -hitTest:, but if I could get away with this it would be a lot easier (and cleaner). On 2011-08-25, at 4:52 PM, Raleigh Ledet wrote: > A contextual menu in a toolbar? Lets think about this for a moment. > > A) such a command would be hard to discover. Your customers have other ways > to activate the same commands right? If not, why not use a popup button here? > B) I assume that's because you have an action tied to single click…. why not > look for a click and hold, then pop-up a menu a' la Safari's back/forward > tool bar buttons. Oh! and users have an alternate way to get to these actions > / settings right? > > -raleigh > > On Aug 25, 2011, at 3:39 PM, Indragie Karunaratne wrote: > >> I just need to present a contextual menu from my custom view toolbar item, >> but NSToolbarView is not passing the right mouse events down, so >> -menuForEvent: is never called. >> >> On 2011-08-25, at 4:27 PM, Corbin Dunn wrote: >> >>> ToolbarView overrides hitTest; to do some magic; that is probably the >>> source of your problem. >>> >>> What are you trying to do? >>> >>> corbin >>> >>> On Aug 25, 2011, at 3:14 PM, Indragie Karunaratne wrote: >>> >>>> Just realized something interesting, and remembered a key detail that I >>>> forgot to mention. The view in question is a custom view inside the >>>> toolbar of the window. The NSToolbar by default has a contextual menu that >>>> appears when the customizable property is set to YES. However, even though >>>> there is no menu when customizable is set to NO, I suspected that it was >>>> still trapping right mouse events. So I used a category on the private >>>> NSToolbarView class that manages the UI for NSToolbar to check whether it >>>> was receiving the events: >>>> >>>> @interface NSToolbarView : NSView >>>> @end >>>> >>>> @interface NSToolbarView (RightMouse) >>>> @end >>>> >>>> @implementation NSToolbarView (RightMouse) >>>> >>>> - (void)rightMouseDown:(NSEvent*)theEvent >>>> { >>>> NSLog(@"right mouse"); >>>> } >>>> >>>> @end >>>> >>>> And as expected, the method is called. This leaves me wondering how the >>>> toolbar view can receive the events when my own view inside the toolbar >>>> can not (as the event would have to be forwarded up the responder chain to >>>> the toolbar in order for it to receive it). >>>> >>>> On 2011-08-25, at 1:58 PM, Ken Thomases wrote: >>>> >>>>> On Thu, Aug 25, 2011 at 11:45 AM, Indragie Karunaratne >>>>> <cocoa...@indragie.com> wrote: >>>>> >>>>>> I have an NSView subclass that I'm trying to capture right clicks in. I >>>>>> override the rightMouseDown: method but it is never called. >>>>> >>>>> Any chance you simply have a typo or misspelling in your method signature? >>>>> >>>>> -Ken >>>>> >>>> >>>> _______________________________________________ >>>> >>>> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) >>>> >>>> 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: >>>> http://lists.apple.com/mailman/options/cocoa-dev/corbind%40apple.com >>>> >>>> This email sent to corb...@apple.com >>> >> >> _______________________________________________ >> >> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) >> >> 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: >> http://lists.apple.com/mailman/options/cocoa-dev/ledet%40apple.com >> >> This email sent to le...@apple.com > _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) 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: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com