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)
 | 
			
		||||
  {
 | 
			
		||||
    Load_ClipBoard_Image(context);
 | 
			
		||||
    if (File_error != 0)
 | 
			
		||||
    if (File_error != 0 && context->Format == FORMAT_CLIPBOARD)
 | 
			
		||||
    {
 | 
			
		||||
      Error(0);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  if (context->Format != FORMAT_CLIPBOARD)
 | 
			
		||||
  {
 | 
			
		||||
    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");
 | 
			
		||||
      break;
 | 
			
		||||
#endif
 | 
			
		||||
    // TODO
 | 
			
		||||
    case X11_CLIPBOARD_UTF8STRING:
 | 
			
		||||
    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:
 | 
			
		||||
      GFX2_Log(GFX2_WARNING, "Unsupported Clipboard format %d\n", (int)X11_clipboard_type);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user