• 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
NSCarbonWindow vs NSSavePanel sheets - Incompatibility?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

NSCarbonWindow vs NSSavePanel sheets - Incompatibility?


  • Subject: NSCarbonWindow vs NSSavePanel sheets - Incompatibility?
  • From: Motti Shneor <email@hidden>
  • Date: Mon, 26 Oct 2009 04:32:34 -0400
  • Acceptlanguage: en-US
  • Thread-topic: NSCarbonWindow vs NSSavePanel sheets - Incompatibility?

Hello everyone. I'm just changing the title of a previous thread, as my problems were narrowed down from general NSSavePanel modality, into a (possibly) bug in the OS.

The problems occur whenever I try to display  a NSSavePanel as a sheet over a Carbon window.

- (void) saveCarbonWindow: (WindowRef) carbonWin
{
NSWindow *cocoaWrap = [[NSWindow alloc] initWithWindowRef: carbonWin]];
NSSavePanel *myPanel=[NSSavePanel savePanel];
[myPanel beginSheetForDirectory:nil file:nil ......

}

No matter what NSSavePanel API I use (10.6 with codeblock completion handler, 10.5 with didEnd selector, or even runModal) I get strange behaviors.

1. Sometimes the sheet will be displayed  BEHIND its parent (carbon originated) window. In such cases, the program hangs as the sheet is still key, but I cant dismiss it, because the parent (carbon) window is blocking the events sent to it.

2. Most every time it will be displayed in a WRONG PLACE i.e. the sheet is centered on screen instead of attached to the carbon window). This is especially evident when I try to block after creating the NSSavePanel using [NSApp runModalForWindow:myPanel]; In the docs it says that this will center a window if it is not visible, but my panel IS visible BEFORE i call on runModalForWindow.

3. Sometimes the Save/Cancel (or Open/Cancel in case of NSOpenPanel) will do nothing --- as if someone is eating up the events). In that case the didEnd or Completion handler will never be called.

Many other weirdnesses happen, and in the Debugger console I can many time detect errors concerning the window-ordering of these windows. Things like..
Mon Oct 26 10:31:18 BlancVox.local NavTester[1110] <Error>: kCGErrorIllegalArgument: _CGSFindSharedWindow: WID 187
Mon Oct 26 10:31:18 BlancVox.local NavTester[1110] <Error>: kCGErrorIllegalArgument: CGSOrderFrontConditionally: Invalid window

The whole Carbon/Cocoa window binding is very obscure, and I can not find good guide for matching the two together.

Another important note: I get the same (well... minor modification...) behavior when I use Carbon Navigation Services API's, on Leopard and Snow Leopard. I saw in the docs that as of Leopard Navigation Services are Cocoa-based, so that might explain this behavior.

I saw in the debugger that the actual class of the cocoaWrap is NSCarbonWindow which is not documented at all, and I simply do not know what to do --- Am I missing a critical configuration of the carbon window that I need to do before attaching an NSSavePanel to it?

Maybe there is a real bug in the OS that I'm not aware of?

Please help.

Motti Shneor
------------------------------------------
Senior Software Engineer
Waves Audio ltd.

Phone: +972-3-6094415
Mobile: +972-54-4470730
[mailto: email@hidden]



_______________________________________________

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: How to use Uniform Type Identifiers for this ... ?
  • Next by Date: MIN(), MAX()?
  • Previous by thread: Re: PackageMaker installer not always installing into /Applications
  • Next by thread: MIN(), MAX()?
  • Index(es):
    • Date
    • Thread