Skip to content

activating visor window hides current full screen app #5

Open
patricknixon opened this Issue Jul 23, 2011 · 30 comments
@patricknixon

if i am viewing a window in lion's full screen mode and then activate the visor window, the full screen app slides away as if i was switching to another application.

@doits
doits commented Aug 1, 2011

yeah, would be great to have totalterminal to cover the fullscreen-app. So your terminal is always with you, no matter what fullscreen app you're working on.

Might be hard to implement, i guess.

At least the flickering when a fullscreen app switches to totalterminal on the desktop (on hitting the hotkey it switches to desktop with total terminal window visible, then it hides, and comes backs again) should be removed.

@ygbr
ygbr commented Aug 6, 2011

this would be a must, specially when running Textmate with fullscreen plugin.

Issue #12 references this same problem!

@darwin
BinaryAge member
darwin commented Aug 6, 2011

I encourage someone to go further and implement it because personally I don't use fullscreen apps right now and I don't plan to fix this anytime soon.

This will probably involve some new 10.7 APIs to tell the system that activating windows of Terminal.app should not exit fullscreen mode of fullscreen apps.

@ygbr
ygbr commented Aug 7, 2011

I think someone needs to implement NSWindowCollectionBehaviorFullScreenAuxiliary

see:

NSWindowCollectionBehaviorFullScreenAuxiliary
Windows with this collection behavior can be shown on the same space as the fullscreen window.
Available in Mac OS X v10.7 and later.
Declared in NSWindow.h.

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSWindow_Class/Reference/Reference.html#//apple_ref/occ/cl/NSWindow

@darwin
BinaryAge member
darwin commented Aug 7, 2011

I have just tried it without success. Also one guy has open question on Developer Forums at Apple since Jul 5 and without answer.

My understanding so far:
When window goes to fullscreen mode, system creates a new exclusive space for this fullscreen window. Exclusive space allows only app's windows to be shown there. The app can create multiple fullscreen windows and each of them takes new exclusive space (try Safari and multiple CMD+N). You may mark some of your windows to be NSWindowCollectionBehaviorFullScreenAuxiliary so they can be shown on top of fullscreen windows without creating a new space. AppKit auxiliary windows like NSPanel have this flag set by default.

The problem:
Terminal.app is different app and there is probably no supported way how it could display its own windows in exclusive space of some other app (say Safari).

My guess is that this will be possible on window server level with some CGSPrivate hackery (after someone takes the time to reverse-engineer it).

@ygbr
ygbr commented Aug 7, 2011

I have noticed that Adium message windows are sometimes able to occupy the Fullscreen apps spaces, not sure how yet.

@vvlad
vvlad commented Aug 22, 2011

As an workaround you can set LSUIElement in Terminal's Info.plist

@ygbr
ygbr commented Aug 23, 2011

It works!

The drawbacks:

  • Terminal no longer shows on Dock ( This is quite obvious as LSUIElement does exactly that ).
  • There is a space the size of the top bar on top of every TotalTerminal visor opened on Fullscreen apps windows.
  • You can no longer CMD - Tab to regular Terminal windows.
  • You cannot Force Kill Terminal process.

Apart from that, works like a charm!

@darwin
BinaryAge member
darwin commented Aug 24, 2011

Great job guys!

@ygbr
ygbr commented Sep 9, 2011

Hey darwin, do you think you can put an option on TotalTerminal preferences to inject or remove LSUIElement from Terminal preferences Plist? You can name it something like "Work with Fullscreen apps". Is it possible to do it in runtime ?

@darwin
BinaryAge member
darwin commented Sep 9, 2011

It is possible to add it to preferences, but Terminal.app reastart will be required (no big deal).

Not a priority for me right now.

@EricWVGG

Is this going to make it in to the software soon?

@darwin
BinaryAge member
darwin commented Sep 18, 2011

@EricWVGG: probably not, I'm pretty stuck, I'm going to do some traveling and spend rest of my time working on Asepsis and TotalFinder support

if you really think this is an important issue you may consider adding it in your fork, I would merge it

@riannucci

As an aside, I noticed some other odd behavior w.r.t. full screen apps and TT.

  • Open Itunes in fullscreen mode
  • Manually add another desktop in Spaces
    • Should look like: [Dashboard, Desktop 1, Desktop 2, iTunes]
  • Switch to iTunes
  • Activate TT (wihch switches away from iTunes to show TT on Desktop 1)
  • Desktop order is now:
    • [Dashboard, Desktop 1, iTunes, Desktop 2]

It's weird (and possibly related). Just FYI.

@ygbr
ygbr commented Feb 23, 2012

It would be awesome if we can get if LSUIElement is set to 1 in the window and if TotalTerminal was invoked from a Fullscreen application window, them reset the top margin to 0 instead the size of the top bar, so we will no longer have the gap between total terminal and screen top when invoking TotalTerminal from a Fullscreen app window.

A sure thing to think about when the time comes to implement LSUIElement as a preference :)

@EricWVGG

Xscope appears to have found a way around this, which involves removing their app from the Dock. Dunno if you can gleam any hints from it:

http://support.iconfactory.com/kb/xscope/problems-measuring-apps-running-in-full-screen-mode-on-lion

@xster
xster commented Apr 24, 2012

Great solution, thanks!

@OldhamMade

Any updates on this ticket? Would be nice to have the ability to run TT above full-screen apps, especially for development. I personally run Emacs full screen but prefer TT for running code in the shell over running a shell within Emacs, and all the flicking about is starting to get a tad annoying.

@glenbot
glenbot commented May 8, 2013

Any movement on this? TT on fullscreen apps would be sweet for people with small screen laptops always running vim.

@darwin
BinaryAge member
darwin commented May 8, 2013

LSUIElement should be a temporary solution for 10.8

OS X 10.9 might have a better support for this (a rumor)

@max-lobur

Doesn't work in 10.9 and cannot found a solution for now =(

@darwin
BinaryAge member
darwin commented Oct 25, 2013

Info.plist cannot be changed under Mavericks due to more strict security rules

See #3 for solution how to set LSUIElement dynamically with TotalTerminal 1.4.2

@max-lobur

Yep, It does the trick. Thanks a lot!
For further readers the solution is:
1. Make sure TT is not running
2. Start default OS X terminal
3. write: defaults write com.apple.Terminal TotalTerminalHideDockIcon -bool YES
4. DONE

@PeacefulChaos

Neither of these options worked for me, default terminal, TotalTerminal, or AppleScript. The window still reverts to the desktop when the visor opens and the dock icon is still there. You can still edit the Info.plist in Mavericks, but you still have to change ownership of the file and Contents folder. This worked fine for me on Mavericks even before the new updates. Even over fullscreen apps including Safari.

Edit. This worked before the new TT release. Since then it still doesn't work.

@darwin
BinaryAge member
darwin commented Oct 26, 2013

@PeacefulChaos No, with default Mavericks settings, changing Info.plist of Terminal.app will break the code signature and system will refuse to launch it.

@darwin
BinaryAge member
darwin commented Oct 26, 2013

Since 1.4.4, switching to LSUIElement will be available via TotalTerminal preferences option "Run Terminal.app as a background app"

@PeacefulChaos

I edited the plist file once I updated to Mavericks with TT v1.4.1 and it still worked. The only side effect was there was no animation to the visor, but other than that, it worked fine. I'll be looking forward to the release of 1.4.4.

@darwin
BinaryAge member
darwin commented Oct 26, 2013

Please try 1.4.4, it is already available on the beta channel:
http://totalterminal.binaryage.com/#changelog

@PeacefulChaos

1.4.4 does remove the Terminal Icon from the dock and App Switcher, however it's still not working over full screen apps. This time instead of switching to the default desktop, it doesn't do anything at all until I switch to the main screen myself and then input the keystroke to open the visor. Suggestions?

Edit: I reverted the Info.plist to the original code and reset permissions to root:wheel.

Another Edit: Looking at Safari's behavior, it seem that the window is activating but it seems that it's behind the fullscreen apps.

@PeacefulChaos

Scratch my last. I did a reboot and now it works perfectly. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.