Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/solaris/native/sun/xawt/awt_Desktop.c
32287 views
1
/*
2
* Copyright (c) 2005, 2018, 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
}
88
89