When the client is in full screen and you switch to another application, that application is supposed to be in front of the client in case they overlap. This used to work fine on macOS but is now broken. This is a regression since 4.9.0 still works. It is unclear when it stopped working though as 4.10.0 through 4.12.0 fail to render properly on macOS (bug 7539) so those cannot be tested. 4.12.1 exhibits the bug though. We upgraded FLTK for 4.10.0 and 4.12.0 though, so those are the likely versions where this stopped working.
It was broken by this commit, included in FLTK 1.3.4: https://github.com/fltk/fltk/commit/25fc85190e48c5e0cdece97c90a3a291de9fd129 See discussion on https://github.com/fltk/fltk/pull/277: > It was broken by 25fc851. Might be a regression in newer versions of macOS. > The issue seems to be that you always get nil for [NSApp keyWindow] if the > window belongs to another process. So the level adjustment code in > windowDidResignKey() never executes.
Note that this bug only applies when the ThinLinc Client is in fullscreen on the primary monitor, the monitor with the macOS dock. When the ThinLinc Client is in fullscreen on a secondary monitor things work well. Also note that the behavior is the same no matter if the "Send systemkeys" option is enabled or disabled.
The "Displays have separate spaces" setting also does not affect this behavior.
The notes in comment 2 are incorrect, it is likely that I got confused due to bug 7782. The only requirement for this bug to occur is that "Send system keys" should be disabled. The explanation for this is that when we grab we set the window level ourselves in vncviewer which means are not affected by the buggy levels set by FLTK. This bug should be fixed by a vendor drop of FLTK since it is supposedly fixed upstream. With regards to bug 7782, in order to observe that the client does NOT obscure windows, when the client is on the primary screen (and grab is disabled), you can right-click on any text-input on the secondary screen to release the focus.