1 /* 2 * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 #include "jni_util.h" 27 #include "gtk_interface.h" 28 #include "gnome_interface.h" 29 30 static gboolean gtk_has_been_loaded = FALSE; 31 static gboolean gnome_has_been_loaded = FALSE; 32 33 /* 34 * Class: sun_awt_X11_XDesktopPeer 35 * Method: init 36 * Signature: ()Z 37 */ 38 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XDesktopPeer_init 39 (JNIEnv *env, jclass cls, jint version, jboolean verbose) 40 { 41 42 if (gtk_has_been_loaded || gnome_has_been_loaded) { 43 return JNI_TRUE; 44 } 45 46 if (gtk_load(env, version, verbose) && gtk->show_uri_load(env)) { 47 gtk_has_been_loaded = TRUE; 48 return JNI_TRUE; 49 } else if (gnome_load()) { 50 gnome_has_been_loaded = TRUE; 51 return JNI_TRUE; 52 } 53 54 return JNI_FALSE; 55 } 56 57 /* 58 * Class: sun_awt_X11_XDesktopPeer 59 * Method: gnome_url_show 60 * Signature: (Ljava/lang/[B;)Z 61 */ 62 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XDesktopPeer_gnome_1url_1show 63 (JNIEnv *env, jobject obj, jbyteArray url_j) 64 { 65 gboolean success = FALSE; 66 const gchar* url_c; 67 68 url_c = (char*)(*env)->GetByteArrayElements(env, url_j, NULL); 69 if (url_c == NULL) { 70 if (!(*env)->ExceptionCheck(env)) { 71 JNU_ThrowOutOfMemoryError(env, 0); 72 } 73 return JNI_FALSE; 74 } 75 76 if (gtk_has_been_loaded) { 77 gtk->gdk_threads_enter(); 78 success = gtk->gtk_show_uri(NULL, url_c, GDK_CURRENT_TIME, NULL); 79 gtk->gdk_threads_leave(); 80 } else if (gnome_has_been_loaded) { 81 success = (*gnome_url_show)(url_c, NULL); 82 } 83 84 (*env)->ReleaseByteArrayElements(env, url_j, (signed char*)url_c, 0); 85 86 return success ? JNI_TRUE : JNI_FALSE; 87 }