Hi
I did some code diving into both vlc and qt. Though I still think that this is (at least partially) a Qt issue, there is a way for vlc to work around it.
This is what happens:
VLC uses the Qt window state to save the state that was active prior to switching to fullscreen. When coming from a maximized window, this results in a window that is both maximized and in fullscreen. The Qt window state for a normal, non-maximized, non-minimized window is 0 (zero), that's why fullscreen mode works flawlessly when coming from such a window.
When a QWidget in a maximized fullscreen window is changed via signals and slots, a repaint is requested, which eventually can result in a re-layout of the window.
Before switching to fullscreen, VLC goes to minimal view. This seems to be not finished when the fullscreen mode request is handled by Qt, so the visibilty change for minimal view actually happens afterwards (I can't tell why, but it's the only explanation I can come up with).
When a user manually switches to minimal mode, this is completed before the user can switch to fullscreen. Humans are just too slow for computers
When a window with both the window states "maximized" and "fullscreen" is re-layouted, the result is a window with the geometry of a maximized window and the (non-visible) decoration of a fullscreen window. That's why the xfce panel is visible.
I'm linking two things:
[1]
Two Qt creator projects for testing fullscreen mode in xfce. One breaks it, one doesn't. Both have the same UI. The button "Toggle Fullscreen" does as captioned, the button "Set label" shows the current window state in the label below the buttons (name and integer code).
How to break the fullscreen:
a) maximize the window
b) toggle fullscreen (fullscreen mode works at that moment)
c) click "Set label" (fullscreen mode breaks, xfce panel appears)
If you rid the MainWindow class of the layout, you can test that the fullscreen mode doesn't break anymore (although the window still gets both maximized and fullscreen modes).
The second project has a working fullscreen switcher, which does the state saving on client side, not in Qt window state.
[2]
Diffs with a (possible) solution on VLC side. Feel free to use it if suitable.
[1]
http://www.cobinja.de/FullScreenTest.tar.gz
[2]
http://www.cobinja.de/main_interface.diff.tar.gz