I've done some investigating and still getting the behavior that the window does not display from the code below
Interestingly, if you look at the two ShowWindow/SelectWindow pairs. I will see the window when the first one is uncommented only. I will not see the window when the second set is uncommented only. ODD. Don't know if this provides any insight. WindowRef carbonWindow = carbonBuilder.GetProduct(); // If these are only Show/Select uncommented, window will display //ShowWindow( carbonWindow ); //SelectWindow( carbonWindow ); NSWindow *wrapper = [ [ NSWindow alloc ] initWithWindowRef: carbonWindow ]; // If these are only Show/Select uncommented, window will NOT display //ShowWindow( carbonWindow ); //SelectWindow( carbonWindow ); NSLog( @"Window frame = %@", NSStringFromRect( [ wrapper frame ] ) ); NSLog( @"Window content frame = %@", NSStringFromRect( [ [ wrapper contentView ] frame ] ) ); NSLog( @"Window alpha value = %f", [ wrapper alphaValue ] ); NSLog( @"Window visibility = %d", [ wrapper isVisible ] ); NSLog( @"Carbon window visibility = %d", IsWindowVisible( carbonWindow ) ); [ wrapper makeKeyAndOrderFront: self]; NSLog( @"Window frame = %@", NSStringFromRect( [ wrapper frame ] ) ); NSLog( @"Window content frame = %@", NSStringFromRect( [ [ wrapper contentView ] frame ] ) ); NSLog( @"Window alpha value = %f", [ wrapper alphaValue ] ); NSLog( @"Window visibility = %d", [ wrapper isVisible ] ); NSLog( @"Carbon window visibility = %d", IsWindowVisible( carbonWindow ) ); Here's the output I see: 2011-01-30 23:41:28.379 Empath[1126:a0f] Window frame = {{599, 246}, {776, 687}} 2011-01-30 23:41:28.381 Empath[1126:a0f] Window content frame = {{12, 0}, {764, 687}} 2011-01-30 23:41:28.381 Empath[1126:a0f] Window alpha value = 1.000000 2011-01-30 23:41:28.382 Empath[1126:a0f] Window visibility = 0 2011-01-30 23:41:28.382 Empath[1126:a0f] Carbon window visibility = 0 2011-01-30 23:41:28.386 Empath[1126:a0f] Window frame = {{599, 246}, {776, 687}} 2011-01-30 23:41:28.386 Empath[1126:a0f] Window content frame = {{12, 0}, {764, 687}} 2011-01-30 23:41:28.387 Empath[1126:a0f] Window alpha value = 1.000000 2011-01-30 23:41:28.387 Empath[1126:a0f] Window visibility = 1 2011-01-30 23:41:28.387 Empath[1126:a0f] Carbon window visibility = 1 But as I've said... still no window. Hrmm. I should say, that the end goal is to be able to have this NSWindow owned by an NSWindowController. The reasoning for this is that I have a factory method that returns an NSWindowController. I'd rather not back down from this and write my own class that does the controlling of Cocoa vs. Carbon windows. --aj ----- Original Message ---- From: Graham Cox <graham....@bigpond.com> To: Andrew James <andrew_a_ja...@yahoo.com> Cc: list-cocoa-dev <cocoa-dev@lists.apple.com> Sent: Sun, January 30, 2011 8:18:23 PM Subject: Re: Initializing NSWindow with Carbon window On 31/01/2011, at 3:02 PM, Andrew James wrote: > For once I actually should have "cut-and-paste": > > NSWindow *wrapper = [ [ NSWindow alloc ] initWithWindowRef: > carbonBuilder.GetProduct() ]; > [ wrapper makeKeyAndOrderFront: self]; > > I did have the sender being sent correctly. Window still does not show with > this approach. Nice catch though. > > I'm going to keep trying. Going to see if makeKeyAndOrderFront is causing any > Carbon Events to be generated for the wrapped window. > > I may also take the route of subclassing NSWindowController with something > like > > > WrappedCarbonWindowController and look into subclassing methods like >showWindow. > > Implementing a window delegate my also help. I've got options that I'm going > to explore. There are some simpler things to try first. Does carbonBuilder.GetProduct() actually return anything? Is the <wrapper> variable set to something after creating the window? If yes to both, try looking at properties of <wrapper>, such as its frame. That will tell you if it's actually supposed to be on the screen. If the window object isn't created, it might be that the carbon window type and/or combination of flags isn't supported, so you may have to go back and modify the carbon window you return to something currently legal. (I'm guessing here, I haven't had cause to do this myself, but AFAIK -initWithWindowRef: is not broken). Adding a window delegate isn't required to show a window, and adding one is only going to complicate matters at this stage. Also, I don't know that carbon events are generated even if NSWindow was inited with a carbon window. --Graham _______________________________________________ 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