Fix dragging of files with CJK characters in name

I submitted a patch several months ago about this issue,
here http://lists.freedesktop.org/archives/spice-devel/2014-February/016158.html
I check it again, and find that the value of
g_key_file_to_data(keyfile,...) is always utf-8, for the value of
g_uri_list_extract_uris() is utf8 urlencode.

So the display problem is caused by vd_agent, but how it displays
depends on the language of system, the following two screenshots show
the difference:

http://int64ago-tmp.qiniudn.com/guest-Chinese.png
http://int64ago-tmp.qiniudn.com/guest-English.png
This commit is contained in:
Cody Chan 2014-08-13 23:02:19 +08:00 committed by Christophe Fergeau
parent 6d1c038a8c
commit 21b79679c1

View File

@ -46,6 +46,7 @@ void FileXfer::handle_start(VDAgentFileXferStartMessage* start,
uint64_t file_size;
HANDLE handle;
AsUser as_user;
int wlen;
status->id = start->id;
status->result = VD_AGENT_FILE_XFER_STATUS_ERROR;
@ -81,7 +82,18 @@ void FileXfer::handle_start(VDAgentFileXferStartMessage* start,
strcat(file_path, "\\");
strcat(file_path, file_name);
handle = CreateFileA(file_path, GENERIC_WRITE, 0, NULL, CREATE_NEW, 0, NULL);
if((wlen = MultiByteToWideChar(CP_UTF8, 0, file_path, -1, NULL, 0)) == 0){
vd_printf("failed getting WideChar length of %s", file_path);
return;
}
TCHAR *wfile_path = new TCHAR[wlen];
if (MultiByteToWideChar(CP_UTF8, 0, file_path, -1, wfile_path, wlen) == 0){
vd_printf("failed converting file_path:%s to WindChar", file_path);
delete[] wfile_path;
return;
}
handle = CreateFile(wfile_path, GENERIC_WRITE, 0, NULL, CREATE_NEW, 0, NULL);
delete[] wfile_path;
if (handle == INVALID_HANDLE_VALUE) {
vd_printf("failed creating %s %lu", file_path, GetLastError());
return;