+
+static void Resize ( Widget w, XtPointer closure, XEvent *event )
+{
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(closure);
+ const NPWindow& window = p_plugin->getWindow();
+ Window drawable = (Window) window.window;
+ Display *p_display = ((NPSetWindowCallbackStruct *)window.ws_info)->display;
+
+ int i_ret;
+ Window root_return, parent_return, * children_return;
+ Window base_window;
+ unsigned int i_nchildren;
+
+#ifdef X11_RESIZE_DEBUG
+ XWindowAttributes attr;
+
+ if( event && event->type == ConfigureNotify )
+ {
+ fprintf( stderr, "vlcshell::Resize() ConfigureNotify %d x %d, "
+ "send_event ? %s\n", event->xconfigure.width,
+ event->xconfigure.height,
+ event->xconfigure.send_event ? "TRUE" : "FALSE" );
+ }
+#endif /* X11_RESIZE_DEBUG */
+
+ if( ! p_plugin->setSize(window.width, window.height) )
+ {
+ /* size already set */
+ return;
+ }
+
+
+ i_ret = XResizeWindow( p_display, drawable, window.width, window.height );
+
+#ifdef X11_RESIZE_DEBUG
+ fprintf( stderr,
+ "vlcshell::Resize() XResizeWindow(owner) returned %d\n", i_ret );
+
+ XGetWindowAttributes ( p_display, drawable, &attr );
+
+ /* X is asynchronous, so the current size reported here is not
+ necessarily the requested size as the Resize request may not
+ yet have been handled by the plugin host */
+ fprintf( stderr, "vlcshell::Resize() current (owner) size %d x %d\n",
+ attr.width, attr.height );
+#endif /* X11_RESIZE_DEBUG */
+
+ XQueryTree( p_display, drawable,
+ &root_return, &parent_return, &children_return,
+ &i_nchildren );
+
+ if( i_nchildren > 0 )
+ {
+ /* XXX: Make assumptions related to the window parenting structure in
+ vlc/modules/video_output/x11/xcommon.c */
+ base_window = children_return[i_nchildren - 1];
+
+#ifdef X11_RESIZE_DEBUG
+ fprintf( stderr, "vlcshell::Resize() got %d children\n", i_nchildren );
+ fprintf( stderr, "vlcshell::Resize() got base_window %p\n",
+ base_window );
+#endif /* X11_RESIZE_DEBUG */
+
+ i_ret = XResizeWindow( p_display, base_window,
+ window.width, window.height );
+
+#ifdef X11_RESIZE_DEBUG
+ fprintf( stderr,
+ "vlcshell::Resize() XResizeWindow(base) returned %d\n",
+ i_ret );
+
+ XGetWindowAttributes( p_display, base_window, &attr );
+
+ fprintf( stderr, "vlcshell::Resize() new size %d x %d\n",
+ attr.width, attr.height );
+#endif /* X11_RESIZE_DEBUG */
+ }
+}
+
+#endif /* XP_UNIX */