Fix wx DnD once more.
authorAntoine Cellerier <dionoea@videolan.org>
Tue, 7 Mar 2006 18:48:35 +0000 (18:48 +0000)
committerAntoine Cellerier <dionoea@videolan.org>
Tue, 7 Mar 2006 18:48:35 +0000 (18:48 +0000)
modules/gui/wxwidgets/dialogs/playlist.cpp
modules/gui/wxwidgets/interface.cpp
modules/gui/wxwidgets/wxwidgets.hpp

index c4102e8..612c3e7 100644 (file)
@@ -1292,12 +1292,13 @@ bool PlaylistFileDropTarget::OnDropFiles( wxCoord x, wxCoord y,
     /* Put the items in the playlist node */
     for( size_t i = 0; i < filenames.GetCount(); i++ )
     {
-        const char *psz_utf8 = wxDnDFromLocale( filenames[i] );
+        char *psz_local = NULL;
+        const char *psz_utf8 = wxDnDFromLocale( filenames[i], psz_local );
         playlist_item_t *p_item =
             playlist_ItemNew( p->p_playlist, psz_utf8, psz_utf8 );
         playlist_NodeAddItem( p->p_playlist, p_item, p->i_current_view,
                               p_dest, PLAYLIST_PREPARSE, i_pos );
-        wxDnDLocaleFree( psz_utf8 );
+        wxDnDLocaleFree( psz_utf8, psz_local );
     }
 
     /* FIXME: having this Rebuild() is dirty */
index 712a831..1f43383 100644 (file)
@@ -1261,13 +1261,14 @@ bool DragAndDrop::OnDropFiles( wxCoord, wxCoord,
 
     for( size_t i = 0; i < filenames.GetCount(); i++ )
     {
-        const char *psz_utf8 = wxDnDFromLocale( filenames[i] );
+        char *psz_local = NULL;
+        const char *psz_utf8 = wxDnDFromLocale( filenames[i], psz_local );
 
         playlist_Add( p_playlist, psz_utf8, psz_utf8,
                       PLAYLIST_APPEND | ((i | b_enqueue) ? 0 : PLAYLIST_GO),
                       PLAYLIST_END );
 
-        wxDnDLocaleFree( psz_utf8 );
+        wxDnDLocaleFree( psz_utf8, psz_local );
     }
 
     vlc_object_release( p_playlist );
index 5bed810..d35e644 100644 (file)
@@ -98,7 +98,7 @@ DECLARE_LOCAL_EVENT_TYPE( wxEVT_INTF, 1 );
 
 /* From Locale functions to use for File Drop targets ... go figure */
 #ifdef wxUSE_UNICODE
-inline const char *wxDnDFromLocale( const wxChar *stupid )
+inline const char *wxDnDFromLocale( const wxChar *stupid, char *psz_local )
 {
     /*
      * FIXME: this is yet another awful and ugly bug-to-bug work-around
@@ -120,19 +120,22 @@ inline const char *wxDnDFromLocale( const wxChar *stupid )
     for (braindead = stupid; *braindead; braindead++);
 
     size_t i = (braindead - stupid);
-    char *psz_local = (char *)malloc( i + 1 );
+    psz_local = (char *)malloc( i + 1 );
     do
         psz_local[i] = (char)stupid[i];
     while (i--);
 
     const char *psz_utf8 = FromLocale( psz_local );
-    free( psz_local );
     return psz_utf8;
 }
 #else
-#   define wxDnDFromLocale( string ) wxFromLocale( string )
+#   define wxDnDFromLocale( string, a ) wxFromLocale( string )
+#endif
+#ifdef wxUSE_UNICODE
+#   define wxDnDLocaleFree( string, a ) LocaleFree( string ); free( a )
+#else
+#   define wxDnDLocaleFree( string, a ) wxLocaleFree( string )
 #endif
-#define wxDnDLocaleFree(string) LocaleFree( string )
 
 #define WRAPCOUNT 80