In a Cocoa app, is there a way to tell if another application currently is in full screen mode?
My application is configured to show up on all Spaces and listens for
The above mentioned methods of registering for
"NSWindowWillEnterFullScreenNotification"
does not work, they can be used to notify your own app, using them we cannot detect whether any other application is in full screen mode or not.
However After trying out so many options found out FullScreen detector app at github this usefull link ..:):)
https://github.com/shinypb/FullScreenDetector.git
Hmm, have you ruled out using applescript/scriptingbridge? You can get the size of windows from applescript and compare them to the size of the screen. (or do you not know which screen a given app is on?)
Certain apps which are accessible will have an 'AXFullScreen' attribute on their windows. For example this works for some apps:
tell application "System Events"
tell process "Pages"
repeat with myWin in windows
get value of attribute "AXFullScreen" of myWin
end repeat
end tell
end tell
The real action seems to be down in carbon... MacWindows.h and CarbonEvents.h have references to "FullScreen" in them.
You will need to research this though.
After a great deal of frustration, this worked for me to get a window that floats on all spaces except full-screen ones. I saw the fullScreenNone
constant name, and since it described what I wanted, I tried it and found that it worked.
window.level = .floating
window.collectionBehavior = [.canJoinAllSpaces, .fullScreenNone]
window.canHide = false
Use notifications. For example:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(willEnterFull:)
name:NSWindowWillEnterFullScreenNotification
object:nil];
Actually, you'll probably want to use NSDistributedNotificationCenter instead, since it goes across processes.
You're adding your object as an observer, so that when something else posts a notification that it will enter full screen, your object will receive that notification.
The selector is the message/method you want called by the notification process.
The name parameter is the actual name of the notification. These are standard, unless you were to create a custom notification for something you would be using.
The object parameter is for specifying which object you want to receive notifications from. Since you want to know when ANY app is going full screen, you'd want to leave this nil.
Remember to remove your object as an observer before it's deallocated!