Pregunta

I'm currently trying to execute a Qt X11 application on remote XServer (Exceed). To make application window to be always on top of other displays, I'm using the statement below:

MainWindow->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::Tool);

If I execute my application on Windows 7 and Ubuntu operating systems locally, it executes as "Always on Top" application. However, when I route the display information to remote XServer (Exceed x64 v14), it starts to execute without having "Always on Top" property. It goes behind of other displays when it lost the focus.

Is there any further configuration I should make in Qt code or in Exceed product?

Thanks.

¿Fue útil?

Solución

First let's get some terminology out of the way. The "Always on Top" property you set is not a feature of X11, but part of a standard set of so called window manager "Hints", specifed as part of the Inter-Client-Communication-Manual and the Extended-Window-Manager-Hints.

X11 does not deal with placement of the windows on the screen, that's what the Window manager does. On your typical X11 system you got a ICCCM/EWMH compliant window manager, which is in control of all the windows and all is well. This works also with all kinds of forwarding, since for the X11 server it doesn't matter which way the clients are connected, and all communications between the clients happen through the X11 server.

Now in your case you're using Exceed which is a X11 server running on top of the Microsoft Windows desktop. Windows does all its window management itself, and things like "Always-On-Top" are policies part of the window management code of Windows. However since X11 doesn't define policy, but only method any sort of ICCCM/EWMH information will never pass to the Windows window management. All Windows sees are featureless top level windows created by Exceed for the individual clients.

Now you could start a X11 WM within Exceed, but this WM then lives only within X11 and since X11 does not define policy like "Always-On-Top" has no way to tell Windows, that a window should actually stay on top. You can start Exceed also in a "Fullscreen" mode, where it opens up a whole window wherein all the X11 clients are running in their own little desktop. A WM running therein will only manage the X11 clients therein, but again can not pass its information to Windows.

What you'd actually need was some kind of Bypass, that would connect to Exceed in parallel and keeps in sync the Windows window properties (policy) with the ICCCM/EWMH on the X11 side. Such a program is totally feasible, but I'm not aware of any program available doing this.

Otros consejos

X11 Forwarding do not support this feature

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top