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 )
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()
static inline string sToLocale( const string &rUTF8 )
......
......@@ -146,23 +146,44 @@ STDMETHODIMP Win32DragDrop::Drop( LPDATAOBJECT pDataObj, DWORD grfKeyState,
void Win32DragDrop::HandleDrop( HDROP HDrop )
{
if( GetVersion() < 0x80000000 )
{
// Use Unicode for Windows NT and above
// 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( int i = 0; i < nbFiles; i++ )
{
// 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;
char *psz_fileName = new char[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();
delete[] psz_fileName;
}
}
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