X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=mozilla%2Fvlcshell.cpp;h=8079bad574b88e390662a1806f6b1c5481f888c2;hb=07391315eb5d77e02a3b0569f52c2d45fb22973d;hp=d810be118ff8989c2ea3027fbe5f39227f98da9b;hpb=62ef1556404c5ff3464186e62e3f1aaccb768a8c;p=vlc diff --git a/mozilla/vlcshell.cpp b/mozilla/vlcshell.cpp index d810be118f..8079bad574 100644 --- a/mozilla/vlcshell.cpp +++ b/mozilla/vlcshell.cpp @@ -1,8 +1,8 @@ /***************************************************************************** * vlcshell.cpp: a VLC plugin for Mozilla ***************************************************************************** - * Copyright (C) 2002 VideoLAN - * $Id: vlcshell.cpp,v 1.11 2003/04/09 16:18:36 sam Exp $ + * Copyright (C) 2002-2005 the VideoLAN team + * $Id$ * * Authors: Samuel Hocevar * @@ -21,22 +21,51 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *****************************************************************************/ +/* XXX: disable VLC here */ +#define USE_LIBVLC 1 + /***************************************************************************** * Preamble *****************************************************************************/ +#include "config.h" + #include #include +#include /* vlc stuff */ -#include +#ifdef USE_LIBVLC +# include +#endif /* Mozilla stuff */ +#ifdef HAVE_MOZILLA_CONFIG_H +# include +#endif +#include +#include #include +/* This is from mozilla java, do we really need it? */ +#if 0 +#include +#endif + +#if !defined(XP_MACOSX) && !defined(XP_UNIX) && !defined(XP_WIN) +#define XP_UNIX 1 +#elif defined(XP_MACOSX) +#undef XP_UNIX +#endif + #ifdef XP_WIN /* Windows stuff */ #endif +#ifdef XP_MACOSX + /* Mac OS X stuff */ +# include +#endif + #ifdef XP_UNIX /* X11 stuff */ # include @@ -47,54 +76,49 @@ #include "vlcpeer.h" #include "vlcplugin.h" -/* XXX: disable VLC */ -#define USE_LIBVLC 1 - #if USE_LIBVLC # define WINDOW_TEXT "(no picture)" #else # define WINDOW_TEXT "(no libvlc)" #endif +/* Enable/disable debugging printf's for X11 resizing */ +#undef X11_RESIZE_DEBUG + /***************************************************************************** * Unix-only declarations ******************************************************************************/ #ifdef XP_UNIX # define VOUT_PLUGINS "xvideo,x11,dummy" -# define AOUT_PLUGINS "oss,dummy" +# define AOUT_PLUGINS "alsa,oss,dummy" + +static unsigned int i_previous_height = 100000; +static unsigned int i_previous_width = 100000; static void Redraw( Widget w, XtPointer closure, XEvent *event ); +static void Resize( Widget w, XtPointer closure, XEvent *event ); +#endif + +/***************************************************************************** + * MacOS-only declarations +******************************************************************************/ +#ifdef XP_MACOSX +# define VOUT_PLUGINS "macosx" +# define AOUT_PLUGINS "macosx" + #endif /***************************************************************************** * Windows-only declarations *****************************************************************************/ #ifdef XP_WIN -# define VOUT_PLUGINS "directx,dummy" -# define AOUT_PLUGINS "none" /* "directx,waveout,dummy" */ - -HINSTANCE g_hDllInstance = NULL; - -BOOL WINAPI -DllMain( HINSTANCE hinstDLL, // handle of DLL module - DWORD fdwReason, // reason for calling function - LPVOID lpvReserved) -{ - switch (fdwReason) - { - case DLL_PROCESS_ATTACH: - g_hDllInstance = hinstDLL; - break; - case DLL_THREAD_ATTACH: - case DLL_PROCESS_DETACH: - case DLL_THREAD_DETACH: - break; - } - return TRUE; -} +# define VOUT_PLUGINS "directx,wingdi,dummy" +# define AOUT_PLUGINS "directx,waveout,dummy" +#if defined(XP_WIN) && !USE_LIBVLC LRESULT CALLBACK Manage( HWND, UINT, WPARAM, LPARAM ); #endif +#endif /****************************************************************************** * UNIX-only API calls @@ -106,6 +130,7 @@ char * NPP_GetMIMEDescription( void ) NPError NPP_GetValue( NPP instance, NPPVariable variable, void *value ) { + static nsIID nsid = VLCINTF_IID; static char psz_desc[1000]; @@ -118,9 +143,9 @@ NPError NPP_GetValue( NPP instance, NPPVariable variable, void *value ) case NPPVpluginDescriptionString: #if USE_LIBVLC snprintf( psz_desc, 1000-1, PLUGIN_DESCRIPTION, VLC_Version() ); -#else +#else /* USE_LIBVLC */ snprintf( psz_desc, 1000-1, PLUGIN_DESCRIPTION, "(disabled)" ); -#endif +#endif /* USE_LIBVLC */ psz_desc[1000-1] = 0; *((char **)value) = psz_desc; return NPERR_NO_ERROR; @@ -163,6 +188,35 @@ NPError NPP_GetValue( NPP instance, NPPVariable variable, void *value ) return NPERR_NO_ERROR; } +/****************************************************************************** + * Mac-only API calls + *****************************************************************************/ +#ifdef XP_MACOSX +int16 NPP_HandleEvent( NPP instance, void * event ) +{ + VlcPlugin *p_plugin = (VlcPlugin*)instance->pdata; + vlc_value_t value; + + if( instance == NULL ) + { + return false; + } + + EventRecord *pouetEvent = (EventRecord*)event; + + if (pouetEvent->what == 6) + { + value.i_int = 1; + VLC_VariableSet( p_plugin->i_vlc, "drawableredraw", value ); + return true; + } + + Boolean eventHandled = false; + + return eventHandled; +} +#endif /* XP_MACOSX */ + /****************************************************************************** * General Plug-in Calls *****************************************************************************/ @@ -185,16 +239,12 @@ NPError NPP_New( NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char* argn[], char* argv[], NPSavedData* saved ) { int i; + #if USE_LIBVLC vlc_value_t value; int i_ret; - char *ppsz_foo[] = - { - "vlc" - /*, "--plugin-path", "/home/sam/videolan/vlc_MAIN/plugins"*/ - }; -#endif +#endif /* USE_LIBVLC */ if( instance == NULL ) { @@ -213,12 +263,12 @@ NPError NPP_New( NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, #ifdef XP_WIN p_plugin->p_hwnd = NULL; p_plugin->pf_wndproc = NULL; -#endif +#endif /* XP_WIN */ #ifdef XP_UNIX p_plugin->window = 0; p_plugin->p_display = NULL; -#endif +#endif /* XP_UNIX */ p_plugin->p_npwin = NULL; p_plugin->i_npmode = mode; @@ -235,7 +285,78 @@ NPError NPP_New( NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, return NPERR_GENERIC_ERROR; } - i_ret = VLC_Init( p_plugin->i_vlc, sizeof(ppsz_foo)/sizeof(char*), ppsz_foo ); + { +#ifdef XP_MACOSX + char *home_user; + char *directory; + char *plugin_path; + char *ppsz_argv[] = { "vlc", "--plugin-path", NULL }; + + home_user = strdup( getenv("HOME") ); + directory = strdup( "/Library/Internet Plug-Ins/VLC Plugin.plugin/" + "Contents/MacOS/modules" ); + plugin_path = malloc( strlen( directory ) + strlen( home_user ) ); + memcpy( plugin_path , home_user , strlen(home_user) ); + memcpy( plugin_path + strlen( home_user ) , directory , + strlen( directory ) ); + + ppsz_argv[2] = plugin_path; + +#elif defined(XP_WIN) + char *ppsz_argv[] = { NULL, "-vv" }; + HKEY h_key; + DWORD i_type, i_data = MAX_PATH + 1; + char p_data[MAX_PATH + 1]; + if( RegOpenKeyEx( HKEY_LOCAL_MACHINE, "Software\\VideoLAN\\VLC", + 0, KEY_READ, &h_key ) == ERROR_SUCCESS ) + { + if( RegQueryValueEx( h_key, "InstallDir", 0, &i_type, + (LPBYTE)p_data, &i_data ) == ERROR_SUCCESS ) + { + if( i_type == REG_SZ ) + { + strcat( p_data, "\\vlc" ); + ppsz_argv[0] = p_data; + } + } + RegCloseKey( h_key ); + } + + if( !ppsz_argv[0] ) ppsz_argv[0] = "vlc"; + +#else /* XP_MACOSX */ + char *ppsz_argv[] = + { + "vlc" + /*, "--plugin-path", "/home/sam/videolan/vlc_MAIN/plugins"*/ + }; + +#endif /* XP_MACOSX */ + + /* HACK: special case for loop, to have it set before playlist startup + */ + for( i = 0; i < argc ; i++ ) + { + if( !strcmp( argn[i], "loop" ) ) + { + if( !strcmp( argv[i], "1" ) || !strcmp( argv[i], "yes" ) ) + { + value.b_bool = VLC_TRUE; + VLC_VariableSet( p_plugin->i_vlc, "conf::loop", value ); + } + } + } + + i_ret = VLC_Init( p_plugin->i_vlc, sizeof(ppsz_argv)/sizeof(char*), + ppsz_argv ); + +#ifdef XP_MACOSX + free( home_user ); + free( directory ); + free( plugin_path ); +#endif /* XP_MACOSX */ + } + if( i_ret ) { VLC_Destroy( p_plugin->i_vlc ); @@ -246,13 +367,13 @@ NPError NPP_New( NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, } value.psz_string = "dummy"; - VLC_Set( p_plugin->i_vlc, "conf::intf", value ); + VLC_VariableSet( p_plugin->i_vlc, "conf::intf", value ); value.psz_string = VOUT_PLUGINS; - VLC_Set( p_plugin->i_vlc, "conf::vout", value ); + VLC_VariableSet( p_plugin->i_vlc, "conf::vout", value ); value.psz_string = AOUT_PLUGINS; - VLC_Set( p_plugin->i_vlc, "conf::aout", value ); + VLC_VariableSet( p_plugin->i_vlc, "conf::aout", value ); -#else +#else /* USE_LIBVLC */ p_plugin->i_vlc = 1; #endif /* USE_LIBVLC */ @@ -269,7 +390,7 @@ NPError NPP_New( NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, } else if( !strcmp( argn[i], "autoplay" ) ) { - if( !strcmp( argv[i], "yes" ) ) + if( !strcmp( argv[i], "1" ) || !strcmp( argv[i], "yes" ) ) { p_plugin->b_autoplay = 1; } @@ -291,15 +412,22 @@ NPError NPP_New( NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, } #if USE_LIBVLC - else if( !strcmp( argn[i], "loop" ) ) + else if( !strcmp( argn[i], "fullscreen" ) ) { - if( !strcmp( argv[i], "yes" ) ) + if( !strcmp( argv[i], "1" ) || !strcmp( argv[i], "yes" ) ) { value.b_bool = VLC_TRUE; - VLC_Set( p_plugin->i_vlc, "conf::loop", value ); + VLC_VariableSet( p_plugin->i_vlc, "conf::fullscreen", value ); } } -#endif + else if( !strcmp( argn[i], "mute" ) ) + { + if( !strcmp( argv[i], "1" ) || !strcmp( argv[i], "yes" ) ) + { + VLC_VolumeMute( p_plugin->i_vlc ); + } + } +#endif /* USE_LIBVLC */ } if( p_plugin->psz_target ) @@ -310,6 +438,36 @@ NPError NPP_New( NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, return NPERR_NO_ERROR; } +#ifdef XP_WIN +/* This is really ugly but there is a deadlock when stopping a stream + * (in VLC_CleanUp()) because the video output is a child of the drawable but + * is in a different thread. */ +static void HackStopVout( VlcPlugin* p_plugin ) +{ + MSG msg; + HWND hwnd; + vlc_value_t value; + + VLC_VariableGet( p_plugin->i_vlc, "drawable", &value ); + + hwnd = FindWindowEx( (HWND)value.i_int, 0, 0, 0 ); + if( !hwnd ) return; + + PostMessage( hwnd, WM_CLOSE, 0, 0 ); + + do + { + while( PeekMessage( &msg, (HWND)value.i_int, 0, 0, PM_REMOVE ) ) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + if( FindWindowEx( (HWND)value.i_int, 0, 0, 0 ) ) Sleep( 10 ); + } + while( (hwnd = FindWindowEx( (HWND)value.i_int, 0, 0, 0 )) ); +} +#endif /* XP_WIN */ + NPError NPP_Destroy( NPP instance, NPSavedData** save ) { if( instance == NULL ) @@ -324,9 +482,12 @@ NPError NPP_Destroy( NPP instance, NPSavedData** save ) if( p_plugin->i_vlc ) { #if USE_LIBVLC - VLC_Stop( p_plugin->i_vlc ); +# ifdef XP_WIN + HackStopVout( p_plugin ); +# endif /* XP_WIN */ + VLC_CleanUp( p_plugin->i_vlc ); VLC_Destroy( p_plugin->i_vlc ); -#endif +#endif /* USE_LIBVLC */ p_plugin->i_vlc = 0; } @@ -346,6 +507,22 @@ NPError NPP_Destroy( NPP instance, NPSavedData** save ) NPError NPP_SetWindow( NPP instance, NPWindow* window ) { + vlc_value_t value; +#ifdef XP_MACOSX + vlc_value_t valuex; + vlc_value_t valuey; + vlc_value_t valuew; + vlc_value_t valueh; + vlc_value_t valuet; + vlc_value_t valuel; + vlc_value_t valueb; + vlc_value_t valuer; + vlc_value_t valueportx; + vlc_value_t valueporty; + Rect black_rect; + char * text; +#endif /* XP_MACOSX */ + if( instance == NULL ) { return NPERR_INVALID_INSTANCE_ERROR; @@ -355,12 +532,62 @@ NPError NPP_SetWindow( NPP instance, NPWindow* window ) /* Write the window ID for vlc */ #if USE_LIBVLC - vlc_value_t value; +#ifdef XP_MACOSX + value.i_int = ((NP_Port*) (window->window))->port; + VLC_VariableSet( p_plugin->i_vlc, "drawable", value ); + + valueportx.i_int = ((NP_Port*) (window->window))->portx; + valueporty.i_int = ((NP_Port*) (window->window))->porty; + VLC_VariableSet( p_plugin->i_vlc, "drawableportx", valueportx ); + VLC_VariableSet( p_plugin->i_vlc, "drawableporty", valueporty ); + + valuex.i_int = window->x; + valuey.i_int = window->y; + valuew.i_int = window->width; + valueh.i_int = window->height; + valuet.i_int = window->clipRect.top; + valuel.i_int = window->clipRect.left; + valueb.i_int = window->clipRect.bottom; + valuer.i_int = window->clipRect.right; + + VLC_VariableSet( p_plugin->i_vlc, "drawablet", valuet ); + VLC_VariableSet( p_plugin->i_vlc, "drawablel", valuel ); + VLC_VariableSet( p_plugin->i_vlc, "drawableb", valueb ); + VLC_VariableSet( p_plugin->i_vlc, "drawabler", valuer ); + VLC_VariableSet( p_plugin->i_vlc, "drawablex", valuex ); + VLC_VariableSet( p_plugin->i_vlc, "drawabley", valuey ); + VLC_VariableSet( p_plugin->i_vlc, "drawablew", valuew ); + VLC_VariableSet( p_plugin->i_vlc, "drawableh", valueh ); + + p_plugin->window = window; + + /* draw the beautiful "No Picture" */ + + black_rect.top = valuet.i_int - valuey.i_int; + black_rect.left = valuel.i_int - valuex.i_int; + black_rect.bottom = valueb.i_int - valuey.i_int; + black_rect.right = valuer.i_int - valuex.i_int; + + SetPort( value.i_int ); + SetOrigin( valueportx.i_int , valueporty.i_int ); + ForeColor(blackColor); + PenMode( patCopy ); + PaintRect( &black_rect ); + + ForeColor(whiteColor); + text = strdup( WINDOW_TEXT ); + MoveTo( valuew.i_int / 2 - 40 , valueh.i_int / 2 ); + DrawText( text , 0 , strlen(text) ); + free(text); + +#else /* XP_MACOSX */ /* FIXME: this cast sucks */ value.i_int = (int) (ptrdiff_t) (void *) window->window; - VLC_Set( p_plugin->i_vlc, "drawable", value ); -#endif + VLC_VariableSet( p_plugin->i_vlc, "drawable", value ); +#endif /* XP_MACOSX */ + +#endif /* USE_LIBVLC */ /* * PLUGIN DEVELOPERS: @@ -376,8 +603,10 @@ NPError NPP_SetWindow( NPP instance, NPWindow* window ) /* Window was destroyed. Invalidate everything. */ if( p_plugin->p_npwin ) { +#if !USE_LIBVLC SetWindowLong( p_plugin->p_hwnd, GWL_WNDPROC, (LONG)p_plugin->pf_wndproc ); +#endif /* !USE_LIBVLC */ p_plugin->pf_wndproc = NULL; p_plugin->p_hwnd = NULL; } @@ -392,44 +621,56 @@ NPError NPP_SetWindow( NPP instance, NPWindow* window ) { /* Same window, but something may have changed. First we * update the plugin structure, then we redraw the window */ - InvalidateRect( p_plugin->p_hwnd, NULL, TRUE ); p_plugin->i_width = window->width; p_plugin->i_height = window->height; p_plugin->p_npwin = window; +#if !USE_LIBVLC + InvalidateRect( p_plugin->p_hwnd, NULL, TRUE ); UpdateWindow( p_plugin->p_hwnd ); +#endif /* !USE_LIBVLC */ return NPERR_NO_ERROR; } /* Window has changed. Destroy the one we have, and go * on as if it was a real initialization. */ +#if !USE_LIBVLC SetWindowLong( p_plugin->p_hwnd, GWL_WNDPROC, (LONG)p_plugin->pf_wndproc ); +#endif /* !USE_LIBVLC */ p_plugin->pf_wndproc = NULL; p_plugin->p_hwnd = NULL; } +#if !USE_LIBVLC p_plugin->pf_wndproc = (WNDPROC)SetWindowLong( (HWND)window->window, GWL_WNDPROC, (LONG)Manage ); +#endif /* !USE_LIBVLC */ + p_plugin->p_hwnd = (HWND)window->window; SetProp( p_plugin->p_hwnd, "w00t", (HANDLE)p_plugin ); InvalidateRect( p_plugin->p_hwnd, NULL, TRUE ); UpdateWindow( p_plugin->p_hwnd ); -#endif +#endif /* XP_WIN */ + + p_plugin->i_width = window->width; + p_plugin->i_height = window->height; + p_plugin->p_npwin = window; #ifdef XP_UNIX p_plugin->window = (Window) window->window; - p_plugin->p_display = ((NPSetWindowCallbackStruct *)window->ws_info)->display; + p_plugin->p_display = + ((NPSetWindowCallbackStruct *)window->ws_info)->display; + XResizeWindow( p_plugin->p_display, p_plugin->window, + p_plugin->i_width, p_plugin->i_height ); Widget w = XtWindowToWidget( p_plugin->p_display, p_plugin->window ); + XtAddEventHandler( w, ExposureMask, FALSE, (XtEventHandler)Redraw, p_plugin ); + XtAddEventHandler( w, StructureNotifyMask, FALSE, + (XtEventHandler)Resize, p_plugin ); Redraw( w, (XtPointer)p_plugin, NULL ); -#endif - - p_plugin->p_npwin = window; - - p_plugin->i_width = window->width; - p_plugin->i_height = window->height; +#endif /* XP_UNIX */ if( !p_plugin->b_stream ) { @@ -444,7 +685,7 @@ NPError NPP_SetWindow( NPP instance, NPWindow* window ) { #if USE_LIBVLC VLC_AddTarget( p_plugin->i_vlc, p_plugin->psz_target, - i_mode, PLAYLIST_END ); + 0, 0, PLAYLIST_INSERT, 0 ); #endif p_plugin->b_stream = VLC_TRUE; } @@ -544,9 +785,9 @@ void NPP_StreamAsFile( NPP instance, NPStream *stream, const char* fname ) #if USE_LIBVLC VlcPlugin* p_plugin = (VlcPlugin*)instance->pdata; - VLC_AddTarget( p_plugin->i_vlc, fname, + VLC_AddTarget( p_plugin->i_vlc, fname, 0, 0, PLAYLIST_APPEND | PLAYLIST_GO, PLAYLIST_END ); -#endif +#endif /* USE_LIBVLC */ } @@ -631,14 +872,13 @@ void NPP_Print( NPP instance, NPPrint* printInfo ) /****************************************************************************** * Windows-only methods *****************************************************************************/ -#ifdef XP_WIN +#if defined(XP_WIN) && !USE_LIBVLC LRESULT CALLBACK Manage( HWND p_hwnd, UINT i_msg, WPARAM wpar, LPARAM lpar ) { VlcPlugin* p_plugin = (VlcPlugin*) GetProp( p_hwnd, "w00t" ); switch( i_msg ) { -#if !USE_LIBVLC case WM_PAINT: { PAINTSTRUCT paintstruct; @@ -655,14 +895,13 @@ LRESULT CALLBACK Manage( HWND p_hwnd, UINT i_msg, WPARAM wpar, LPARAM lpar ) EndPaint( p_hwnd, &paintstruct ); break; } -#endif default: p_plugin->pf_wndproc( p_hwnd, i_msg, wpar, lpar ); break; } return 0; } -#endif +#endif /* XP_WIN */ /****************************************************************************** * UNIX-only methods @@ -689,5 +928,83 @@ static void Redraw( Widget w, XtPointer closure, XEvent *event ) XFreeGC( p_plugin->p_display, gc ); } -#endif + +static void Resize ( Widget w, XtPointer closure, XEvent *event ) +{ + VlcPlugin* p_plugin = (VlcPlugin*)closure; + 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->i_height == i_previous_height && + p_plugin->i_width == i_previous_width ) + { + return; + } + i_previous_height = p_plugin->i_height; + i_previous_width = p_plugin->i_width; + + + i_ret = XResizeWindow( p_plugin->p_display, p_plugin->window, + p_plugin->i_width, p_plugin->i_height ); + +#ifdef X11_RESIZE_DEBUG + fprintf( stderr, + "vlcshell::Resize() XResizeWindow(owner) returned %d\n", i_ret ); + + XGetWindowAttributes ( p_plugin->p_display, p_plugin->window, &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_plugin->p_display, p_plugin->window, + &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_plugin->p_display, base_window, + p_plugin->i_width, p_plugin->i_height ); + +#ifdef X11_RESIZE_DEBUG + fprintf( stderr, + "vlcshell::Resize() XResizeWindow(base) returned %d\n", + i_ret ); + + XGetWindowAttributes( p_plugin->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 */