More xawt stubs; fix compile

This commit is contained in:
khanhduytran0 2020-10-05 18:09:11 +07:00
parent 0616a88385
commit f5cae1f3b2
4 changed files with 370 additions and 2 deletions

View File

@ -32,6 +32,8 @@ LOCAL_SRC_FILES := \
awt_InputMethod.c \
awt_Insets.c \
awt_Robot.c \
awt_UNIXToolkit.c
awt_UNIXToolkit.c \
awt_Desktop.c \
awt_Taskbar.c
include $(BUILD_SHARED_LIBRARY)

View File

@ -51,7 +51,7 @@ Java_java_awt_AWTEvent_initIDs(JNIEnv *env, jclass cls)
JNIEXPORT void JNICALL
Java_java_awt_event_InputEvent_initIDs(JNIEnv *env, jclass cls)
{
CHECK_NULL(inputEventIDs.modifiers = (*env)->GetFieldID(env, cls, "modifiers", "I"));
// CHECK_NULL(inputEventIDs.modifiers = (*env)->GetFieldID(env, cls, "modifiers", "I"));
}
JNIEXPORT void JNICALL

View File

@ -0,0 +1,94 @@
/*
* Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
#include "jni_util.h"
#include "gtk_interface.h"
#include "gnome_interface.h"
static gboolean gtk_has_been_loaded = FALSE;
static gboolean gnome_has_been_loaded = FALSE;
*/
include <jni.h>
/*
* Class: sun_awt_X11_XDesktopPeer
* Method: init
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XDesktopPeer_init
(JNIEnv *env, jclass cls, jint version, jboolean verbose)
{
/*
if (gtk_has_been_loaded || gnome_has_been_loaded) {
return JNI_TRUE;
}
if (gtk_load(env, version, verbose) && gtk->show_uri_load(env)) {
gtk_has_been_loaded = TRUE;
return JNI_TRUE;
} else if (gnome_load()) {
gnome_has_been_loaded = TRUE;
return JNI_TRUE;
}
*/
return JNI_FALSE;
}
/*
* Class: sun_awt_X11_XDesktopPeer
* Method: gnome_url_show
* Signature: (Ljava/lang/[B;)Z
*/
JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XDesktopPeer_gnome_1url_1show
(JNIEnv *env, jobject obj, jbyteArray url_j)
{
/*
gboolean success = FALSE;
const gchar* url_c;
url_c = (char*)(*env)->GetByteArrayElements(env, url_j, NULL);
if (url_c == NULL) {
if (!(*env)->ExceptionCheck(env)) {
JNU_ThrowOutOfMemoryError(env, 0);
}
return JNI_FALSE;
}
if (gtk_has_been_loaded) {
gtk->gdk_threads_enter();
success = gtk->gtk_show_uri(NULL, url_c, GDK_CURRENT_TIME, NULL);
gtk->gdk_threads_leave();
} else if (gnome_has_been_loaded) {
success = (*gnome_url_show)(url_c, NULL);
}
(*env)->ReleaseByteArrayElements(env, url_j, (signed char*)url_c, 0);
return success ? JNI_TRUE : JNI_FALSE;
*/
return JNI_FALSE;
}

View File

@ -0,0 +1,272 @@
/*
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
#include <dlfcn.h>
// #include "jvm_md.h"
#include <setjmp.h>
#include <string.h>
#include <jni.h>
// #include "jni_util.h"
#include "awt_Taskbar.h"
extern JavaVM *jvm;
#define NO_SYMBOL_EXCEPTION 1
#define UNITY_LIB_VERSIONED VERSIONED_JNI_LIB_NAME("unity", "9")
#define UNITY_LIB JNI_LIB_NAME("unity")
/*
static jmp_buf j;
static void *unity_libhandle = NULL;
static DbusmenuMenuitem* menu = NULL;
UnityLauncherEntry* entry = NULL;
static jclass jTaskbarCls = NULL;
static jmethodID jTaskbarCallback = NULL;
static jmethodID jMenuItemGetLabel = NULL;
GList* globalRefs = NULL;
static void* dl_symbol(const char* name) {
void* result = dlsym(unity_libhandle, name);
if (!result)
longjmp(j, NO_SYMBOL_EXCEPTION);
return result;
}
static gboolean unity_load() {
unity_libhandle = dlopen(UNITY_LIB_VERSIONED, RTLD_LAZY | RTLD_LOCAL);
if (unity_libhandle == NULL) {
unity_libhandle = dlopen(UNITY_LIB, RTLD_LAZY | RTLD_LOCAL);
if (unity_libhandle == NULL) {
return FALSE;
}
}
if (setjmp(j) == 0) {
fp_unity_launcher_entry_get_for_desktop_file = dl_symbol("unity_launcher_entry_get_for_desktop_file");
fp_unity_launcher_entry_set_count = dl_symbol("unity_launcher_entry_set_count");
fp_unity_launcher_entry_set_count_visible = dl_symbol("unity_launcher_entry_set_count_visible");
fp_unity_launcher_entry_set_urgent = dl_symbol("unity_launcher_entry_set_urgent");
fp_unity_launcher_entry_set_progress = dl_symbol("unity_launcher_entry_set_progress");
fp_unity_launcher_entry_set_progress_visible = dl_symbol("unity_launcher_entry_set_progress_visible");
fp_dbusmenu_menuitem_new = dl_symbol("dbusmenu_menuitem_new");
fp_dbusmenu_menuitem_property_set = dl_symbol("dbusmenu_menuitem_property_set");
fp_dbusmenu_menuitem_property_set_int = dl_symbol("dbusmenu_menuitem_property_set_int");
fp_dbusmenu_menuitem_property_get_int = dl_symbol("dbusmenu_menuitem_property_get_int");
fp_dbusmenu_menuitem_property_set = dl_symbol("dbusmenu_menuitem_property_set");
fp_dbusmenu_menuitem_child_append = dl_symbol("dbusmenu_menuitem_child_append");
fp_dbusmenu_menuitem_child_delete = dl_symbol("dbusmenu_menuitem_child_delete");
fp_dbusmenu_menuitem_take_children = dl_symbol("dbusmenu_menuitem_take_children");
fp_dbusmenu_menuitem_foreach = dl_symbol("dbusmenu_menuitem_foreach");
fp_unity_launcher_entry_set_quicklist = dl_symbol("unity_launcher_entry_set_quicklist");
fp_unity_launcher_entry_get_quicklist = dl_symbol("unity_launcher_entry_get_quicklist");
} else {
dlclose(unity_libhandle);
unity_libhandle = NULL;
return FALSE;
}
return TRUE;
}
void callback(DbusmenuMenuitem* mi, guint ts, jobject data) {
JNIEnv* env = (JNIEnv*) JNU_GetEnv(jvm, JNI_VERSION_1_2);
(*env)->CallStaticVoidMethod(env, jTaskbarCls, jTaskbarCallback, data);
}
*/
/*
* Class: sun_awt_X11_XTaskbarPeer
* Method: init
* Signature: (Ljava/lang/String;)Z
*/
JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XTaskbarPeer_init
(JNIEnv *env, jclass cls, jstring jname, jint version, jboolean verbose) {
/*
jclass clazz;
jTaskbarCls = (*env)->NewGlobalRef(env, cls);
CHECK_NULL_RETURN(jTaskbarCallback =
(*env)->GetStaticMethodID(env, cls, "menuItemCallback", "(Ljava/awt/MenuItem;)V"), JNI_FALSE);
CHECK_NULL_RETURN(
clazz = (*env)->FindClass(env, "java/awt/MenuItem"), JNI_FALSE);
CHECK_NULL_RETURN(
jMenuItemGetLabel = (*env)->GetMethodID(env, clazz, "getLabel", "()Ljava/lang/String;"), JNI_FALSE);
if (gtk_load(env, version, verbose) && unity_load()) {
const gchar* name = (*env)->GetStringUTFChars(env, jname, NULL);
if (name) {
entry = fp_unity_launcher_entry_get_for_desktop_file(name);
(*env)->ReleaseStringUTFChars(env, jname, name);
return JNI_TRUE;
}
}
*/
return JNI_FALSE;
}
/*
* Class: sun_awt_X11_XTaskbarPeer
* Method: runloop
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_sun_awt_X11_XTaskbarPeer_runloop
(JNIEnv *env, jclass cls) {
/*
gtk->gdk_threads_enter();
gtk->gtk_main();
gtk->gdk_threads_leave();
*/
}
/*
* Class: sun_awt_X11_XTaskbarPeer
* Method: setBadge
* Signature: (JZ)V
*/
JNIEXPORT void JNICALL Java_sun_awt_X11_XTaskbarPeer_setBadge
(JNIEnv *env, jobject obj, jlong value, jboolean visible) {
/*
gtk->gdk_threads_enter();
fp_unity_launcher_entry_set_count(entry, value);
fp_unity_launcher_entry_set_count_visible(entry, visible);
DbusmenuMenuitem* m;
if (m = fp_unity_launcher_entry_get_quicklist(entry)) {
fp_unity_launcher_entry_set_quicklist(entry, m);
}
gtk->gdk_threads_leave();
*/
}
/*
* Class: sun_awt_X11_XTaskbarPeer
* Method: setUrgent
* Signature: (Z)V
*/
JNIEXPORT void JNICALL Java_sun_awt_X11_XTaskbarPeer_setUrgent
(JNIEnv *env, jobject obj, jboolean urgent) {
/*
gtk->gdk_threads_enter();
fp_unity_launcher_entry_set_urgent(entry, urgent);
DbusmenuMenuitem* m;
if (m = fp_unity_launcher_entry_get_quicklist(entry)) {
fp_unity_launcher_entry_set_quicklist(entry, m);
}
gtk->gdk_threads_leave();
*/
}
/*
* Class: sun_awt_X11_XTaskbarPeer
* Method: updateProgress
* Signature: (DZ)V
*/
JNIEXPORT void JNICALL Java_sun_awt_X11_XTaskbarPeer_updateProgress
(JNIEnv *env, jobject obj, jdouble value, jboolean visible) {
/*
gtk->gdk_threads_enter();
fp_unity_launcher_entry_set_progress(entry, value);
fp_unity_launcher_entry_set_progress_visible(entry, visible);
DbusmenuMenuitem* m;
if (m = fp_unity_launcher_entry_get_quicklist(entry)) {
fp_unity_launcher_entry_set_quicklist(entry, m);
}
gtk->gdk_threads_leave();
*/
}
/*
void deleteGlobalRef(gpointer data) {
JNIEnv* env = (JNIEnv*) JNU_GetEnv(jvm, JNI_VERSION_1_2);
(*env)->DeleteGlobalRef(env, data);
}
void fill_menu(JNIEnv *env, jobjectArray items) {
int index;
jsize length = (*env)->GetArrayLength(env, items);
for (index = 0; index < length; index++) {
jobject elem = (*env)->GetObjectArrayElement(env, items, index);
if ((*env)->ExceptionCheck(env)) {
break;
}
elem = (*env)->NewGlobalRef(env, elem);
globalRefs = gtk->g_list_append(globalRefs, elem);
jstring jlabel = (jstring) (*env)->CallObjectMethod(env, elem, jMenuItemGetLabel);
if (!(*env)->ExceptionCheck(env) && jlabel) {
const gchar* label = (*env)->GetStringUTFChars(env, jlabel, NULL);
if (label) {
DbusmenuMenuitem* mi = fp_dbusmenu_menuitem_new();
if (!strcmp(label, "-")) {
fp_dbusmenu_menuitem_property_set(mi, "type", "separator");
} else {
fp_dbusmenu_menuitem_property_set(mi, "label", label);
}
(*env)->ReleaseStringUTFChars(env, jlabel, label);
fp_dbusmenu_menuitem_child_append(menu, mi);
gtk->g_signal_connect_data(mi, "item_activated",
G_CALLBACK(callback), elem, NULL, 0);
}
}
}
}
*/
/*
* Class: sun_awt_X11_XTaskbarPeer
* Method: setNativeMenu
* Signature: ([Ljava/awt/MenuItem;)V
*/
JNIEXPORT void JNICALL Java_sun_awt_X11_XTaskbarPeer_setNativeMenu
(JNIEnv *env, jobject obj, jobjectArray items) {
/*
gtk->gdk_threads_enter();
if (!menu) {
menu = fp_dbusmenu_menuitem_new();
fp_unity_launcher_entry_set_quicklist(entry, menu);
}
GList* list = fp_dbusmenu_menuitem_take_children(menu);
gtk->g_list_free_full(list, gtk->g_object_unref);
gtk->g_list_free_full(globalRefs, deleteGlobalRef);
globalRefs = NULL;
if (items) {
fill_menu(env, items);
}
gtk->gdk_threads_leave();
*/
}