Commit b0dd21df authored by Marian Durkovic's avatar Marian Durkovic

Fix skins2 Drag&Drop to accept files with non-ANSI CP characters.

parent 02899c2c
...@@ -76,6 +76,14 @@ static inline string sFromLocale( const string &rLocale ) ...@@ -76,6 +76,14 @@ static inline string sFromLocale( const string &rLocale )
return res; return res;
} }
/// Wrapper around FromWide, to avoid the need to call free()
static inline string sFromWide( const wstring &rWide )
{
char *s = FromWide( rWide.c_str() );
string res = s;
free( s );
return res;
}
/// Wrapper around ToLocale, to avoid the need to call LocaleFree() /// Wrapper around ToLocale, to avoid the need to call LocaleFree()
static inline string sToLocale( const string &rUTF8 ) static inline string sToLocale( const string &rUTF8 )
......
...@@ -146,23 +146,44 @@ STDMETHODIMP Win32DragDrop::Drop( LPDATAOBJECT pDataObj, DWORD grfKeyState, ...@@ -146,23 +146,44 @@ STDMETHODIMP Win32DragDrop::Drop( LPDATAOBJECT pDataObj, DWORD grfKeyState,
void Win32DragDrop::HandleDrop( HDROP HDrop ) void Win32DragDrop::HandleDrop( HDROP HDrop )
{ {
if( GetVersion() < 0x80000000 )
{
// Use Unicode for Windows NT and above
// Get the number of dropped files // Get the number of dropped files
int nbFiles = DragQueryFile( HDrop, 0xFFFFFFFF, NULL, 0 ); int nbFiles = DragQueryFileW( HDrop, 0xFFFFFFFF, NULL, 0 );
// For each dropped file // For each dropped file
for( int i = 0; i < nbFiles; i++ ) for( int i = 0; i < nbFiles; i++ )
{ {
// Get the name of the file // Get the name of the file
int nameLength = DragQueryFileW( HDrop, i, NULL, 0 ) + 1;
wchar_t *psz_fileName = new WCHAR[nameLength];
DragQueryFileW( HDrop, i, psz_fileName, nameLength );
// Add the file
CmdAddItem cmd(getIntf(),sFromWide(psz_fileName),m_playOnDrop);
cmd.execute();
delete[] psz_fileName;
}
}
else
{
int nbFiles = DragQueryFile( HDrop, 0xFFFFFFFF, NULL, 0 );
for( int i = 0; i < nbFiles; i++ )
{
int nameLength = DragQueryFile( HDrop, i, NULL, 0 ) + 1; int nameLength = DragQueryFile( HDrop, i, NULL, 0 ) + 1;
char *psz_fileName = new char[nameLength]; char *psz_fileName = new char[nameLength];
DragQueryFile( HDrop, i, psz_fileName, nameLength ); DragQueryFile( HDrop, i, psz_fileName, nameLength );
// Add the file CmdAddItem cmd(getIntf(),sFromLocale(psz_fileName),m_playOnDrop);
CmdAddItem cmd( getIntf(), sFromLocale( psz_fileName ), m_playOnDrop );
cmd.execute(); cmd.execute();
delete[] psz_fileName; delete[] psz_fileName;
} }
}
DragFinish( HDrop ); DragFinish( HDrop );
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment