At 12:03 -0700 02/10/08, [EMAIL PROTECTED] wrote:
>From: "Daniel Weber" <[EMAIL PROTECTED]>
>Date: Thu, 2 Oct 2008 11:15:40 -0700
>Message-ID: <[EMAIL PROTECTED]>
>
>I have a single nsview that draws the main content area for my application
>and a bottom statusbar. This was done instead of using two different views
>so the user can move objects from the statusbar to the main content area,
>all with core animation effects. The view is not opaque. The problem I'm
>having, though, is that I want the user to be able to drag the window when
>the mouse is down on the statusbar, but not the main content area. In other
>words, if the mousedown is within the statusbar's rectangle I want to return
>YES for mouseDownCanMoveWindow. But if the mousedown is within the main
>content area rectangle, I want to return NO. I have already tried setting a
>flag in the mouseDown method and then returning that
>in mouseDownCanMoveWindow. But it doesn't work. I guess mouseDown is not
>called before mouseDownCanMoveWindow. Anyway, does anyone have any other
>suggestions for this?

I had that very same problem in RBSplitView. The only solution I found is to 
always return NO in mouseDownCanMoveWindow, then move the window "manually" 
inside mouseDown like this:

- (void)mouseDown:(NSEvent*)theEvent {
        NSWindow* window = [self window];
        NSPoint where = [theEvent locationInWindow];
        if (...test for your rect here...) {
                where =  [window convertBaseToScreen:where];
                NSPoint origin = [window frame].origin;
// Now we loop handling mouse events until we get a mouse up event.
                while ((theEvent = [NSApp 
nextEventMatchingMask:NSLeftMouseDownMask|NSLeftMouseDraggedMask|NSLeftMouseUpMask
 untilDate:[NSDate distantFuture] inMode:NSEventTrackingRunLoopMode 
dequeue:YES])&&([theEvent type]!=NSLeftMouseUp)) {
// Set up a local autorelease pool for the loop to prevent buildup of temporary 
objects.
                        NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] 
init];
                        NSPoint now = [window convertBaseToScreen:[theEvent 
locationInWindow]];
                        origin.x += now.x-where.x;
                        origin.y += now.y-where.y;
// Move the window by the mouse displacement since the last event.
                        [window setFrameOrigin:origin];
                        where = now;
                        [pool release];
                }
        }
}

-- 
Rainer Brockerhoff  <[EMAIL PROTECTED]>
Belo Horizonte, Brazil
"In the affairs of others even fools are wise
 In their own business even sages err."
Weblog: http://www.brockerhoff.net/bb/viewtopic.php
_______________________________________________

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 [EMAIL PROTECTED]

Reply via email to