• 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: Conditional mouseDownCanMoveWindow for NSView?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Conditional mouseDownCanMoveWindow for NSView?


  • Subject: Re: Conditional mouseDownCanMoveWindow for NSView?
  • From: Rainer Brockerhoff <email@hidden>
  • Date: Thu, 2 Oct 2008 18:56:49 -0300

At 12:03 -0700 02/10/08, email@hidden wrote:
>From: "Daniel Weber" <email@hidden>
>Date: Thu, 2 Oct 2008 11:15:40 -0700
>Message-ID: <email@hidden>
>
>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@hidden>
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 (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

  • Prev by Date: Re: Newb: KATI Sample Code - What's This Called?
  • Next by Date: Re: Direct use of NSScroller?
  • Previous by thread: Re: Conditional mouseDownCanMoveWindow for NSView?
  • Next by thread: Code Data: Re-inserting deleted objects
  • Index(es):
    • Date
    • Thread