Index: /trunk/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp	(revision 55542)
+++ /trunk/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp	(revision 55543)
@@ -235,5 +235,6 @@
                 ComPtr<IShowWindowEvent> swev = aEvent;
                 Assert(swev);
-                swev->COMSETTER(WinId)(0);
+                /* Ignore the event, WinId is either still zero or some other listener assigned it. */
+                NOREF(swev); /* swev->COMSETTER(WinId)(0); */
                 break;
             }
Index: /trunk/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp	(revision 55542)
+++ /trunk/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp	(revision 55543)
@@ -529,4 +529,6 @@
                 if (!SDL_GetWMInfo(&info))
                     pCSWEv->AddVeto(NULL);
+                else
+                    pCSWEv->AddApproval(NULL);
 #endif
                 break;
@@ -537,4 +539,8 @@
                 ComPtr<IShowWindowEvent> pSWEv = aEvent;
                 Assert(pSWEv);
+                LONG64 winId = 0;
+                pSWEv->COMGETTER(WinId)(&winId);
+                if (winId != 0)
+                    break; /* WinId already set by some other listener. */
 #ifndef RT_OS_DARWIN
                 SDL_SysWMinfo info;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.cpp	(revision 55542)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.cpp	(revision 55543)
@@ -242,4 +242,6 @@
             if (fVeto)
                 es.AddVeto(strReason);
+            else
+                es.AddApproval(strReason);
             break;
         }
@@ -248,5 +250,7 @@
             CShowWindowEvent es(pEvent);
             /* Has to be done in place to give an answer: */
-            LONG64 winId;
+            LONG64 winId = es.GetWinId();
+            if (winId != 0)
+                break; /* Already set by some listener. */
             emit sigShowWindow(winId);
             es.SetWinId(winId);
