Skip navigation.
 
mlRe: Custom-view cursor changing
FROM : John Stiles
DATE : Tue Nov 27 23:05:13 2007

Heh, of course, after posting I found a workaround. In -mouseDown: you
can do:
    [[self window] disableCursorRects];

And in -mouseUp:
    [[self window] enableCursorRects];
    [[self window] resetCursorRects];

And this resolves the issue.

There are two things I'm still not sure of:
- Is -resetCursorRects necessary here? Or is the re-enable enough to
take care of everything?
- Is this actually a good solution? It seems to work fine but I am not
really sure if it's the best approach.


John Stiles wrote:
> I have a custom NSView subclass which overrides -mouseDown:,
> -mouseDragged: and -mouseUp:. In response to dragging, the control can
> resize itself and some ancillary views in the window (within a limited
> range, of course). Conceptually it's a lot like a split view.
>
> I am trying to change the cursor when the drag starts by calling
> [myCursor push] inside -mouseDown:, and restoring it via [NSCursor
> pop] inside -mouseUp:. I'm finding that if I just click and release,
> this works great.
>
> However, dragging does not work as expected. When -mouseDragged: is
> called and I change various views' bounds (via setFrame), suddenly the
> cursor pops back to being an arrow cursor.
>
> This appears to be happening because some view I'm using is posting a
> notification saying that it needs to reset its cursor rects. When I
> set a breakpoint on -[NSCursor set], I get this:
>
> #0    0x911034d6 in -[NSCursor set]
> #1    0x913dbafd in -[NSWindow resetCursorRects]
> #2    0x91108315 in _handleInvalidCursorRectsNote
> #3    0x90f039e2 in __CFRunLoopDoObservers
> #4    0x90f04d45 in CFRunLoopRunSpecific
> #5    0x90f05d38 in CFRunLoopRunInMode
> #6    0x92cf28a4 in RunCurrentEventLoopInMode
> #7    0x92cf25f6 in ReceiveNextEventCommon
> #8    0x92cf2531 in BlockUntilNextEventMatchingListInMode
> #9    0x9107cd5b in _DPSNextEvent
> #10    0x9107c6a0 in -[NSApplication
> nextEventMatchingMask:untilDate:inMode:dequeue:]
> #11    0x910756d1 in -[NSApplication run]
>
> I don't know exactly how to solve this, though. I'm definitely not
> posting anything like this, and the other views involved are all
> standard OS X NSViews (e.g. in this case there are NSOutlineViews,
> NSButtons and NSTextViews… not exactly rocket science).
>
> Has anyone seen this before and maybe found a workaround? Maybe I need
> to do something to enable "live-resize mode" in my mouseDown/mouseUp
> methods?
>
> I notice that I'm not alone—Xcode has the same problem when dragging
> its splitter in the main project window.
> _______________________________________________
>
> Cocoa-dev mailing list (<email_removed>)
>
> 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/<email_removed>
>
> This email sent to <email_removed>

Related mailsAuthorDate
mlCustom-view cursor changing John Stiles Nov 27, 22:46
mlRe: Custom-view cursor changing John Stiles Nov 27, 23:05
mlRe: Custom-view cursor changing Uli Kusterer Nov 28, 13:03
mlRe: Custom-view cursor changing John Stiles Nov 28, 18:16
mlRe: Custom-view cursor changing Alastair Houghton Nov 28, 18:31