- gchar *uris[2];
- NSURL *url = [NSURL URLFromPasteboard:pasteboard];
-
- selection_data->target = gdk_atom_intern_static_string ("text/uri-list");
-
- uris[0] = [[url description] UTF8String];
- uris[1] = NULL;
- gtk_selection_data_set_uris (selection_data, uris);
+ if ([[pasteboard types] containsObject:NSFilenamesPboardType])
+ {
+ gchar **uris;
+ NSArray *files = [pasteboard propertyListForType:NSFilenamesPboardType];
+ int n_files = [files count];
+ int i;
+
+ selection_data->target = gdk_atom_intern_static_string ("text/uri-list");
+
+ uris = (gchar **) g_malloc (sizeof (gchar*) * (n_files + 1));
+ for (i = 0; i < n_files; ++i)
+ {
+ NSString* uriString = [files objectAtIndex:i];
+ uriString = [@"file://" stringByAppendingString:uriString];
+ uriString = [uriString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
+ uris[i] = (gchar *) [uriString cStringUsingEncoding:NSUTF8StringEncoding];
+ }
+ uris[i] = NULL;
+
+ gtk_selection_data_set_uris (selection_data, uris);
+ g_free (uris);
+ }
+ else if ([[pasteboard types] containsObject:NSURLPboardType])
+ {
+ gchar *uris[2];
+ NSURL *url = [NSURL URLFromPasteboard:pasteboard];
+
+ selection_data->target = gdk_atom_intern_static_string ("text/uri-list");
+
+ uris[0] = (gchar *) [[url description] UTF8String];
+
+ uris[1] = NULL;
+ gtk_selection_data_set_uris (selection_data, uris);
+ }