diff --git a/modules/gui/qt/maininterface/compositor.cpp b/modules/gui/qt/maininterface/compositor.cpp
index 36d41bb0999c0496abf802c849f629e99b93c44c..dc5b6933ba0da0ad0f2428ca794c53e2584c129c 100644
--- a/modules/gui/qt/maininterface/compositor.cpp
+++ b/modules/gui/qt/maininterface/compositor.cpp
@@ -50,4 +50,10 @@ Compositor* Compositor::createCompositor(qt_intf_t *p_intf)
     return new CompositorDummy(p_intf);
 }
 
+void Compositor::onWindowDestruction(vout_window_t *p_wnd)
+{
+    if (m_destroyCb)
+        m_destroyCb(p_wnd);
+}
+
 }
diff --git a/modules/gui/qt/maininterface/compositor.hpp b/modules/gui/qt/maininterface/compositor.hpp
index b992c8847d033e2eb51ecfd331011fc3862e8f88..b03c0506649ac993257637a0799365c618345cbd 100644
--- a/modules/gui/qt/maininterface/compositor.hpp
+++ b/modules/gui/qt/maininterface/compositor.hpp
@@ -43,17 +43,25 @@ public:
         DirectCompositionCompositor
     };
 
+    typedef void (*VoutDestroyCb)(vout_window_t *p_wnd);
+
+public:
     virtual ~Compositor() = default;
 
     virtual MainInterface* makeMainInterface() = 0;
     virtual void destroyMainInterface() = 0;
 
-    virtual bool setupVoutWindow(vout_window_t *p_wnd) = 0;
+    virtual bool setupVoutWindow(vout_window_t *p_wnd, VoutDestroyCb destroyCb) = 0;
 
     virtual Type type() const = 0;
 
     //factory
     static Compositor* createCompositor(qt_intf_t *p_intf);
+
+protected:
+    void onWindowDestruction(vout_window_t *p_wnd);
+
+    VoutDestroyCb m_destroyCb = nullptr;
 };
 
 
diff --git a/modules/gui/qt/maininterface/compositor_dcomp.cpp b/modules/gui/qt/maininterface/compositor_dcomp.cpp
index 6b54f1de42dcd759bc2661b9dd17b52eb2017062..74086504cedcd0ca2b35cb8bd8d74533ff862b92 100644
--- a/modules/gui/qt/maininterface/compositor_dcomp.cpp
+++ b/modules/gui/qt/maininterface/compositor_dcomp.cpp
@@ -101,6 +101,7 @@ void CompositorDirectComposition::window_destroy(struct vout_window_t * p_wnd)
     msg_Dbg(that->m_intf, "window_destroy");
     that->m_window = nullptr;
     that->m_videoVisual.Reset();
+    that->onWindowDestruction(p_wnd);
 }
 
 void CompositorDirectComposition::window_set_state(struct vout_window_t * p_wnd, unsigned state)
@@ -293,8 +294,10 @@ void CompositorDirectComposition::destroyMainInterface()
     m_ui.reset();
 }
 
-bool CompositorDirectComposition::setupVoutWindow(vout_window_t *p_wnd)
+bool CompositorDirectComposition::setupVoutWindow(vout_window_t *p_wnd, VoutDestroyCb destroyCb)
 {
+    m_destroyCb = destroyCb;
+
     //Only the first video is embedded
     if (m_videoVisual.Get())
         return false;
diff --git a/modules/gui/qt/maininterface/compositor_dcomp.hpp b/modules/gui/qt/maininterface/compositor_dcomp.hpp
index 357d338174119d5236ff474543ff3a46fe6619ad..acc1ca1ee099c03ce09b2a78cdd027daf065f650 100644
--- a/modules/gui/qt/maininterface/compositor_dcomp.hpp
+++ b/modules/gui/qt/maininterface/compositor_dcomp.hpp
@@ -50,7 +50,7 @@ public:
     MainInterface *makeMainInterface() override;
     void destroyMainInterface() override;
 
-    bool setupVoutWindow(vout_window_t *p_wnd) override;
+    bool setupVoutWindow(vout_window_t *p_wnd, VoutDestroyCb destroyCb) override;
 
     Type type() const override;
 
diff --git a/modules/gui/qt/maininterface/compositor_dummy.cpp b/modules/gui/qt/maininterface/compositor_dummy.cpp
index 600402190a1816fa0932c92fc536500fbc1ca744..75512fc05d6b71ef05e518626cefd347d25c1cb7 100644
--- a/modules/gui/qt/maininterface/compositor_dummy.cpp
+++ b/modules/gui/qt/maininterface/compositor_dummy.cpp
@@ -68,7 +68,7 @@ void CompositorDummy::destroyMainInterface()
     }
 }
 
-bool CompositorDummy::setupVoutWindow(vout_window_t*)
+bool CompositorDummy::setupVoutWindow(vout_window_t*, VoutDestroyCb)
 {
     //dummy compositor doesn't handle window intergration
     return false;
diff --git a/modules/gui/qt/maininterface/compositor_dummy.hpp b/modules/gui/qt/maininterface/compositor_dummy.hpp
index edd4bd5d1e6311157399f615c4f199cc1c347b31..ae5bdc947caab4ea2e9c3f137919d1cbd1d9a27c 100644
--- a/modules/gui/qt/maininterface/compositor_dummy.hpp
+++ b/modules/gui/qt/maininterface/compositor_dummy.hpp
@@ -40,7 +40,7 @@ public:
     virtual MainInterface *makeMainInterface() override;
     virtual void destroyMainInterface() override;
 
-    bool setupVoutWindow(vout_window_t *p_wnd) override;
+    bool setupVoutWindow(vout_window_t *p_wnd, VoutDestroyCb destroyCb) override;
 
     Type type() const override;
 
diff --git a/modules/gui/qt/maininterface/compositor_win7.cpp b/modules/gui/qt/maininterface/compositor_win7.cpp
index 7d586633f2a6f735881958002c7bdc01f3ba7bd1..f3be15bbb48cb0e46309fa6d32b6bc2a305fd109 100644
--- a/modules/gui/qt/maininterface/compositor_win7.cpp
+++ b/modules/gui/qt/maininterface/compositor_win7.cpp
@@ -55,6 +55,7 @@ void CompositorWin7::window_destroy(struct vout_window_t * p_wnd)
 {
     CompositorWin7* that = static_cast<CompositorWin7*>(p_wnd->sys);
     msg_Dbg(that->m_intf, "window_destroy");
+    that->onWindowDestruction(p_wnd);
 }
 
 void CompositorWin7::window_set_state(struct vout_window_t * p_wnd, unsigned state)
@@ -241,7 +242,7 @@ void CompositorWin7::destroyMainInterface()
     }
 }
 
-bool CompositorWin7::setupVoutWindow(vout_window_t *p_wnd)
+bool CompositorWin7::setupVoutWindow(vout_window_t *p_wnd, VoutDestroyCb destroyCb)
 {
     BOOL isCompositionEnabled;
     HRESULT hr = DwmIsCompositionEnabled(&isCompositionEnabled);
diff --git a/modules/gui/qt/maininterface/compositor_win7.hpp b/modules/gui/qt/maininterface/compositor_win7.hpp
index 7ba256dc8042f3056c9c1c46cfecb96343a628c0..18f5a2dd39c7eed94f5db8b7f3c362b78c39985a 100644
--- a/modules/gui/qt/maininterface/compositor_win7.hpp
+++ b/modules/gui/qt/maininterface/compositor_win7.hpp
@@ -50,7 +50,7 @@ public:
 
     virtual MainInterface *makeMainInterface() override;
     virtual void destroyMainInterface() override;
-    virtual bool setupVoutWindow(vout_window_t*) override;
+    virtual bool setupVoutWindow(vout_window_t*, VoutDestroyCb destroyCb) override;
 
     Type type() const override;
 
diff --git a/modules/gui/qt/qt.cpp b/modules/gui/qt/qt.cpp
index 3ef3f46b4677b7d7c122e200eaaa0244ed4a1f68..f7fb05b3bc28916519655cf042dca1169ef66fd8 100644
--- a/modules/gui/qt/qt.cpp
+++ b/modules/gui/qt/qt.cpp
@@ -835,6 +835,11 @@ static void ShowDialog( intf_thread_t *p_intf, int i_dialog_event, int i_arg,
     QApplication::postEvent( THEDP, event );
 }
 
+static void WindowCloseCb( vout_window_t *p_wnd )
+{
+    //FIXME
+}
+
 /**
  * Video output window provider
  */
@@ -864,6 +869,6 @@ static int WindowOpen( vout_window_t *p_wnd )
     if (unlikely(open_state != OPEN_STATE_OPENED))
         return VLC_EGENERIC;
 
-    return p_intf->p_compositor->setupVoutWindow( p_wnd ) ? VLC_SUCCESS : VLC_EGENERIC;
-
+    bool ret  = p_intf->p_compositor->setupVoutWindow( p_wnd, &WindowCloseCb );
+    return ret ? VLC_SUCCESS : VLC_EGENERIC;
 }