On Tue, Nov 15, 2016 at 05:23:09PM -0500, Chris Siebenmann wrote:
> > 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.
> 
>  I believe that VMWare grabs the X pointer when it converts the X
> pointer into a virtual machine mouse (or non-mouse, if the virtual
> machine isn't using it). The pointer stays grabbed until you manually
> tell VMWare to release it or, under some conditions, until you move the
> mouse pointer 'outside' the virtual machine's window. I think VMWare
> also grabs the keyboard here for the same reason.
> 
> (I believe that the VM needs to be using the mouse and have the VMWare
> tools installed, at which point the in-VM driver signals VMWare itself
> to let go of the mouse.)
> 
>  All of this is kind of a hack. VMWare wants 100% of the mouse and
> keyboard events to go to the virtual machine without your host
> environment getting in the way, even if what you're doing normally
> has special meaning to the host.

I see.  However, if it does that, it cannot expect to be able to
communicate with the outside world, as it seems to do.  Maybe this *is* the 
Problem after all.

@Jürgen: Could you try whether the attached patch helps?  (It
disables all grabs during function execution and *does* break
complex functions with non-immediate actions.)

Ciao

Dominik ^_^  ^_^

-- 

Dominik Vogt
>From d000725dce2e0fc1b155c9adda14cf0d28899f72 Mon Sep 17 00:00:00 2001
From: Dominik Vogt <[email protected]>
Date: Wed, 16 Nov 2016 01:14:31 +0100
Subject: [PATCH] !try no grabs in function execution

---
 fvwm/functions.c |    8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/fvwm/functions.c b/fvwm/functions.c
index 298cdd3..4cbe25f 100644
--- a/fvwm/functions.c
+++ b/fvwm/functions.c
@@ -1018,6 +1018,7 @@ static void execute_complex_function(
 		mask |= ECC_W;
 	}
 
+#if 0 /*!!!*/
 	/* we have to grab buttons before executing immediate actions because
 	 * these actions can move the window away from the pointer so that a
 	 * button release would go to the application below. */
@@ -1031,6 +1032,7 @@ static void execute_complex_function(
 		__cf_cleanup(&depth, arguments, cond_rc);
 		return;
 	}
+#endif
 	exc2 = exc_clone_context(exc, &ecc, mask);
 	__run_complex_function_items(
 		cond_rc, CF_IMMEDIATE, func, exc2, arguments,
@@ -1064,7 +1066,9 @@ static void execute_complex_function(
 	{
 		func->use_depth--;
 		__cf_cleanup(&depth, arguments, cond_rc);
+#if 0 /*!!!*/
 		UngrabEm(GRAB_NORMAL);
+#endif
 		return;
 	}
 
@@ -1078,7 +1082,9 @@ static void execute_complex_function(
 		{
 			func->use_depth--;
 			__cf_cleanup(&depth, arguments, cond_rc);
+#if 0 /*!!!*/
 			UngrabEm(GRAB_NORMAL);
+#endif
 			return;
 		}
 	}
@@ -1182,7 +1188,9 @@ static void execute_complex_function(
 	 */
 	func->use_depth--;
 	__cf_cleanup(&depth, arguments, cond_rc);
+#if 0 /*!!!*/
 	UngrabEm(GRAB_NORMAL);
+#endif
 
 	return;
 }
-- 
1.7.10.4

Reply via email to