On Tue, Nov 15, 2016 at 01:08:08PM +0000, Jürgen Hartmann wrote:
> On my Linux host system (Xorg 7.6 / Kernel 3.11.6) I use Fvwm 2.6.7 as window
> manager (congratulation to the new default configuration which I like very
> much) and Vmware Workstation 9.0.4 to run virtual machines that use variants
> of MS Windows as guest operating systems.

On the site you mentioned below there are only 64-bit Linux
binaries available for download, and only for version 12.  I'd
like to help, but I need a 32 bit Linux version that shows the bug
and that can actually be downloaded (i.e. I can't download
anything from the site because the download links trigger a
redirect loop).

> Now, when I switch a virtual machine that is displayed in fullscreen mode
> back to normal window mode, I get the normal Fvwm desktop but no Vmware
> window: The expected Vmware GUI window is neither visible, nor iconified
> somewhere, nor brought back by
> 
>    All MoveToScreen
> 
> (issued in FvwmConsole), nor gets listed by FvwmWinList.

That means that the window is not mapped.  WIndow managers do not
know anything about unmapped windows and can do nothing with them.

> However, according to
> 
>    xprop -name vmware
> 
> the window still exists with the following properties
> (newlines and indents inserted for readability):
> 
>    WM_CLASS(STRING) = "vmware", "Vmware"
...

That just means that a window with the name still exists.

> Fvwm 2.6.7 outputs the following lines when the fullscreen mode is turned
> on (!) at the first place (newlines and indents inserted for readability):
> 
>    [fvwm][ComplexFunction]:
>    <<ERROR>> Grab failed in function EWMHActivateWindowFunc, unable to
>    execute immediate action

Some program, probably vmware, has asked fvwm to "activate" some
window.  Activation is a term from the EWMH specification and
usually asks the window manager to make the window visible (switch
to its page, bring it to the front, give it focus).  In fvwm the
function to execute on the window can be changed by the user.

During immediate function execution fvwm tries to get exclusive
control of the pointer (a "grab").  This failed in the given case
because some other program held the grab.  Fvwm retries grabbing
for a second before giving up (the function is aborted).  It seems
that for whatever reason vmware grabbed control over the pointer
for a long time, which it really should not do because it blocks
all other applications, including the window manager.  But this is
not related to the vanishing window.

>    [fvwm][GetWindowSizeHints]:
>    <<WARNING>> reason: 1: The hints have been ignored because the window's
>    current size would have become invalid. The new hints will become active
>    when the window generates the next ConfigureRequest.

Not interesting here.

> Icewm 1.2.38 comments the switching off (!) of the fullscreen mode like that
> (newlines and indents inserted for readability):
> 
>    IceWM: MappingNotify
>    IceWM: APP BUG?
>       configureRequest for window 40011C sent to destroyed frame 800003!

I'm unsure what this means exactly.  It seems that icewm and
vmware disagree about the state of the client window.  vmware sent
a ConfigureRequest event (moved or resized the window), and the
window was mapped at that time because otherwise icewm would not
have received the request.  On the other hand the frame window
(the one with the decorations and the client window inside) did
not exist at that time, i.e. icewm had destroyed it.  THat usually
happens when a window was unmapped.  So, when the request arrived,
icewm thought the window was unmapped while it was actually
mapped.  Although vmware might have done something funny, this
looks like an icewm bug (maybe they process events out of order).

> To summarize, here are the questions I have right now:
> 
>    * What is this fullscreen mode in the first place? Is it a window at all
>      what we see? Is it managed by Fvwm?

Fullscreen mode is a term of the EWMH spec.  There's a special
protocol to switch between fullscreen and normal modes.  In
fullscreen mode the window ist displayed at maximum size without
decorations.  The application can ask the window manager to switch
between modes, and the window manager may or may not do so.

>    * What is that state that the hidden Vmware GUI window is in after
>      returning from fullscreen mode?
>      (Known to xprop, but unknown to FvwmWinList.)

It seems to be unmapped and can thus not be controlled in any way
by the window manager.  To double check that you can issue

  all echo $w $[w.name]

from FvwmConsole and check if the window is mentioned in the
console output.  Also try

  all iconify off
  all windowshade off
  all (vmware) resizemove 500p 500p 0p 0p

>    * Is there any tool to manipulate X windows at runtime, e.g. to move or
>      raise them or to change their geometry (aside from the window's border
>      and the handles there--it should be applicable to a hidden window)?

That tool is fvwm.  You can type any command from FvwmConsole or
using FvwmCommand from a shell.  But it can only handle mapped
windows.

>    * Is it possible to tune Fvwm's configuration in some way, to achieve that
>      Vmware returns with a normal (visible) window from fullscreen mode?
> 
>    * If not, is it possible to tune Fvwm's sources in some way to achieve
>      this? Perhaps by replicate the behavior of Kwin or Icewm in this
>      respect?

First we need to figure out what's actually happening, then we can
think about a solution.

>    * Do you see any solutions, workarounds, or starting points to proceed
>      with this problem?

The preferred approach would be to find a vmware version that runs
on my box, can be downloaded and shows the problem.  If that's not
possible, start with gathering some information about what's
happening.

1. Make the vmware window fullscreen and start a shell on top of it.
2. Run "xwininfo -tree", click on the fullscreen window.  Save the
   output.  Repeat with a plain "xwininfo".
3. From the output of -tree you should be able to figure out the
   window ids of the client window and the frame window:

    xwininfo: Window id: 0x1a00006 "~" <------- clent window id

      Root window id: 0x262 (the root window) (has no name)
      Parent window id: 0x402441 (has no name) <----- fram window id
4. Run something like this:

     $ sleep 10; xev -id 0x1a00006 > xev.client & xev -id 0x402441 > xev.frame 
& sleep 30; killall xev

   Within the first ten seconds, hide all windows except the
   fullscreen window.  Then wait until you're sure the first sleep
   has finished, but the final sleep is not over yet, and disable
   fullscreen mode, then wait until the final sleep has completed.
   If possible, do all of this with the keyboard because movind
   the mouse generates tons of events being reported to xev, making
   the output much harder to read.
5. Post all the output to the mailing list.

Ciao

Dominik ^_^  ^_^

-- 

Dominik Vogt

Reply via email to