gboolean e_composer_paste_uris (EMsgComposer *composer, GtkClipboard *clipboard) { EAttachmentStore *store; EAttachmentView *view; gchar **uris; gint ii; g_return_val_if_fail (E_IS_MSG_COMPOSER (composer), FALSE); g_return_val_if_fail (GTK_IS_CLIPBOARD (clipboard), FALSE); view = e_msg_composer_get_attachment_view (composer); store = e_attachment_view_get_store (view); /* Extract the URI data from the clipboard. */ uris = gtk_clipboard_wait_for_uris (clipboard); g_return_val_if_fail (uris != NULL, FALSE); /* Add the URIs to the attachment store. */ for (ii = 0; uris[ii] != NULL; ii++) { EAttachment *attachment; attachment = e_attachment_new_for_uri (uris[ii]); e_attachment_store_add_attachment (store, attachment); e_attachment_load_async ( attachment, (GAsyncReadyCallback) e_attachment_load_handle_error, composer); g_object_unref (attachment); } return TRUE; }
/* * Class: com_sun_glass_ui_gtk_GtkSystemClipboard * Method: mimesFromSystem * Signature: ()[Ljava/lang/String; */ JNIEXPORT jobjectArray JNICALL Java_com_sun_glass_ui_gtk_GtkSystemClipboard_mimesFromSystem (JNIEnv * env, jobject obj) { GdkAtom *targets; gint ntargets; gint i; GdkAtom *convertible; GdkAtom *convertible_ptr; gchar *name; jobjectArray result; jstring tmpString; init_atoms(); gtk_clipboard_wait_for_targets(get_clipboard(), &targets, &ntargets); convertible = (GdkAtom*) glass_try_malloc0_n(ntargets * 2, sizeof(GdkAtom)); //theoretically, the number can double if (!convertible) { if (ntargets > 0) { glass_throw_oom(env, "Failed to allocate mimes"); } g_free(targets); return NULL; } convertible_ptr = convertible; bool uri_list_added = false; bool text_added = false; bool image_added = false; for (i = 0; i < ntargets; ++i) { //handle text targets //if (targets[i] == TEXT_TARGET || targets[i] == STRING_TARGET || targets[i] == UTF8_STRING_TARGET) { if (gtk_targets_include_text(targets + i, 1) && !text_added) { *(convertible_ptr++) = MIME_TEXT_PLAIN_TARGET; text_added = true; } else if (gtk_targets_include_image(targets + i, 1, TRUE) && !image_added) { *(convertible_ptr++) = MIME_JAVA_IMAGE; image_added = true; } //TODO text/x-moz-url ? RT-17802 if (targets[i] == MIME_TEXT_URI_LIST_TARGET) { if (uri_list_added) { continue; } gchar** uris = gtk_clipboard_wait_for_uris(get_clipboard()); if (uris) { guint size = g_strv_length(uris); guint files_cnt = get_files_count(uris); if (files_cnt) { *(convertible_ptr++) = MIME_FILES_TARGET; } if (size - files_cnt) { *(convertible_ptr++) = MIME_TEXT_URI_LIST_TARGET; } g_strfreev(uris); } uri_list_added = true; } else { *(convertible_ptr++) = targets[i]; } } result = env->NewObjectArray(convertible_ptr - convertible, jStringCls, NULL); for (i = 0; convertible + i < convertible_ptr; ++i) { name = gdk_atom_name(convertible[i]); tmpString = env->NewStringUTF(name); env->SetObjectArrayElement(result, (jsize)i, tmpString); g_free(name); } g_free(targets); g_free(convertible); return result; }
static jobject get_data_uri_list(JNIEnv *env, gboolean files) { return uris_to_java(env, gtk_clipboard_wait_for_uris(get_clipboard()), files); }