X11 clipboard: support pasting of filenames
see http://pulkomandy.tk/projects/GrafX2/ticket/107
This commit is contained in:
parent
583d646b26
commit
123fa86936
@ -611,13 +611,13 @@ void Load_image(T_IO_Context *context)
|
|||||||
if (context->Format == FORMAT_CLIPBOARD)
|
if (context->Format == FORMAT_CLIPBOARD)
|
||||||
{
|
{
|
||||||
Load_ClipBoard_Image(context);
|
Load_ClipBoard_Image(context);
|
||||||
if (File_error != 0)
|
if (File_error != 0 && context->Format == FORMAT_CLIPBOARD)
|
||||||
{
|
{
|
||||||
Error(0);
|
Error(0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
if (context->Format != FORMAT_CLIPBOARD)
|
||||||
{
|
{
|
||||||
if (context->File_name == NULL || context->File_directory == NULL)
|
if (context->File_name == NULL || context->File_directory == NULL)
|
||||||
{
|
{
|
||||||
@ -1536,9 +1536,53 @@ static void Load_ClipBoard_Image(T_IO_Context * context)
|
|||||||
GFX2_Log(GFX2_WARNING, "Failed to load TIFF Clipboard\n");
|
GFX2_Log(GFX2_WARNING, "Failed to load TIFF Clipboard\n");
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
// TODO
|
|
||||||
case X11_CLIPBOARD_UTF8STRING:
|
case X11_CLIPBOARD_UTF8STRING:
|
||||||
case X11_CLIPBOARD_URILIST:
|
case X11_CLIPBOARD_URILIST:
|
||||||
|
{
|
||||||
|
char tmp_path[MAX_PATH_CHARACTERS];
|
||||||
|
char * p;
|
||||||
|
p = strchr(X11_clipboard, '\r');
|
||||||
|
if (p != NULL)
|
||||||
|
*p = '\0';
|
||||||
|
p = strchr(X11_clipboard, '\n');
|
||||||
|
if (p != NULL)
|
||||||
|
*p = '\0';
|
||||||
|
p = X11_clipboard;
|
||||||
|
if (strncmp(p, "file://", 7) == 0)
|
||||||
|
{
|
||||||
|
//int i
|
||||||
|
p += 7;
|
||||||
|
for (i = 0; *p; i++)
|
||||||
|
{
|
||||||
|
// URLdecode
|
||||||
|
if (p[0] == '%' && p[1] && p[2])
|
||||||
|
{
|
||||||
|
p++;
|
||||||
|
tmp_path[i] = ((*p >= 'A' && *p <= 'F') ? *p - 'A' + 10 : *p - '0') << 4;
|
||||||
|
p++;
|
||||||
|
tmp_path[i] += ((*p >= 'A' && *p <= 'F') ? *p - 'A' + 10 : *p - '0');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
tmp_path[i] = *p;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
tmp_path[i] = '\0';
|
||||||
|
p = tmp_path;
|
||||||
|
}
|
||||||
|
if (File_exists(p))
|
||||||
|
{
|
||||||
|
free(context->File_name);
|
||||||
|
context->File_name = Extract_filename(NULL, p);
|
||||||
|
free(context->File_directory);
|
||||||
|
context->File_directory = Extract_path(NULL, p);
|
||||||
|
context->Format = DEFAULT_FILEFORMAT;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GFX2_Log(GFX2_WARNING, "not a filename : \"%s\"\n", p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
GFX2_Log(GFX2_WARNING, "Unsupported Clipboard format %d\n", (int)X11_clipboard_type);
|
GFX2_Log(GFX2_WARNING, "Unsupported Clipboard format %d\n", (int)X11_clipboard_type);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user