Cocoa Borderless Panel causes issues in PowerPlant/Carbon
Cocoa Borderless Panel causes issues in PowerPlant/Carbon
- Subject: Cocoa Borderless Panel causes issues in PowerPlant/Carbon
- From: Abdul Sowayan <email@hidden>
- Date: Thu, 16 Sep 2010 10:34:42 -0400
- Thread-topic: Cocoa Borderless Panel causes issues in PowerPlant/Carbon
Hi folks,
I am having Carbon/PowerPlant and Cocoa integration issue. I was hoping
someone might have an insight into this problem. Any feedback would be
greatly appreciated. A reproducer program that shows the problem can be
found at:
http://ericgorr.net/cocoadev/BorderlessWindow.zip
My application is a PowerPlant/Carbon application and I would like to use
Cocoa in parts of the application. The program is simple, I have a
PowerPlant/Carbon Window and a Cocoa Panel. The PowerPlant/Carbon Window has
an ³ON² button, when the user clicks on that button the Cocoa Panel becomes
the key window. When the user click back to the PowerPlant/Carbon Window,
the Cocoa Panel resigns key window.
The issue I¹m facing is that the behavior of this simple application is
different if I set the window mask to NSBorderlessWindowMask (that is, if I
have a borderless Panel). In the code example, I overrode the
PowerPlant/Carbon Window¹s Deactivate method to print ³DEACTIVATING
POWERPLANT WINDOW² whenever the PowerPlant/Carbon Window is deactivated.
When the Cocoa Panel has a border, I get the below. The Cocoa Window has the
title ³Window². Notice that the Cocoa window type is
com.apple.HIToolbox.windowgroups.floating and also notice that my
PowerPlant/Carbon window never gets deactivated when the ON button is
clicked (that is, when the Cocoa Panel becomes key window). This is the
behavior I was expecting.
------------
(gdb) call (void)DebugPrintWindowList()
Flags: V:visible H:highlighted A:active F:user focus S:hide on suspend
Avail: T:transient S:stationary A:all spaces M:move to active space
Window Class WID Flags Level Avail Title
Group
---------- ------------- ---- ----- ----- -----
------------------------- ----------------------------
0x416840 MenuBar 7 24 S
0x417bc0 "com.apple.HIToolbox.windowgroups.menubar"
0x52a440 Floating 26E2 H S 3 T Window
0x52b2b0 "com.apple.HIToolbox.windowgroups.floating"
0x40dde0 Floating 26E3 S 0 T
0x52b2b0 "com.apple.HIToolbox.windowgroups.floating"
0x502af0 Document 26E1 V 0
0x509d80 "com.apple.HIToolbox.windowgroups.document"
ON
2010-09-16 09:51:53.564 testPP[96414:a0f] Panel becomeKeyWindow <Panel:
0x519bd0>
2010-09-16 09:51:54.603 testPP[96414:a0f] Panel resignKeyWindow (null)
ON
2010-09-16 09:51:54.740 testPP[96414:a0f] Panel becomeKeyWindow <Panel:
0x519bd0>
2010-09-16 09:51:55.612 testPP[96414:a0f] Panel resignKeyWindow (null)
ON
2010-09-16 09:51:55.740 testPP[96414:a0f] Panel becomeKeyWindow <Panel:
0x519bd0>
2010-09-16 09:51:56.652 testPP[96414:a0f] Panel resignKeyWindow (null)
ON
2010-09-16 09:51:56.788 testPP[96414:a0f] Panel becomeKeyWindow <Panel:
0x519bd0>
2010-09-16 09:52:01.997 testPP[96414:a0f] Panel resignKeyWindow (null)
------------
When the Cocoa Panel does not have border (that is, when we use
NSBorderlessWindowMask), I get the below. The Cocoa Window has the title
³Window². Notice that the Cocoa window type is
com.apple.HIToolbox.windowgroups.document and also notice that my
PowerPlant/Carbon window now gets deactivated when the ON button is clicked
(that is, when the Cocoa Panel becomes key window). This is not the behavior
I was expecting.
------------
(gdb) call (void)DebugPrintWindowList()
Flags: V:visible H:highlighted A:active F:user focus S:hide on suspend
Avail: T:transient S:stationary A:all spaces M:move to active space
Window Class WID Flags Level Avail Title
Group
---------- ------------- ---- ----- ----- -----
------------------------- ----------------------------
0x415cd0 MenuBar 7 24 S
0x417130 "com.apple.HIToolbox.windowgroups.menubar"
0x1809ea0 Floating 26C9 S 0 T
0x1824470 "com.apple.HIToolbox.windowgroups.floating"
0x181f620 Document 26C8 V 0 Window
0x607ef0 "com.apple.HIToolbox.windowgroups.document"
0x1d02df0 Document 26C7 V 0
0x607ef0 "com.apple.HIToolbox.windowgroups.document"
ON
2010-09-16 09:49:58.119 testPP[96360:a0f] Panel becomeKeyWindow <Panel:
0x180ced0>
2010-09-16 09:49:58.125 testPP[96360:a0f] DEACTIVATING POWERPLANT WINDOW
2010-09-16 09:49:59.159 testPP[96360:a0f] Panel resignKeyWindow (null)
ON
2010-09-16 09:50:02.519 testPP[96360:a0f] Panel becomeKeyWindow <Panel:
0x180ced0>
2010-09-16 09:50:02.525 testPP[96360:a0f] DEACTIVATING POWERPLANT WINDOW
2010-09-16 09:50:03.752 testPP[96360:a0f] Panel resignKeyWindow (null)
ON
2010-09-16 09:50:04.839 testPP[96360:a0f] Panel becomeKeyWindow <Panel:
0x180ced0>
2010-09-16 09:50:04.844 testPP[96360:a0f] DEACTIVATING POWERPLANT WINDOW
2010-09-16 09:50:06.376 testPP[96360:a0f] Panel resignKeyWindow (null)
------------------------------------------------------------------------
To summarize:
When Cocoa Panel has a border, the Cocoa Panel is considered a ³Floating²
Window.
When Cocoa Panel does not have a border, the Cocoa Panel is considered a
³Document² Window.
When a ³Floating² Cocoa Window becomes Key Window, the PowerPlant/Carbon
Window DOES NOT get deactivated.
When a ³Document² Cocoa Window becomes Key Window, the PowerPlant/Carbon
Window DOES get deactivated.
The difference in behavior is causing me problems in my application. What I
would like is to have a Borderless Panel that DOES NOT deactivate the
PowerPlant/Carbon Window.
Again, any feedback would be greatly appreciated.
Thanks,
Abdul
_______________________________________________
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