Imported Classpath 0.18.

* sources.am, Makefile.in: Updated.
	* Makefile.am (nat_source_files): Removed natProxy.cc.
	* java/lang/reflect/natProxy.cc: Removed.
	* gnu/classpath/jdwp/VMFrame.java,
	gnu/classpath/jdwp/VMIdManager.java,
	gnu/classpath/jdwp/VMVirtualMachine.java,
	java/lang/reflect/VMProxy.java: New files.

2005-09-23  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* scripts/makemake.tcl (verbose): Add gnu/java/awt/peer/qt to BC
	list.

2005-09-23  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/java/net/DefaultContentHandlerFactory.java (getContent):
	Remove ClasspathToolkit references.

2005-09-23  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/awt/xlib/XCanvasPeer.java: Add new peer methods.
	* gnu/awt/xlib/XFramePeer.java: Likewise.
	* gnu/awt/xlib/XGraphicsConfiguration.java: Likewise.

2005-09-23  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* Makefile.am (libgcjawt_la_SOURCES): Remove jawt.c.  Add
	classpath/native/jawt/jawt.c.
	* Makefile.in: Regenerate.
	* jawt.c: Remove file.
	* include/Makefile.am (tool_include__HEADERS): Remove jawt.h and
	jawt_md.h.  Add ../classpath/include/jawt.h and
	../classpath/include/jawt_md.h.
	* include/Makefile.in: Regenerate.
	* include/jawt.h: Regenerate.
	* include/jawt_md.h: Regenerate.

From-SVN: r104586
This commit is contained in:
Tom Tromey
2005-09-23 21:31:04 +00:00
parent 9b044d1951
commit 1ea63ef8be
544 changed files with 34724 additions and 14512 deletions
+6 -2
View File
@@ -4,6 +4,10 @@ if CREATE_JNI_LIBRARIES
JNIDIR = jni
endif
SUBDIRS = fdlibm $(JNIDIR) target
DIST_SUBDIRS = fdlibm jni target
if CREATE_GTK_PEER_LIBRARIES
JAWTDIR = jawt
endif
SUBDIRS = fdlibm $(JNIDIR) $(JAWTDIR) target
DIST_SUBDIRS = fdlibm jni jawt target
+21 -21
View File
@@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# Makefile.in generated by automake 1.9.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -90,8 +90,14 @@ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATE = @DATE@
DEFS = @DEFS@
@@ -153,6 +159,7 @@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -164,12 +171,13 @@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
REMOVE = @REMOVE@
SET_MAKE = @SET_MAKE@
SH = @SH@
SHELL = @SHELL@
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
STRIP = @STRIP@
@@ -191,10 +199,13 @@ X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
@@ -235,8 +246,9 @@ target_os = @target_os@
target_vendor = @target_vendor@
vm_classes = @vm_classes@
@CREATE_JNI_LIBRARIES_TRUE@JNIDIR = jni
SUBDIRS = fdlibm $(JNIDIR) target
DIST_SUBDIRS = fdlibm jni target
@CREATE_GTK_PEER_LIBRARIES_TRUE@JAWTDIR = jawt
SUBDIRS = fdlibm $(JNIDIR) $(JAWTDIR) target
DIST_SUBDIRS = fdlibm jni jawt target
all: all-recursive
.SUFFIXES:
@@ -287,13 +299,7 @@ uninstall-info-am:
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
@@ -305,7 +311,7 @@ $(RECURSIVE_TARGETS):
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
@@ -313,13 +319,7 @@ $(RECURSIVE_TARGETS):
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
@@ -340,7 +340,7 @@ maintainer-clean-recursive:
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
+14 -3
View File
@@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# Makefile.in generated by automake 1.9.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -109,8 +109,14 @@ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATE = @DATE@
DEFS = @DEFS@
@@ -172,6 +178,7 @@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -183,12 +190,13 @@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
REMOVE = @REMOVE@
SET_MAKE = @SET_MAKE@
SH = @SH@
SHELL = @SHELL@
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
STRIP = @STRIP@
@@ -210,10 +218,13 @@ X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
+7 -3
View File
@@ -8,13 +8,17 @@ if CREATE_GTK_PEER_LIBRARIES
GTKDIR = gtk-peer
endif
if CREATE_QT_PEER_LIBRARIES
CLASSPATH_QT_PEER_DIR = qt-peer
endif
if CREATE_XMLJ_LIBRARY
XMLJDIR = xmlj
endif
SUBDIRS = classpath $(JNIDIRS) $(GTKDIR) $(XMLJDIR)
SUBDIRS = classpath $(JNIDIRS) $(GTKDIR) $(CLASSPATH_QT_PEER_DIR) $(XMLJDIR)
DIST_SUBDIRS = classpath java-io java-lang java-net java-nio java-util \
gtk-peer xmlj
gtk-peer qt-peer xmlj
all-local:
cd $(top_srcdir) && scripts/check_jni_methods.sh
cd $(top_srcdir) && $(SHELL) ./scripts/check_jni_methods.sh
+22 -22
View File
@@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# Makefile.in generated by automake 1.9.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -90,8 +90,14 @@ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATE = @DATE@
DEFS = @DEFS@
@@ -153,6 +159,7 @@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -164,12 +171,13 @@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
REMOVE = @REMOVE@
SET_MAKE = @SET_MAKE@
SH = @SH@
SHELL = @SHELL@
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
STRIP = @STRIP@
@@ -191,10 +199,13 @@ X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
@@ -236,10 +247,11 @@ target_vendor = @target_vendor@
vm_classes = @vm_classes@
@CREATE_CORE_JNI_LIBRARIES_TRUE@JNIDIRS = java-io java-lang java-net java-nio java-util
@CREATE_GTK_PEER_LIBRARIES_TRUE@GTKDIR = gtk-peer
@CREATE_QT_PEER_LIBRARIES_TRUE@CLASSPATH_QT_PEER_DIR = qt-peer
@CREATE_XMLJ_LIBRARY_TRUE@XMLJDIR = xmlj
SUBDIRS = classpath $(JNIDIRS) $(GTKDIR) $(XMLJDIR)
SUBDIRS = classpath $(JNIDIRS) $(GTKDIR) $(CLASSPATH_QT_PEER_DIR) $(XMLJDIR)
DIST_SUBDIRS = classpath java-io java-lang java-net java-nio java-util \
gtk-peer xmlj
gtk-peer qt-peer xmlj
all: all-recursive
@@ -291,13 +303,7 @@ uninstall-info-am:
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
@@ -309,7 +315,7 @@ $(RECURSIVE_TARGETS):
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
@@ -317,13 +323,7 @@ $(RECURSIVE_TARGETS):
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
@@ -344,7 +344,7 @@ maintainer-clean-recursive:
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
@@ -551,7 +551,7 @@ uninstall-info: uninstall-info-recursive
all-local:
cd $(top_srcdir) && scripts/check_jni_methods.sh
cd $(top_srcdir) && $(SHELL) ./scripts/check_jni_methods.sh
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
@@ -1,3 +1,6 @@
# Header needed for jawt implementations such as the one found in ../gtk-peer.
EXTRA_DIST = classpath_jawt.h
noinst_LTLIBRARIES = libclasspath.la
libclasspath_la_SOURCES = jcl.c jcl.h \
@@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# Makefile.in generated by automake 1.9.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -103,8 +103,14 @@ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATE = @DATE@
DEFS = @DEFS@
@@ -166,6 +172,7 @@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -177,12 +184,13 @@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
REMOVE = @REMOVE@
SET_MAKE = @SET_MAKE@
SH = @SH@
SHELL = @SHELL@
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
STRIP = @STRIP@
@@ -204,10 +212,13 @@ X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
@@ -247,6 +258,9 @@ target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
vm_classes = @vm_classes@
# Header needed for jawt implementations such as the one found in ../gtk-peer.
EXTRA_DIST = classpath_jawt.h
noinst_LTLIBRARIES = libclasspath.la
libclasspath_la_SOURCES = jcl.c jcl.h \
jnilink.c jnilink.h \
@@ -1,39 +1,39 @@
/* classpath_awt.h -- libjawt's interface to the peer library
Copyright (C) 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath 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 for more details.
GNU Classpath 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 for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
/*
* libjawt.so is linked directly to the peer library with -l. This
@@ -50,15 +50,11 @@
#define CLASSPATH_JAWT_VERSION 0x10004
jint classpath_jawt_get_awt_version ();
jint classpath_jawt_get_awt_version (void);
Display* classpath_jawt_get_default_display (JNIEnv* env, jobject canvas);
Drawable classpath_jawt_get_drawable (JNIEnv* env, jobject canvas);
VisualID classpath_jawt_get_visualID (JNIEnv* env, jobject canvas);
jint classpath_jawt_object_lock (jobject lock);
void classpath_jawt_object_unlock (jobject lock);
jint classpath_jawt_lock ();
void classpath_jawt_unlock ();
jobject classpath_jawt_create_lock ();
void classpath_jawt_destroy_lock (jobject lock);
jint classpath_jawt_lock (void);
void classpath_jawt_unlock (void);
#endif /* __classpath_jawt_h__ */
@@ -178,3 +178,94 @@ JCL_FindClass (JNIEnv * env, const char *className)
}
return retval;
}
/*
* Build a Pointer object. The function caches the class type
*/
static jclass rawDataClass;
static jfieldID rawData_fid;
static jmethodID rawData_mid;
JNIEXPORT jobject JNICALL
JCL_NewRawDataObject (JNIEnv * env, void *data)
{
if (rawDataClass == NULL)
{
#ifdef POINTERS_ARE_64BIT
rawDataClass = (*env)->FindClass (env, "gnu/classpath/Pointer64");
if (rawDataClass == NULL)
{
JCL_ThrowException (env, "java/lang/InternalError",
"unable to find internal class");
return NULL;
}
rawData_mid = (*env)->GetMethodID (env, rawDataClass, "<init>", "(J)V");
if (rawData_mid == NULL)
{
JCL_ThrowException (env, "java/lang/InternalError",
"unable to find internal constructor");
return NULL;
}
rawData_fid = (*env)->GetFieldID (env, rawDataClass, "data", "J");
if (rawData_fid == NULL)
{
JCL_ThrowException (env, "java/lang/InternalError",
"unable to find internal field");
return NULL;
}
#else
rawDataClass = (*env)->FindClass (env, "gnu/classpath/Pointer32");
if (rawDataClass == NULL)
{
JCL_ThrowException (env, "java/lang/InternalError",
"unable to find internal class");
return NULL;
}
rawData_mid = (*env)->GetMethodID (env, rawDataClass, "<init>", "(I)V");
if (rawData_mid == NULL)
{
JCL_ThrowException (env, "java/lang/InternalError",
"unable to find internal constructor");
return NULL;
}
rawData_fid = (*env)->GetFieldID (env, rawDataClass, "data", "I");
if (rawData_fid == NULL)
{
JCL_ThrowException (env, "java/lang/InternalError",
"unable to find internal field");
return NULL;
}
#endif
(*env)->DeleteLocalRef(env, rawDataClass);
rawDataClass = (*env)->NewGlobalRef (env, rawDataClass);
if (rawDataClass == NULL)
{
JCL_ThrowException (env, "java/lang/InternalError",
"unable to create an internal global ref");
return NULL;
}
}
#ifdef POINTERS_ARE_64BIT
return (*env)->NewObject (env, rawDataClass, rawData_mid, (jlong) data);
#else
return (*env)->NewObject (env, rawDataClass, rawData_mid, (jint) data);
#endif
}
JNIEXPORT void * JNICALL
JCL_GetRawData (JNIEnv * env, jobject rawdata)
{
#ifdef POINTERS_ARE_64BIT
return (void *) (*env)->GetLongField (env, rawdata, rawData_fid);
#else
return (void *) (*env)->GetIntField (env, rawdata, rawData_fid);
#endif
}
@@ -42,6 +42,14 @@ exception statement from your version. */
#include <jni.h>
#include <config.h>
#if SIZEOF_VOID_P == 4
typedef jint jpointer;
#elif SIZEOF_VOID_P == 8
typedef jlong jpointer;
#else
#error "Unknown pointer size"
#endif
JNIEXPORT jclass JNICALL JCL_FindClass (JNIEnv * env, const char *className);
JNIEXPORT void JNICALL JCL_ThrowException (JNIEnv * env,
const char *className,
@@ -56,6 +64,9 @@ JNIEXPORT void JNICALL JCL_free_cstring (JNIEnv * env, jstring s,
JNIEXPORT jint JNICALL JCL_MonitorEnter (JNIEnv * env, jobject o);
JNIEXPORT jint JNICALL JCL_MonitorExit (JNIEnv * env, jobject o);
JNIEXPORT jobject JNICALL JCL_NewRawDataObject (JNIEnv * env, void *data);
JNIEXPORT void * JNICALL JCL_GetRawData (JNIEnv * env, jobject rawdata);
#define JCL_RETHROW_EXCEPTION(env) if((*(env))->ExceptionOccurred((env)) != NULL) return NULL;
/* Simple debug macro */
@@ -36,6 +36,7 @@ obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
#include <stdlib.h>
#include <assert.h>
#include <jni.h>
#include "native_state.h"
@@ -165,6 +166,18 @@ add_node (struct state_node **head, jint obj_id, void *state)
*head = new_node;
}
#ifndef NDEBUG
static void
cp_gtk_check_compat (JNIEnv * env, jobject obj, struct state_table *table)
{
jclass objclazz;
objclazz = (*env)->GetObjectClass(env, obj);
assert ((*env)->IsAssignableFrom(env, objclazz, table->clazz));
(*env)->DeleteLocalRef(env, objclazz);
}
#endif
void
cp_gtk_set_state_oid (JNIEnv * env, jobject lock, struct state_table *table,
jint obj_id, void *state)
@@ -214,6 +227,11 @@ int
cp_gtk_set_state (JNIEnv * env, jobject obj, struct state_table *table, void *state)
{
jint obj_id;
#ifndef NDEBUG
cp_gtk_check_compat(env, obj, table);
#endif
obj_id = (*env)->GetIntField (env, obj, table->hash);
if ((*env)->ExceptionOccurred (env) != NULL)
@@ -227,6 +245,11 @@ void *
cp_gtk_get_state (JNIEnv * env, jobject obj, struct state_table *table)
{
jint obj_id;
#ifndef NDEBUG
cp_gtk_check_compat(env, obj, table);
#endif
obj_id = (*env)->GetIntField (env, obj, table->hash);
if ((*env)->ExceptionOccurred (env) != NULL)
@@ -239,6 +262,11 @@ void *
cp_gtk_remove_state_slot (JNIEnv * env, jobject obj, struct state_table *table)
{
jint obj_id;
#ifndef NDEBUG
cp_gtk_check_compat(env, obj, table);
#endif
obj_id = (*env)->GetIntField (env, obj, table->hash);
if ((*env)->ExceptionOccurred (env) != NULL)
@@ -39,6 +39,7 @@ libgtkpeer_la_SOURCES = $(gtk_cairo_c_source_files) \
gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c \
gnu_java_awt_peer_gtk_GtkScrollbarPeer.c \
gnu_java_awt_peer_gtk_GtkScrollPanePeer.c \
gnu_java_awt_peer_gtk_GtkSelection.c \
gnu_java_awt_peer_gtk_GtkTextAreaPeer.c \
gnu_java_awt_peer_gtk_GtkTextFieldPeer.c \
gnu_java_awt_peer_gtk_GtkToolkit.c \
@@ -47,6 +48,7 @@ libgtkpeer_la_SOURCES = $(gtk_cairo_c_source_files) \
gdkfont.h \
gthread-jni.h \
gtkcairopeer.h \
gtk_jawt.c \
gtkpeer.h
libgtkpeer_la_LIBADD = $(top_builddir)/native/jni/classpath/native_state.lo \
@@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# Makefile.in generated by automake 1.9.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -96,11 +96,12 @@ am__libgtkpeer_la_SOURCES_DIST = \
gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c \
gnu_java_awt_peer_gtk_GtkScrollbarPeer.c \
gnu_java_awt_peer_gtk_GtkScrollPanePeer.c \
gnu_java_awt_peer_gtk_GtkSelection.c \
gnu_java_awt_peer_gtk_GtkTextAreaPeer.c \
gnu_java_awt_peer_gtk_GtkTextFieldPeer.c \
gnu_java_awt_peer_gtk_GtkToolkit.c \
gnu_java_awt_peer_gtk_GtkWindowPeer.c gthread-jni.c gdkfont.h \
gthread-jni.h gtkcairopeer.h gtkpeer.h
gthread-jni.h gtkcairopeer.h gtk_jawt.c gtkpeer.h
@GTK_CAIRO_TRUE@am__objects_1 = \
@GTK_CAIRO_TRUE@ gnu_java_awt_peer_gtk_GdkGraphics2D.lo
am_libgtkpeer_la_OBJECTS = $(am__objects_1) \
@@ -134,10 +135,12 @@ am_libgtkpeer_la_OBJECTS = $(am__objects_1) \
gnu_java_awt_peer_gtk_GtkPopupMenuPeer.lo \
gnu_java_awt_peer_gtk_GtkScrollbarPeer.lo \
gnu_java_awt_peer_gtk_GtkScrollPanePeer.lo \
gnu_java_awt_peer_gtk_GtkSelection.lo \
gnu_java_awt_peer_gtk_GtkTextAreaPeer.lo \
gnu_java_awt_peer_gtk_GtkTextFieldPeer.lo \
gnu_java_awt_peer_gtk_GtkToolkit.lo \
gnu_java_awt_peer_gtk_GtkWindowPeer.lo gthread-jni.lo
gnu_java_awt_peer_gtk_GtkWindowPeer.lo gthread-jni.lo \
gtk_jawt.lo
libgtkpeer_la_OBJECTS = $(am_libgtkpeer_la_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include
depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -185,8 +188,14 @@ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATE = @DATE@
DEFS = @DEFS@
@@ -248,6 +257,7 @@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -259,12 +269,13 @@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
REMOVE = @REMOVE@
SET_MAKE = @SET_MAKE@
SH = @SH@
SHELL = @SHELL@
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
STRIP = @STRIP@
@@ -286,10 +297,13 @@ X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
@@ -367,6 +381,7 @@ libgtkpeer_la_SOURCES = $(gtk_cairo_c_source_files) \
gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c \
gnu_java_awt_peer_gtk_GtkScrollbarPeer.c \
gnu_java_awt_peer_gtk_GtkScrollPanePeer.c \
gnu_java_awt_peer_gtk_GtkSelection.c \
gnu_java_awt_peer_gtk_GtkTextAreaPeer.c \
gnu_java_awt_peer_gtk_GtkTextFieldPeer.c \
gnu_java_awt_peer_gtk_GtkToolkit.c \
@@ -375,6 +390,7 @@ libgtkpeer_la_SOURCES = $(gtk_cairo_c_source_files) \
gdkfont.h \
gthread-jni.h \
gtkcairopeer.h \
gtk_jawt.c \
gtkpeer.h
libgtkpeer_la_LIBADD = $(top_builddir)/native/jni/classpath/native_state.lo \
@@ -488,11 +504,13 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnu_java_awt_peer_gtk_GtkScrollPanePeer.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnu_java_awt_peer_gtk_GtkScrollbarPeer.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnu_java_awt_peer_gtk_GtkSelection.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnu_java_awt_peer_gtk_GtkTextAreaPeer.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnu_java_awt_peer_gtk_GtkTextFieldPeer.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnu_java_awt_peer_gtk_GtkToolkit.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnu_java_awt_peer_gtk_GtkWindowPeer.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gthread-jni.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtk_jawt.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@@ -150,12 +150,8 @@ Java_gnu_java_awt_peer_gtk_GdkFontPeer_getGlyphVector
if (i == NULL)
{
gdk_threads_leave ();
java_extents = (*env)->NewDoubleArray (env, 0);
java_codes = (*env)->NewIntArray (env, 0);
gdk_threads_enter ();
}
else
{
@@ -177,13 +173,9 @@ Java_gnu_java_awt_peer_gtk_GdkFontPeer_getGlyphVector
int x = 0;
double scale = ((double) PANGO_SCALE);
gdk_threads_leave ();
java_extents = (*env)->NewDoubleArray (env, glyphs->num_glyphs * NUM_GLYPH_METRICS);
java_codes = (*env)->NewIntArray (env, glyphs->num_glyphs);
gdk_threads_enter ();
native_extents = (*env)->GetDoubleArrayElements (env, java_extents, NULL);
native_codes = (*env)->GetIntArrayElements (env, java_codes, NULL);
@@ -41,7 +41,7 @@ exception statement from your version. */
#include <gdk/gdkprivate.h>
#include <gdk/gdkx.h>
static jmethodID initComponentGraphicsID;
static jmethodID initComponentGraphicsUnlockedID;
void
cp_gtk_graphics_init_jni (void)
@@ -51,9 +51,44 @@ cp_gtk_graphics_init_jni (void)
gdkgraphics = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
"gnu/java/awt/peer/gtk/GdkGraphics");
initComponentGraphicsID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gdkgraphics,
"initComponentGraphics",
"()V");
initComponentGraphicsUnlockedID =
(*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gdkgraphics,
"initComponentGraphicsUnlocked",
"()V");
}
struct state_table *cp_gtk_native_graphics_state_table;
static struct state_table *native_graphics_global_ref_table;
#define NSA_GLOBAL_G_INIT(env, clazz) \
native_graphics_global_ref_table = cp_gtk_init_state_table (env, clazz)
#define NSA_GET_GLOBAL_G_REF(env, obj) \
cp_gtk_get_state (env, obj, native_graphics_global_ref_table)
#define NSA_SET_GLOBAL_G_REF(env, obj) \
do {jobject *globRefPtr; \
globRefPtr = (jobject *) malloc (sizeof (jobject)); \
*globRefPtr = (*env)->NewGlobalRef (env, obj); \
cp_gtk_set_state (env, obj, native_graphics_global_ref_table, (void *)globRefPtr);} while (0)
#define NSA_DEL_GLOBAL_G_REF(env, obj) \
do {jobject *globRefPtr = cp_gtk_get_state (env, obj, native_graphics_global_ref_table); \
cp_gtk_remove_state_slot (env, obj, native_graphics_global_ref_table); \
(*env)->DeleteGlobalRef (env, *globRefPtr); \
free (globRefPtr);} while (0)
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics_initStaticState
(JNIEnv *env, jclass clazz)
{
gdk_threads_enter();
NSA_G_INIT (env, clazz);
NSA_GLOBAL_G_INIT (env, clazz);
gdk_threads_leave();
}
#define GDK_STABLE_IS_PIXMAP(d) (GDK_IS_PIXMAP(d))
@@ -73,7 +108,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_copyState
gdk_threads_enter ();
g = (struct graphics *) g_malloc (sizeof (struct graphics));
g_old = (struct graphics *) NSA_GET_PTR (env, old);
g_old = (struct graphics *) NSA_GET_G_PTR (env, old);
*g = *g_old;
@@ -87,7 +122,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_copyState
gdk_colormap_ref (g->cm);
NSA_SET_PTR (env, obj, g);
NSA_SET_G_PTR (env, obj, g);
gdk_threads_leave ();
}
@@ -109,7 +144,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_initState__II
gdk_colormap_ref (g->cm);
g->gc = gdk_gc_new (g->drawable);
NSA_SET_PTR (env, obj, g);
NSA_SET_G_PTR (env, obj, g);
gdk_threads_leave ();
}
@@ -136,15 +171,13 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_initFromImage
gdk_colormap_ref (g->cm);
g->gc = gdk_gc_new (g->drawable);
NSA_SET_PTR (env, obj, g);
NSA_SET_G_PTR (env, obj, g);
gdk_threads_leave ();
}
/* copy the native state of the peer (GtkWidget *) to the native state
of the graphics object */
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics_initState__Lgnu_java_awt_peer_gtk_GtkComponentPeer_2
Java_gnu_java_awt_peer_gtk_GdkGraphics_initStateUnlocked
(JNIEnv *env, jobject obj, jobject peer)
{
struct graphics *g = NULL;
@@ -152,8 +185,6 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_initState__Lgnu_java_awt_peer_gtk_GtkComp
GtkWidget *widget = NULL;
GdkColor color;
gdk_threads_enter ();
g = (struct graphics *) g_malloc (sizeof (struct graphics));
ptr = NSA_GET_PTR (env, peer);
g->x_offset = 0;
@@ -169,8 +200,18 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_initState__Lgnu_java_awt_peer_gtk_GtkComp
gdk_gc_copy (g->gc, widget->style->fg_gc[GTK_STATE_NORMAL]);
color = widget->style->fg[GTK_STATE_NORMAL];
NSA_SET_PTR (env, obj, g);
NSA_SET_G_PTR (env, obj, g);
}
/* copy the native state of the peer (GtkWidget *) to the native state
of the graphics object */
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics_initState__Lgnu_java_awt_peer_gtk_GtkComponentPeer_2
(JNIEnv *env, jobject obj, jobject peer)
{
gdk_threads_enter ();
Java_gnu_java_awt_peer_gtk_GdkGraphics_initStateUnlocked
(env, obj, peer);
gdk_threads_leave ();
}
@@ -183,8 +224,8 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_connectSignals
gdk_threads_enter ();
NSA_SET_GLOBAL_REF (env, obj);
gref = NSA_GET_GLOBAL_REF (env, obj);
NSA_SET_GLOBAL_G_REF (env, obj);
gref = NSA_GET_GLOBAL_G_REF (env, obj);
ptr = NSA_GET_PTR (env, peer);
@@ -202,7 +243,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_dispose
gdk_threads_enter ();
g = (struct graphics *) NSA_DEL_PTR (env, obj);
g = (struct graphics *) NSA_DEL_G_PTR (env, obj);
/* check if dispose has been called already */
if (!g)
@@ -235,7 +276,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_translateNative
gdk_threads_enter ();
g = (struct graphics *) NSA_GET_PTR (env, obj);
g = (struct graphics *) NSA_GET_G_PTR (env, obj);
g->x_offset += x;
g->y_offset += y;
@@ -255,7 +296,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawString
gdk_threads_enter ();
g = (struct graphics *) NSA_GET_PTR (env, obj);
g = (struct graphics *) NSA_GET_G_PTR (env, obj);
g_assert (g != NULL);
pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, font);
@@ -292,7 +333,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawLine
gdk_threads_enter ();
g = (struct graphics *) NSA_GET_PTR (env, obj);
g = (struct graphics *) NSA_GET_G_PTR (env, obj);
gdk_draw_line (g->drawable, g->gc,
x + g->x_offset, y + g->y_offset,
@@ -310,7 +351,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_fillRect
gdk_threads_enter ();
g = (struct graphics *) NSA_GET_PTR (env, obj);
g = (struct graphics *) NSA_GET_G_PTR (env, obj);
gdk_draw_rectangle (g->drawable, g->gc, TRUE,
x + g->x_offset, y + g->y_offset, width, height);
@@ -327,7 +368,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawRect
gdk_threads_enter ();
g = (struct graphics *) NSA_GET_PTR (env, obj);
g = (struct graphics *) NSA_GET_G_PTR (env, obj);
gdk_draw_rectangle (g->drawable, g->gc, FALSE,
x + g->x_offset, y + g->y_offset, width, height);
@@ -345,7 +386,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_copyArea
gdk_threads_enter ();
g = (struct graphics *) NSA_GET_PTR (env, obj);
g = (struct graphics *) NSA_GET_G_PTR (env, obj);
gdk_window_copy_area ((GdkWindow *)g->drawable,
g->gc,
@@ -369,7 +410,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_clearRect
gdk_threads_enter ();
g = (struct graphics *) NSA_GET_PTR (env, obj);
g = (struct graphics *) NSA_GET_G_PTR (env, obj);
if (!g)
{
@@ -408,7 +449,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_setFunction
gdk_threads_enter ();
g = (struct graphics *) NSA_GET_PTR (env, obj);
g = (struct graphics *) NSA_GET_G_PTR (env, obj);
gdk_gc_set_function (g->gc, func);
@@ -429,7 +470,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_setFGColor
color.green = green << 8;
color.blue = blue << 8;
g = (struct graphics *) NSA_GET_PTR (env, obj);
g = (struct graphics *) NSA_GET_G_PTR (env, obj);
gdk_color_alloc (g->cm, &color);
gdk_gc_set_foreground (g->gc, &color);
@@ -446,7 +487,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawArc
gdk_threads_enter ();
g = (struct graphics *) NSA_GET_PTR (env, obj);
g = (struct graphics *) NSA_GET_G_PTR (env, obj);
gdk_draw_arc (g->drawable, g->gc, FALSE,
x + g->x_offset, y + g->y_offset,
@@ -493,7 +534,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawPolyline
gdk_threads_enter ();
g = (struct graphics *) NSA_GET_PTR (env, obj);
g = (struct graphics *) NSA_GET_G_PTR (env, obj);
points = translate_points (env, xpoints, ypoints, npoints,
g->x_offset, g->y_offset);
@@ -515,7 +556,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawPolygon
gdk_threads_enter ();
g = (struct graphics *) NSA_GET_PTR (env, obj);
g = (struct graphics *) NSA_GET_G_PTR (env, obj);
points = translate_points (env, xpoints, ypoints, npoints,
g->x_offset, g->y_offset);
@@ -542,7 +583,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_fillPolygon
gdk_threads_enter ();
g = (struct graphics *) NSA_GET_PTR (env, obj);
g = (struct graphics *) NSA_GET_G_PTR (env, obj);
points = translate_points (env, xpoints, ypoints, npoints,
g->x_offset, g->y_offset);
gdk_draw_polygon (g->drawable, g->gc, TRUE, points, npoints);
@@ -562,7 +603,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_fillArc
gdk_threads_enter ();
g = (struct graphics *) NSA_GET_PTR (env, obj);
g = (struct graphics *) NSA_GET_G_PTR (env, obj);
gdk_draw_arc (g->drawable, g->gc, TRUE,
x + g->x_offset, y + g->y_offset,
@@ -580,7 +621,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_drawOval
gdk_threads_enter ();
g = (struct graphics *) NSA_GET_PTR (env, obj);
g = (struct graphics *) NSA_GET_G_PTR (env, obj);
gdk_draw_arc (g->drawable, g->gc, FALSE,
x + g->x_offset, y + g->y_offset,
@@ -598,7 +639,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_fillOval
gdk_threads_enter ();
g = (struct graphics *) NSA_GET_PTR (env, obj);
g = (struct graphics *) NSA_GET_G_PTR (env, obj);
gdk_draw_arc (g->drawable, g->gc, TRUE,
x + g->x_offset, y + g->y_offset,
@@ -617,7 +658,7 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_setClipRectangle
gdk_threads_enter ();
g = (struct graphics *) NSA_GET_PTR (env, obj);
g = (struct graphics *) NSA_GET_G_PTR (env, obj);
rectangle.x = x + g->x_offset;
rectangle.y = y + g->y_offset;
@@ -632,11 +673,9 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics_setClipRectangle
static void
realize_cb (GtkWidget *widget __attribute__ ((unused)), jobject jgraphics)
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(),
jgraphics,
initComponentGraphicsUnlockedID);
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), jgraphics, initComponentGraphicsID);
NSA_DEL_GLOBAL_REF (cp_gtk_gdk_env(), jgraphics);
gdk_threads_enter ();
NSA_DEL_GLOBAL_G_REF (cp_gtk_gdk_env(), jgraphics);
}
@@ -52,7 +52,7 @@
#include <stdio.h>
#include <stdlib.h>
static jmethodID initComponentGraphics2DID;
static jmethodID initComponentGraphics2DUnlockedID;
void
cp_gtk_graphics2d_init_jni (void)
@@ -62,8 +62,8 @@ cp_gtk_graphics2d_init_jni (void)
gdkgraphics2d = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
"gnu/java/awt/peer/gtk/GdkGraphics2D");
initComponentGraphics2DID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gdkgraphics2d,
"initComponentGraphics2D",
initComponentGraphics2DUnlockedID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gdkgraphics2d,
"initComponentGraphics2DUnlocked",
"()V");
}
@@ -369,11 +369,9 @@ check_for_debug (struct graphics2d *gr)
static void
realize_cb (GtkWidget *widget __attribute__ ((unused)), jobject peer)
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, initComponentGraphics2DID);
gdk_threads_enter ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(),
peer,
initComponentGraphics2DUnlockedID);
}
JNIEXPORT void JNICALL
@@ -592,6 +590,43 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_gdkDrawDrawable
gdk_threads_leave();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initStateUnlocked
(JNIEnv *env, jobject obj, jobject peer)
{
struct graphics2d *gr = NULL;
GtkWidget *widget = NULL;
void *ptr = NULL;
if (peer_is_disposed(env, obj))
return;
ptr = NSA_GET_PTR (env, peer);
g_assert (ptr != NULL);
gr = (struct graphics2d *) g_malloc (sizeof (struct graphics2d));
g_assert (gr != NULL);
memset (gr, 0, sizeof(struct graphics2d));
check_for_debug (gr);
widget = GTK_WIDGET (ptr);
g_assert (widget != NULL);
grab_current_drawable (widget, &(gr->drawable), &(gr->win));
g_assert (gr->drawable != NULL);
gr->width = widget->allocation.width;
gr->height = widget->allocation.height;
if (x_server_has_render_extension ())
init_graphics2d_as_renderable (gr);
else
init_graphics2d_as_pixbuf (gr);
NSA_SET_G2D_PTR (env, obj, gr);
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState__Lgnu_java_awt_peer_gtk_GtkComponentPeer_2
(JNIEnv *env, jobject obj, jobject peer)
@@ -710,22 +745,37 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setGradient
jint r1, jint g1, jint b1, jint a1,
jint r2, jint g2, jint b2, jint a2,
jboolean cyclic)
{
gdk_threads_enter();
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setGradientUnlocked
(env, obj,
x1, y1, x2, y2,
r1, g1, b1, a1,
r2, g2, b2, a2,
cyclic);
gdk_threads_leave();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setGradientUnlocked
(JNIEnv *env, jobject obj,
jdouble x1, jdouble y1,
jdouble x2, jdouble y2,
jint r1, jint g1, jint b1, jint a1,
jint r2, jint g2, jint b2, jint a2,
jboolean cyclic)
{
struct graphics2d *gr = NULL;
cairo_surface_t *surf = NULL;
cairo_t *cr2 = NULL;
cairo_matrix_t mat;
gdk_threads_enter();
gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
g_assert (gr != NULL);
if (peer_is_disposed(env, obj))
{
gdk_threads_leave ();
return;
}
return;
if (gr->debug) printf ("setGradient (%f,%f) -> (%f,%f); (%d,%d,%d,%d) -> (%d,%d,%d,%d)\n",
x1, y1,
@@ -826,24 +876,29 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setGradient
gr->pattern = cairo_pattern_create_for_surface(surf);
cairo_set_source (gr->cr, gr->pattern);
gdk_threads_leave();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setTexturePixels
(JNIEnv *env, jobject obj, jintArray jarr, jint w, jint h, jint stride)
{
gdk_threads_enter();
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setTexturePixelsUnlocked
(env, obj, jarr, w, h, stride);
gdk_threads_leave();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setTexturePixelsUnlocked
(JNIEnv *env, jobject obj, jintArray jarr, jint w, jint h, jint stride)
{
struct graphics2d *gr = NULL;
jint *jpixels = NULL;
gdk_threads_enter();
if (peer_is_disposed(env, obj))
{
gdk_threads_leave ();
return;
}
return;
gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
g_assert (gr != NULL);
@@ -880,8 +935,6 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_setTexturePixels
gr->pattern = cairo_pattern_create_for_surface (gr->pattern_surface);
g_assert (gr->pattern != NULL);
cairo_set_source (gr->cr, gr->pattern);
gdk_threads_leave();
}
JNIEXPORT void JNICALL
@@ -995,27 +1048,31 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoRestore
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMatrix
(JNIEnv *env, jobject obj, jdoubleArray java_matrix)
{
gdk_threads_enter();
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMatrixUnlocked
(env, obj, java_matrix);
gdk_threads_leave();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMatrixUnlocked
(JNIEnv *env, jobject obj, jdoubleArray java_matrix)
{
struct graphics2d *gr = NULL;
jdouble *native_matrix = NULL;
gdk_threads_enter();
if (peer_is_disposed(env, obj))
{
gdk_threads_leave ();
return;
}
return;
gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
/* cairoSetMatrix was called before this graphics object's component
was realized. */
if (gr == NULL)
{
gdk_threads_leave ();
return;
}
return;
native_matrix = (*env)->GetDoubleArrayElements (env, java_matrix, NULL);
g_assert (native_matrix != NULL);
@@ -1039,8 +1096,6 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMatrix
(*env)->ReleaseDoubleArrayElements (env, java_matrix, native_matrix, 0);
update_pattern_transform (gr);
gdk_threads_leave();
}
static void
@@ -1357,15 +1412,22 @@ JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetRGBAColor
(JNIEnv *env, jobject obj, jdouble r, jdouble g, jdouble b, jdouble a)
{
struct graphics2d *gr = NULL;
gdk_threads_enter();
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetRGBAColorUnlocked
(env, obj, r, g, b, a);
gdk_threads_leave();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetRGBAColorUnlocked
(JNIEnv *env, jobject obj, jdouble r, jdouble g, jdouble b, jdouble a)
{
struct graphics2d *gr = NULL;
if (peer_is_disposed(env, obj))
{
gdk_threads_leave ();
return;
}
return;
gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
g_assert (gr != NULL);
@@ -1381,8 +1443,6 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetRGBAColor
cairo_set_source_rgba (gr->cr, b, g, r, a);
else
cairo_set_source_rgba (gr->cr, r, g, b, a);
gdk_threads_leave();
}
JNIEXPORT void JNICALL
@@ -1419,10 +1479,20 @@ JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineWidth
(JNIEnv *env, jobject obj, jdouble width)
{
struct graphics2d *gr = NULL;
gdk_threads_enter();
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineWidthUnlocked
(env, obj, width);
gdk_threads_leave();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineWidthUnlocked
(JNIEnv *env, jobject obj, jdouble width)
{
struct graphics2d *gr = NULL;
if (peer_is_disposed(env, obj))
return;
@@ -1430,23 +1500,28 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineWidth
g_assert (gr != NULL);
if (gr->debug) printf ("cairo_set_line_width %f\n", width);
cairo_set_line_width (gr->cr, width);
gdk_threads_leave();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineCap
(JNIEnv *env, jobject obj, jint cap)
{
struct graphics2d *gr = NULL;
gdk_threads_enter();
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineCapUnlocked
(env, obj, cap);
gdk_threads_leave();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineCapUnlocked
(JNIEnv *env, jobject obj, jint cap)
{
struct graphics2d *gr = NULL;
if (peer_is_disposed(env, obj))
{
gdk_threads_leave ();
return;
}
return;
gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
g_assert (gr != NULL);
@@ -1465,23 +1540,28 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineCap
cairo_set_line_cap (gr->cr, CAIRO_LINE_CAP_SQUARE);
break;
}
gdk_threads_leave();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineJoin
(JNIEnv *env, jobject obj, jint join)
{
struct graphics2d *gr = NULL;
gdk_threads_enter();
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineJoinUnlocked
(env, obj, join);
gdk_threads_leave();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineJoinUnlocked
(JNIEnv *env, jobject obj, jint join)
{
struct graphics2d *gr = NULL;
if (peer_is_disposed(env, obj))
{
gdk_threads_leave ();
return;
}
return;
gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
g_assert (gr != NULL);
@@ -1500,24 +1580,29 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetLineJoin
cairo_set_line_join (gr->cr, CAIRO_LINE_JOIN_BEVEL);
break;
}
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetDash
(JNIEnv *env, jobject obj, jdoubleArray dashes, jint ndash, jdouble offset)
{
gdk_threads_enter();
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetDashUnlocked
(env, obj, dashes, ndash, offset);
gdk_threads_leave();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetDash
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetDashUnlocked
(JNIEnv *env, jobject obj, jdoubleArray dashes, jint ndash, jdouble offset)
{
struct graphics2d *gr = NULL;
jdouble *dasharr = NULL;
gdk_threads_enter();
if (peer_is_disposed(env, obj))
{
gdk_threads_leave ();
return;
}
return;
gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
g_assert (gr != NULL);
@@ -1526,30 +1611,33 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetDash
g_assert (dasharr != NULL);
cairo_set_dash (gr->cr, dasharr, ndash, offset);
(*env)->ReleaseDoubleArrayElements (env, dashes, dasharr, 0);
gdk_threads_leave();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMiterLimit
(JNIEnv *env, jobject obj, jdouble miter)
{
struct graphics2d *gr = NULL;
gdk_threads_enter();
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMiterLimitUnlocked
(env, obj, miter);
gdk_threads_leave();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetMiterLimitUnlocked
(JNIEnv *env, jobject obj, jdouble miter)
{
struct graphics2d *gr = NULL;
if (peer_is_disposed(env, obj))
{
gdk_threads_leave ();
return;
}
return;
gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
g_assert (gr != NULL);
if (gr->debug) printf ("cairo_set_miter_limit %f\n", miter);
cairo_set_miter_limit (gr->cr, miter);
gdk_threads_leave();
}
JNIEXPORT void JNICALL
@@ -1845,15 +1933,22 @@ JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSurfaceSetFilter
(JNIEnv *env, jobject obj, jint filter)
{
struct graphics2d *gr = NULL;
gdk_threads_enter();
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSurfaceSetFilterUnlocked
(env, obj, filter);
gdk_threads_leave();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSurfaceSetFilterUnlocked
(JNIEnv *env, jobject obj, jint filter)
{
struct graphics2d *gr = NULL;
if (peer_is_disposed(env, obj))
{
gdk_threads_leave ();
return;
}
return;
gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
g_assert (gr != NULL);
@@ -1876,6 +1971,4 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSurfaceSetFilter
cairo_pattern_set_filter (gr->pattern, CAIRO_FILTER_BEST);
break;
}
gdk_threads_leave();
}
@@ -97,14 +97,10 @@ area_prepared_cb (GdkPixbufLoader *loader,
e.jni_env = &env;
(*vm)->GetEnv (vm, e.void_env, JNI_VERSION_1_1);
gdk_threads_leave ();
(*env)->CallVoidMethod (env,
*decoder,
areaPreparedID,
width, height);
gdk_threads_enter ();
}
static void
@@ -143,12 +139,8 @@ area_updated_cb (GdkPixbufLoader *loader,
e.jni_env = &env;
(*vm)->GetEnv (vm, e.void_env, JNI_VERSION_1_1);
gdk_threads_leave ();
jpixels = (*env)->NewIntArray (env, n_pixels);
gdk_threads_enter ();
java_pixels = (*env)->GetIntArrayElements (env, jpixels, NULL);
memcpy (java_pixels,
@@ -165,8 +157,6 @@ area_updated_cb (GdkPixbufLoader *loader,
g_object_unref (pixbuf);
gdk_threads_leave ();
(*env)->ReleaseIntArrayElements (env, jpixels, java_pixels, 0);
(*env)->CallVoidMethod (env,
@@ -178,8 +168,6 @@ area_updated_cb (GdkPixbufLoader *loader,
stride_pixels);
(*env)->DeleteLocalRef(env, jpixels);
gdk_threads_enter ();
}
static void
@@ -190,12 +178,8 @@ closed_cb (GdkPixbufLoader *loader __attribute__((unused)), jobject *decoder)
e.jni_env = &env;
(*vm)->GetEnv (vm, e.void_env, JNI_VERSION_1_1);
gdk_threads_leave ();
(*env)->DeleteGlobalRef (env, *decoder);
g_free (decoder);
gdk_threads_enter ();
}
@@ -311,12 +311,8 @@ Java_gnu_java_awt_peer_gtk_GdkRobotPeer_nativeGetRGBPixels
n_pixels = height * stride_pixels;
gdk_pixels = gdk_pixbuf_get_pixels (pixbuf);
gdk_threads_leave ();
jpixels = (*env)->NewIntArray (env, n_pixels);
gdk_threads_enter ();
java_pixels = (*env)->GetIntArrayElements (env, jpixels, NULL);
memcpy (java_pixels,
@@ -39,9 +39,8 @@ exception statement from your version. */
#include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GtkButtonPeer.h"
static jmethodID beginNativeRepaintID;
static jmethodID endNativeRepaintID;
static jmethodID postActionEventID;
void
cp_gtk_button_init_jni (void)
{
@@ -50,16 +49,13 @@ cp_gtk_button_init_jni (void)
gtkbuttonpeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
"gnu/java/awt/peer/gtk/GtkButtonPeer");
beginNativeRepaintID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkbuttonpeer,
"beginNativeRepaint",
"()V");
endNativeRepaintID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), gtkbuttonpeer,
"endNativeRepaint", "()V");
postActionEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
gtkbuttonpeer,
"postActionEvent", "(I)V");
}
static void block_expose_event_cb (GtkWidget *widget,
jobject peer);
static void clicked_cb (GtkButton *button,
jobject peer);
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create
@@ -86,6 +82,56 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetGetPreferredDimensions
(JNIEnv *env, jobject obj, jintArray jdims)
{
void *ptr;
jint *dims;
GtkWidget *button;
GtkWidget *label;
GtkRequisition current_req;
GtkRequisition current_label_req;
GtkRequisition natural_req;
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
button = gtk_bin_get_child (GTK_BIN (ptr));
label = gtk_bin_get_child (GTK_BIN (button));
dims = (*env)->GetIntArrayElements (env, jdims, 0);
dims[0] = dims[1] = 0;
/* Save the button's current size request. */
gtk_widget_size_request (GTK_WIDGET (button), &current_req);
/* Save the label's current size request. */
gtk_widget_size_request (GTK_WIDGET (label), &current_label_req);
/* Get the widget's "natural" size request. */
gtk_widget_set_size_request (GTK_WIDGET (button), -1, -1);
gtk_widget_set_size_request (GTK_WIDGET (label), -1, -1);
gtk_widget_size_request (GTK_WIDGET (button), &natural_req);
/* Reset the button's size request. */
gtk_widget_set_size_request (GTK_WIDGET (button),
current_req.width, current_req.height);
/* Reset the label's size request. */
gtk_widget_set_size_request (GTK_WIDGET (label),
current_label_req.width, current_label_req.height);
dims[0] = natural_req.width;
dims[1] = natural_req.height;
(*env)->ReleaseIntArrayElements (env, jdims, dims, 0);
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectSignals
(JNIEnv *env, jobject obj)
@@ -102,11 +148,8 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectSignals
button = gtk_bin_get_child (GTK_BIN (ptr));
/* Button signals */
g_signal_connect_after (G_OBJECT (button), "pressed",
G_CALLBACK (block_expose_event_cb), *gref);
g_signal_connect_after (G_OBJECT (button), "released",
G_CALLBACK (block_expose_event_cb), *gref);
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (clicked_cb), *gref);
/* Component signals */
cp_gtk_component_connect_signals (G_OBJECT (button), gref);
@@ -318,21 +361,17 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_setNativeBounds
}
static void
block_expose_event_cb (GtkWidget *widget, jobject peer)
clicked_cb (GtkButton* button __attribute__((unused)),
jobject peer)
{
gdk_threads_leave ();
GdkEventButton* event;
event = (GdkEventButton*) gtk_get_current_event ();
g_assert (event);
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
beginNativeRepaintID);
postActionEventID,
cp_gtk_state_to_awt_mods (event->state));
gdk_threads_enter ();
gdk_window_process_updates (widget->window, TRUE);
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
endNativeRepaintID);
gdk_threads_enter ();
gdk_event_free ((GdkEvent*) event);
}
@@ -227,14 +227,10 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkButtonSetLabel
static void
item_toggled_cb (GtkToggleButton *item, jobject peer)
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postItemEventID,
peer,
item->active ?
(jint) AWT_ITEM_SELECTED :
(jint) AWT_ITEM_DESELECTED);
gdk_threads_enter ();
}
@@ -187,18 +187,26 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeRemoveAll
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkChoicePeer_select
Java_gnu_java_awt_peer_gtk_GtkChoicePeer_selectNative
(JNIEnv *env, jobject obj, jint index)
{
gdk_threads_enter ();
Java_gnu_java_awt_peer_gtk_GtkChoicePeer_selectNativeUnlocked
(env, obj, index);
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkChoicePeer_selectNativeUnlocked
(JNIEnv *env, jobject obj, jint index)
{
void *ptr;
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
gtk_combo_box_set_active (GTK_COMBO_BOX (ptr), index);
gdk_threads_leave ();
}
JNIEXPORT jint JNICALL
@@ -219,7 +227,8 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeGetSelected
return index;
}
static void selection_changed_cb (GtkComboBox *combobox, jobject peer)
static void
selection_changed_cb (GtkComboBox *combobox, jobject peer)
{
jstring label;
GtkTreeModel *model;
@@ -236,13 +245,9 @@ static void selection_changed_cb (GtkComboBox *combobox, jobject peer)
gtk_tree_model_get (model, &iter, 0, &selected, -1);
label = (*cp_gtk_gdk_env())->NewStringUTF (cp_gtk_gdk_env(), selected);
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postChoiceItemEventID,
label,
(jint) AWT_ITEM_SELECTED);
gdk_threads_enter ();
}
}
@@ -1,5 +1,5 @@
/* gtkclipboard.c
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
Copyright (C) 1998, 1999, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -36,169 +36,377 @@ obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
#include "jcl.h"
#include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GtkClipboard.h"
static jmethodID stringSelectionReceivedID;
static jmethodID stringSelectionHandlerID;
static jmethodID selectionClearID;
#define OBJECT_TARGET 1
#define TEXT_TARGET 2
#define IMAGE_TARGET 3
#define URI_TARGET 4
static void selection_received_cb (GtkWidget *, GtkSelectionData *,
guint, gpointer);
static void selection_get_cb (GtkWidget *, GtkSelectionData *, guint,
guint, gpointer);
static gint selection_clear_cb (GtkWidget *, GdkEventSelection *);
/* The clipboard and standard (string targets) shared with GtkSelection. */
GtkClipboard *cp_gtk_clipboard;
static GtkWidget *clipboard;
static jobject cb_obj;
jstring cp_gtk_stringTarget;
jstring cp_gtk_imageTarget;
jstring cp_gtk_filesTarget;
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkClipboard_initNativeState (JNIEnv *env,
jobject obj)
{
gdk_threads_enter ();
/* Simple id to keep track of the selection we are currently managing. */
static int current_selection = 0;
if (!stringSelectionReceivedID)
{
jclass gtkclipboard;
/* Whether we "own" the clipboard. And may clear it. */
static int owner = 0;
gtkclipboard = (*env)->FindClass (env,
"gnu/java/awt/peer/gtk/GtkClipboard");
stringSelectionReceivedID = (*env)->GetMethodID (env, gtkclipboard,
"stringSelectionReceived",
"(Ljava/lang/String;)V");
stringSelectionHandlerID = (*env)->GetMethodID (env, gtkclipboard,
"stringSelectionHandler",
"()Ljava/lang/String;");
selectionClearID = (*env)->GetMethodID (env, gtkclipboard,
"selectionClear", "()V");
}
static jclass gtk_clipboard_class;
static jmethodID setSystemContentsID;
cb_obj = (*env)->NewGlobalRef (env, obj);
clipboard = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (G_OBJECT(clipboard), "selection_received",
G_CALLBACK (selection_received_cb), NULL);
g_signal_connect (G_OBJECT(clipboard), "selection_clear_event",
G_CALLBACK (selection_clear_cb), NULL);
gtk_selection_add_target (clipboard, GDK_SELECTION_PRIMARY,
GDK_TARGET_STRING, 0);
g_signal_connect (G_OBJECT(clipboard), "selection_get",
G_CALLBACK (selection_get_cb), NULL);
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkClipboard_requestStringConversion
(JNIEnv *env __attribute__((unused)), jclass clazz __attribute__((unused)))
{
gdk_threads_enter ();
gtk_selection_convert (clipboard, GDK_SELECTION_PRIMARY,
GDK_TARGET_STRING, GDK_CURRENT_TIME);
gdk_threads_leave ();
}
static jobject gtk_clipboard_instance = NULL;
static jmethodID provideContentID;
static jmethodID provideTextID;
static jmethodID provideImageID;
static jmethodID provideURIsID;
/* Called when clipboard owner changes. Used to update available targets. */
#if GTK_MINOR_VERSION > 4
static void
selection_received_cb (GtkWidget *widget __attribute__((unused)),
GtkSelectionData *selection_data __attribute__((unused)),
guint time __attribute__((unused)),
gpointer data __attribute__((unused)))
clipboard_owner_change_cb (GtkClipboard *clipboard __attribute__((unused)),
GdkEvent *event __attribute__((unused)),
gpointer user_data __attribute__((unused)))
{
/* Check to see if retrieval succeeded */
if (selection_data->length < 0
|| selection_data->type != GDK_SELECTION_TYPE_STRING)
/* These are only interesting when we are not the owner. Otherwise
we will have the set and clear functions doing the updating. */
JNIEnv *env = cp_gtk_gdk_env ();
if (!owner)
(*env)->CallStaticVoidMethod (env, gtk_clipboard_class,
setSystemContentsID);
}
#endif
JNIEXPORT jboolean JNICALL
Java_gnu_java_awt_peer_gtk_GtkClipboard_initNativeState (JNIEnv *env,
jclass gtkclipboard,
jstring string,
jstring image,
jstring files)
{
GdkDisplay* display;
jboolean can_cache;
gtk_clipboard_class = gtkclipboard;
setSystemContentsID = (*env)->GetStaticMethodID (env, gtk_clipboard_class,
"setSystemContents",
"()V");
if (setSystemContentsID == NULL)
return JNI_FALSE;
cp_gtk_stringTarget = (*env)->NewGlobalRef(env, string);
cp_gtk_imageTarget = (*env)->NewGlobalRef(env, image);
cp_gtk_filesTarget = (*env)->NewGlobalRef(env, files);
gdk_threads_enter ();
cp_gtk_clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
display = gtk_clipboard_get_display (cp_gtk_clipboard);
/* Check for support for clipboard owner changes. */
#if GTK_MINOR_VERSION > 4
if (gdk_display_supports_selection_notification (display))
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), cb_obj, stringSelectionReceivedID,
NULL);
gdk_threads_enter ();
g_signal_connect (cp_gtk_clipboard, "owner-change",
G_CALLBACK (clipboard_owner_change_cb), NULL);
gdk_display_request_selection_notification (display,
GDK_SELECTION_CLIPBOARD);
can_cache = JNI_TRUE;
}
else
{
char *str = (char *) selection_data->data;
gdk_threads_leave ();
#endif
can_cache = JNI_FALSE;
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), cb_obj, stringSelectionReceivedID,
(*cp_gtk_gdk_env())->NewStringUTF (cp_gtk_gdk_env(), str));
gdk_threads_enter ();
}
return;
return can_cache;
}
static void
selection_get_cb (GtkWidget *widget __attribute__((unused)),
GtkSelectionData *selection_data,
guint info __attribute__((unused)),
guint time __attribute__((unused)),
gpointer data __attribute__((unused)))
clipboard_get_func (GtkClipboard *clipboard __attribute__((unused)),
GtkSelectionData *selection,
guint info,
gpointer user_data __attribute__((unused)))
{
jstring jstr;
const char *utf;
jsize utflen;
gdk_threads_leave ();
jstr = (*cp_gtk_gdk_env())->CallObjectMethod (cp_gtk_gdk_env(), cb_obj,
stringSelectionHandlerID);
gdk_threads_enter ();
if (!jstr)
JNIEnv *env = cp_gtk_gdk_env ();
if (info == OBJECT_TARGET)
{
gtk_selection_data_set (selection_data,
GDK_TARGET_STRING, 8, NULL, 0);
return;
const gchar *target_name;
jstring target_string;
jbyteArray bytes;
jint len;
jbyte *barray;
target_name = gdk_atom_name (selection->target);
if (target_name == NULL)
return;
target_string = (*env)->NewStringUTF (env, target_name);
if (target_string == NULL)
return;
bytes = (*env)->CallObjectMethod(env,
gtk_clipboard_instance,
provideContentID,
target_string);
if (bytes == NULL)
return;
len = (*env)->GetArrayLength(env, bytes);
if (len <= 0)
return;
barray = (*env)->GetByteArrayElements(env, bytes, NULL);
if (barray == NULL)
return;
gtk_selection_data_set (selection, selection->target, 8,
(guchar *) barray, len);
(*env)->ReleaseByteArrayElements(env, bytes, barray, 0);
}
else if (info == TEXT_TARGET)
{
jstring string;
const gchar *text;
int len;
string = (*env)->CallObjectMethod(env,
gtk_clipboard_instance,
provideTextID);
if (string == NULL)
return;
len = (*env)->GetStringUTFLength (env, string);
if (len == -1)
return;
text = (*env)->GetStringUTFChars (env, string, NULL);
if (text == NULL)
return;
utflen = (*cp_gtk_gdk_env())->GetStringUTFLength (cp_gtk_gdk_env(), jstr);
utf = (*cp_gtk_gdk_env())->GetStringUTFChars (cp_gtk_gdk_env(), jstr, NULL);
gtk_selection_data_set_text (selection, text, len);
(*env)->ReleaseStringUTFChars (env, string, text);
}
/* Images and URIs/Files support only available with gtk+2.6 or higher. */
#if GTK_MINOR_VERSION > 4
else if (info == IMAGE_TARGET)
{
jobject gtkimage;
GdkPixbuf *pixbuf = NULL;
gtkimage = (*env)->CallObjectMethod(env,
gtk_clipboard_instance,
provideImageID);
if (gtkimage == NULL)
return;
pixbuf = cp_gtk_image_get_pixbuf (env, gtkimage);
if (pixbuf != NULL)
{
gtk_selection_data_set_pixbuf (selection, pixbuf);
gtk_selection_data_set (selection_data, GDK_TARGET_STRING, 8,
(const unsigned char*)utf, utflen);
/* if the GtkImage is offscreen, this is a temporary pixbuf
which should be thrown out. */
if(cp_gtk_image_is_offscreen (env, gtkimage) == JNI_TRUE)
gdk_pixbuf_unref (pixbuf);
}
}
else if (info == URI_TARGET)
{
jobjectArray uris;
jint count;
int i;
gchar **list;
(*cp_gtk_gdk_env())->ReleaseStringUTFChars (cp_gtk_gdk_env(), jstr, utf);
uris = (*env)->CallObjectMethod(env,
gtk_clipboard_instance,
provideURIsID);
if (uris == NULL)
return;
count = (*env)->GetArrayLength (env, uris);
if (count <= 0)
return;
list = (gchar **) JCL_malloc (env, (count + 1) * sizeof (gchar *));
for (i = 0; i < count; i++)
{
const char *text;
jstring uri;
/* Mark NULL in so case of some error we can find the end. */
list[i] = NULL;
uri = (*env)->GetObjectArrayElement (env, uris, i);
if (uri == NULL)
break;
text = (*env)->GetStringUTFChars (env, uri, NULL);
if (text == NULL)
break;
list[i] = strdup (text);
(*env)->ReleaseStringUTFChars (env, uri, text);
}
if (i == count)
{
list[count] = NULL;
gtk_selection_data_set_uris (selection, list);
}
for (i = 0; list[i] != NULL; i++)
free (list[i]);
JCL_free (env, list);
}
#endif
}
static void
clipboard_clear_func (GtkClipboard *clipboard __attribute__((unused)),
gpointer user_data)
{
if (owner && (int) user_data == current_selection)
{
JNIEnv *env = cp_gtk_gdk_env();
owner = 0;
(*env)->CallStaticVoidMethod (env, gtk_clipboard_class,
setSystemContentsID);
}
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkClipboard_selectionGet
(JNIEnv *env, jclass clazz __attribute__((unused)))
Java_gnu_java_awt_peer_gtk_GtkClipboard_advertiseContent
(JNIEnv *env,
jobject instance,
jobjectArray mime_array,
#if GTK_MINOR_VERSION > 4
jboolean add_text, jboolean add_images, jboolean add_uris)
#else
jboolean add_text __attribute__((unused)),
jboolean add_images __attribute__((unused)),
jboolean add_uris __attribute__((unused)))
#endif
{
GdkWindow *owner;
GtkTargetList *target_list;
GList *list;
GtkTargetEntry *targets;
gint n, i;
gdk_threads_enter ();
target_list = gtk_target_list_new (NULL, 0);
/* if we already own the clipboard, we need to tell the old data object
that we're no longer going to be using him */
owner = gdk_selection_owner_get (GDK_SELECTION_PRIMARY);
if (owner && owner == clipboard->window)
(*env)->CallVoidMethod (env, cb_obj, selectionClearID);
gtk_selection_owner_set (clipboard, GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME);
if (mime_array != NULL)
{
n = (*env)->GetArrayLength (env, mime_array);
for (i = 0; i < n; i++)
{
const char *text;
jstring target;
GdkAtom atom;
target = (*env)->GetObjectArrayElement (env, mime_array, i);
if (target == NULL)
break;
text = (*env)->GetStringUTFChars (env, target, NULL);
if (text == NULL)
break;
atom = gdk_atom_intern (text, FALSE);
gtk_target_list_add (target_list, atom, 0, OBJECT_TARGET);
(*env)->ReleaseStringUTFChars (env, target, text);
}
}
/* Add extra targets that gtk+ can provide/translate for us. */
#if GTK_MINOR_VERSION > 4
if (add_text)
gtk_target_list_add_text_targets (target_list, TEXT_TARGET);
if (add_images)
gtk_target_list_add_image_targets (target_list, IMAGE_TARGET, TRUE);
if (add_uris)
gtk_target_list_add_uri_targets (target_list, URI_TARGET);
#else
if (add_text)
gtk_target_list_add (target_list,
gdk_atom_intern ("STRING", FALSE),
0, TEXT_TARGET);
#endif
/* Turn list into a target table. */
n = g_list_length (target_list->list);
if (n > 0)
{
targets = g_new (GtkTargetEntry, n);
for (list = target_list->list, i = 0;
list != NULL;
list = list->next, i++)
{
GtkTargetPair *pair = (GtkTargetPair *) list->data;
targets[i].target = gdk_atom_name (pair->target);
targets[i].flags = pair->flags;
targets[i].info = pair->info;
}
/* Set the targets plus callback functions and ask for the clipboard
to be stored when the application exists if supported. */
current_selection++;
if (gtk_clipboard_set_with_data (cp_gtk_clipboard, targets, n,
clipboard_get_func,
clipboard_clear_func,
(gpointer) current_selection))
{
owner = 1;
if (gtk_clipboard_instance == NULL)
{
JNIEnv *env = cp_gtk_gdk_env ();
gtk_clipboard_instance = (*env)->NewGlobalRef(env, instance);
provideContentID
= (*env)->GetMethodID (env, gtk_clipboard_class,
"provideContent",
"(Ljava/lang/String;)[B");
if (provideContentID == NULL)
return;
provideTextID
= (*env)->GetMethodID (env, gtk_clipboard_class,
"provideText", "()Ljava/lang/String;");
if (provideTextID == NULL)
return;
provideImageID
= (*env)->GetMethodID (env, gtk_clipboard_class,
"provideImage",
"()Lgnu/java/awt/peer/gtk/GtkImage;");
if (provideImageID == NULL)
return;
provideURIsID
= (*env)->GetMethodID (env, gtk_clipboard_class,
"provideURIs",
"()[Ljava/lang/String;");
if (provideURIsID == NULL)
return;
}
#if GTK_MINOR_VERSION > 4
gtk_clipboard_set_can_store (cp_gtk_clipboard, NULL, 0);
#endif
}
else
{
owner = 0;
(*env)->CallStaticVoidMethod (env, gtk_clipboard_class,
setSystemContentsID);
}
for (i = 0; i < n; i++)
g_free (targets[i].target);
g_free (targets);
}
else if (owner)
{
gtk_clipboard_clear (cp_gtk_clipboard);
owner = 0;
}
gtk_target_list_unref (target_list);
gdk_threads_leave ();
}
static gint
selection_clear_cb (GtkWidget *widget __attribute__((unused)),
GdkEventSelection *event __attribute__((unused)))
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), cb_obj, selectionClearID);
gdk_threads_enter ();
return TRUE;
}
@@ -145,8 +145,8 @@ button_to_awt_mods (int button)
return 0;
}
static jint
state_to_awt_mods (guint state)
jint
cp_gtk_state_to_awt_mods (guint state)
{
jint result = 0;
@@ -184,14 +184,24 @@ state_to_awt_mods_with_button_states (guint state)
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursor
(JNIEnv *env, jobject obj, jint type)
{
gdk_threads_enter ();
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursorUnlocked
(env, obj, type);
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursorUnlocked
(JNIEnv *env, jobject obj, jint type)
{
void *ptr;
GtkWidget *widget;
GdkCursorType gdk_cursor_type;
GdkCursor *gdk_cursor;
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
switch (type)
@@ -244,8 +254,6 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursor
gdk_cursor = gdk_cursor_new (gdk_cursor_type);
gdk_window_set_cursor (widget->window, gdk_cursor);
gdk_cursor_destroy (gdk_cursor);
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
@@ -602,12 +610,8 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetBackground
bg = GTK_WIDGET (ptr)->style->bg[GTK_STATE_NORMAL];
gdk_threads_leave ();
array = (*env)->NewIntArray (env, 3);
gdk_threads_enter ();
rgb = (*env)->GetIntArrayElements (env, array, NULL);
/* convert color data from 16 bit values down to 8 bit values */
rgb[0] = bg.red >> 8;
@@ -635,12 +639,8 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetForeground
fg = GTK_WIDGET (ptr)->style->fg[GTK_STATE_NORMAL];
gdk_threads_leave ();
array = (*env)->NewIntArray (env, 3);
gdk_threads_enter ();
rgb = (*env)->GetIntArrayElements (env, array, NULL);
/* convert color data from 16 bit values down to 8 bit values */
rgb[0] = fg.red >> 8;
@@ -711,33 +711,29 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetForeground
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_show
(JNIEnv *env, jobject obj)
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setVisibleNative
(JNIEnv *env, jobject obj, jboolean visible)
{
void *ptr;
gdk_threads_enter();
ptr = NSA_GET_PTR (env, obj);
gtk_widget_show (GTK_WIDGET (ptr));
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setVisibleNativeUnlocked
(env, obj, visible);
gdk_threads_leave();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_hide
(JNIEnv *env, jobject obj)
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setVisibleNativeUnlocked
(JNIEnv *env, jobject obj, jboolean visible)
{
void *ptr;
gdk_threads_enter();
ptr = NSA_GET_PTR (env, obj);
gtk_widget_hide (GTK_WIDGET (ptr));
gdk_threads_leave();
if (visible)
gtk_widget_show (GTK_WIDGET (ptr));
else
gtk_widget_hide (GTK_WIDGET (ptr));
}
JNIEXPORT jboolean JNICALL
@@ -940,13 +936,11 @@ component_button_press_cb (GtkWidget *widget __attribute__((unused)),
button_window = event->window;
button_number = event->button;
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postMouseEventID,
AWT_MOUSE_PRESSED,
(jlong)event->time,
state_to_awt_mods (event->state)
cp_gtk_state_to_awt_mods (event->state)
| button_to_awt_mods (event->button),
(jint)event->x,
(jint)event->y,
@@ -954,8 +948,6 @@ component_button_press_cb (GtkWidget *widget __attribute__((unused)),
(event->button == 3) ? JNI_TRUE :
JNI_FALSE);
gdk_threads_enter ();
hasBeenDragged = FALSE;
return FALSE;
@@ -968,21 +960,17 @@ component_button_release_cb (GtkWidget *widget __attribute__((unused)),
{
int width, height;
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postMouseEventID,
AWT_MOUSE_RELEASED,
(jlong)event->time,
state_to_awt_mods (event->state)
cp_gtk_state_to_awt_mods (event->state)
| button_to_awt_mods (event->button),
(jint)event->x,
(jint)event->y,
click_count,
JNI_FALSE);
gdk_threads_enter ();
/* Generate an AWT click event only if the release occured in the
window it was pressed in, and the mouse has not been dragged since
the last time it was pressed. */
@@ -993,20 +981,16 @@ component_button_release_cb (GtkWidget *widget __attribute__((unused)),
&& event->x <= width
&& event->y <= height)
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postMouseEventID,
AWT_MOUSE_CLICKED,
(jlong)event->time,
state_to_awt_mods (event->state)
cp_gtk_state_to_awt_mods (event->state)
| button_to_awt_mods (event->button),
(jint)event->x,
(jint)event->y,
click_count,
JNI_FALSE);
gdk_threads_enter ();
}
return FALSE;
}
@@ -1022,8 +1006,6 @@ component_motion_notify_cb (GtkWidget *widget __attribute__((unused)),
| GDK_BUTTON4_MASK
| GDK_BUTTON5_MASK))
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postMouseEventID,
AWT_MOUSE_DRAGGED,
@@ -1034,24 +1016,18 @@ component_motion_notify_cb (GtkWidget *widget __attribute__((unused)),
0,
JNI_FALSE);
gdk_threads_enter ();
hasBeenDragged = TRUE;
}
else
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, postMouseEventID,
AWT_MOUSE_MOVED,
(jlong)event->time,
state_to_awt_mods (event->state),
cp_gtk_state_to_awt_mods (event->state),
(jint)event->x,
(jint)event->y,
0,
JNI_FALSE);
gdk_threads_enter ();
}
return FALSE;
}
@@ -1065,8 +1041,6 @@ component_enter_notify_cb (GtkWidget *widget __attribute__((unused)),
grab/ungrab and not to actually crossing boundaries */
if (event->mode == GDK_CROSSING_NORMAL)
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, postMouseEventID,
AWT_MOUSE_ENTERED,
(jlong)event->time,
@@ -1075,8 +1049,6 @@ component_enter_notify_cb (GtkWidget *widget __attribute__((unused)),
(jint)event->y,
0,
JNI_FALSE);
gdk_threads_enter ();
}
return FALSE;
}
@@ -1090,8 +1062,6 @@ component_leave_notify_cb (GtkWidget *widget __attribute__((unused)),
grab/ungrab and not to actually crossing boundaries */
if (event->mode == GDK_CROSSING_NORMAL)
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postMouseEventID,
AWT_MOUSE_EXITED,
@@ -1101,8 +1071,6 @@ component_leave_notify_cb (GtkWidget *widget __attribute__((unused)),
(jint)event->y,
0,
JNI_FALSE);
gdk_threads_enter ();
}
return FALSE;
}
@@ -1112,8 +1080,6 @@ component_expose_cb (GtkWidget *widget __attribute__((unused)),
GdkEventExpose *event,
jobject peer)
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postExposeEventID,
(jint)event->area.x,
@@ -1121,8 +1087,6 @@ component_expose_cb (GtkWidget *widget __attribute__((unused)),
(jint)event->area.width,
(jint)event->area.height);
gdk_threads_enter ();
return FALSE;
}
@@ -1131,15 +1095,11 @@ component_focus_in_cb (GtkWidget *widget __attribute((unused)),
GdkEventFocus *event __attribute((unused)),
jobject peer)
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postFocusEventID,
AWT_FOCUS_GAINED,
JNI_FALSE);
gdk_threads_enter ();
return FALSE;
}
@@ -1148,14 +1108,10 @@ component_focus_out_cb (GtkWidget *widget __attribute((unused)),
GdkEventFocus *event __attribute((unused)),
jobject peer)
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postFocusEventID,
AWT_FOCUS_LOST,
JNI_FALSE);
gdk_threads_enter ();
return FALSE;
}
@@ -40,17 +40,57 @@ exception statement from your version. */
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
#include "gnu_java_awt_peer_gtk_GtkFileDialogPeer.h"
#define AWT_FILEDIALOG_LOAD 0
#define AWT_FILEDIALOG_SAVE 1
static void handle_response_cb (GtkDialog *dialog,
gint responseId,
jobject peer_obj);
static jmethodID gtkSetFilenameID;
static jmethodID gtkHideFileDialogID;
static jmethodID gtkDisposeFileDialogID;
static jmethodID filenameFilterCallbackID;
void
cp_gtk_filedialog_init_jni (void)
{
jclass gtkfiledialogpeer;
gtkfiledialogpeer =
(*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
"gnu/java/awt/peer/gtk/GtkFileDialogPeer");
gtkDisposeFileDialogID =
(*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
gtkfiledialogpeer,
"gtkDisposeFileDialog", "()V");
gtkHideFileDialogID =
(*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
gtkfiledialogpeer,
"gtkHideFileDialog", "()V");
gtkSetFilenameID =
(*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
gtkfiledialogpeer,
"gtkSetFilename",
"(Ljava/lang/String;)V");
filenameFilterCallbackID =
(*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
gtkfiledialogpeer,
"filenameFilterCallback",
"(Ljava/lang/String;)Z");
}
/*
* Make a new file selection dialog
*/
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create
(JNIEnv *env, jobject obj, jobject parent)
(JNIEnv *env, jobject obj, jobject parent, int mode)
{
void *parentp;
gpointer widget;
@@ -62,19 +102,31 @@ Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create
parentp = NSA_GET_PTR(env, parent);
/* FIXME: we should be using the default gnome-vfs backend but it is
not currently thread-safe. See:
http://bugzilla.gnome.org/show_bug.cgi?id=166852 */
widget = gtk_file_chooser_dialog_new_with_backend
("Open File",
GTK_WINDOW(parentp),
GTK_FILE_CHOOSER_ACTION_OPEN,
"gtk+",
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
NULL);
if (mode == AWT_FILEDIALOG_LOAD)
widget = gtk_file_chooser_dialog_new
("Open File",
GTK_WINDOW(parentp),
GTK_FILE_CHOOSER_ACTION_OPEN,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
NULL);
else
{
widget = gtk_file_chooser_dialog_new
("Save File",
GTK_WINDOW(parentp),
GTK_FILE_CHOOSER_ACTION_SAVE,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
NULL);
#if GTK_MINOR_VERSION >= 8
gtk_file_chooser_set_do_overwrite_confirmation
(GTK_FILE_CHOOSER (widget), TRUE);
#endif
}
/* GtkFileSelect is not modal by default */
/* GtkFileChooserDialog is not modal by default */
gtk_window_set_modal (GTK_WINDOW (widget), TRUE);
/* We must add this window to the group so input in the others are
@@ -132,25 +184,17 @@ Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeGetDirectory
This function extracts the filename from the GtkFileFilterInfo object,
and passes it to the Java method. The Java method will call the filter's
accept() method and will give back the return value. */
static gboolean filenameFilterCallback (const GtkFileFilterInfo *filter_info,
static gboolean filename_filter_cb (const GtkFileFilterInfo *filter_info,
gpointer obj)
{
jclass cx;
jmethodID id;
jstring *filename;
gboolean accepted;
cx = (*cp_gtk_gdk_env())->GetObjectClass (cp_gtk_gdk_env(), (jobject) obj);
id = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), cx, "filenameFilterCallback",
"(Ljava/lang/String;)Z");
filename = (*cp_gtk_gdk_env())->NewStringUTF(cp_gtk_gdk_env(), filter_info->filename);
gdk_threads_leave();
accepted = (*cp_gtk_gdk_env())->CallBooleanMethod(cp_gtk_gdk_env(), obj, id, filename);
gdk_threads_enter();
accepted = (*cp_gtk_gdk_env())->CallBooleanMethod(cp_gtk_gdk_env(), obj,
filenameFilterCallbackID,
filename);
return accepted;
}
@@ -168,7 +212,7 @@ Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFilenameFilter
filter = gtk_file_filter_new();
gtk_file_filter_add_custom(filter, GTK_FILE_FILTER_FILENAME,
filenameFilterCallback, obj, NULL);
filename_filter_cb, obj, NULL);
gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(ptr), filter);
@@ -220,11 +264,6 @@ handle_response_cb (GtkDialog *dialog __attribute__((unused)),
gint responseId,
jobject peer_obj)
{
static int isDisposeIDSet = 0;
static int isIDSet = 0;
static jmethodID gtkSetFilenameID;
static jmethodID hideID;
static jmethodID disposeID;
void *ptr;
G_CONST_RETURN gchar *fileName;
jstring str_fileName = NULL;
@@ -240,42 +279,24 @@ handle_response_cb (GtkDialog *dialog __attribute__((unused)),
if (responseId == GTK_RESPONSE_DELETE_EVENT)
{
if (!isDisposeIDSet)
{
jclass cx = (*cp_gtk_gdk_env())->GetObjectClass (cp_gtk_gdk_env(), peer_obj);
disposeID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), cx, "gtkDisposeFileDialog", "()V");
isDisposeIDSet = 1;
}
/* We can dispose of the dialog now (and unblock show) */
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer_obj, disposeID);
gdk_threads_enter ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer_obj,
gtkDisposeFileDialogID);
return;
}
if (responseId == GTK_RESPONSE_ACCEPT) {
fileName = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (GTK_WIDGET (ptr)));
str_fileName = (*cp_gtk_gdk_env())->NewStringUTF (cp_gtk_gdk_env(), fileName);
}
if (!isIDSet)
if (responseId == GTK_RESPONSE_ACCEPT)
{
jclass cx = (*cp_gtk_gdk_env())->GetObjectClass (cp_gtk_gdk_env(), peer_obj);
hideID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), cx, "gtkHideFileDialog", "()V");
gtkSetFilenameID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), cx,
"gtkSetFilename", "(Ljava/lang/String;)V");
isIDSet = 1;
fileName = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (GTK_WIDGET (ptr)));
str_fileName = (*cp_gtk_gdk_env())->NewStringUTF (cp_gtk_gdk_env(), fileName);
}
/* Set the Java object field 'file' with this value. */
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer_obj, gtkSetFilenameID, str_fileName);
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer_obj,
gtkSetFilenameID, str_fileName);
/* We can hide the dialog now (and unblock show) */
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer_obj, hideID);
gdk_threads_enter ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer_obj,
gtkHideFileDialogID);
}
@@ -85,11 +85,15 @@ Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarPeer
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
mptr = NSA_GET_PTR (env, menubar);
fixed = gtk_container_get_children (GTK_CONTAINER (ptr))->data;
gtk_fixed_put (GTK_FIXED (fixed), mptr, 0, 0);
gtk_widget_show (mptr);
if (menubar)
{
mptr = NSA_GET_PTR (env, menubar);
fixed = gtk_container_get_children (GTK_CONTAINER (ptr))->data;
gtk_fixed_put (GTK_FIXED (fixed), mptr, 0, 0);
gtk_widget_show (mptr);
}
gdk_threads_leave ();
}
@@ -114,24 +118,35 @@ Java_gnu_java_awt_peer_gtk_GtkFramePeer_getMenuBarHeight
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarWidth
(JNIEnv *env, jobject obj, jobject menubar, jint width)
{
gdk_threads_enter ();
Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarWidthUnlocked
(env, obj, menubar, width);
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarWidthUnlocked
(JNIEnv *env, jobject obj __attribute__((unused)), jobject menubar, jint width)
{
GtkWidget *ptr;
GtkRequisition natural_req;
gdk_threads_enter ();
if (menubar)
{
ptr = NSA_GET_PTR (env, menubar);
ptr = NSA_GET_PTR (env, menubar);
/* Get the menubar's natural size request. */
gtk_widget_set_size_request (GTK_WIDGET (ptr), -1, -1);
gtk_widget_size_request (GTK_WIDGET (ptr), &natural_req);
/* Get the menubar's natural size request. */
gtk_widget_set_size_request (GTK_WIDGET (ptr), -1, -1);
gtk_widget_size_request (GTK_WIDGET (ptr), &natural_req);
/* Set the menubar's size request to width by natural_req.height. */
gtk_widget_set_size_request (GTK_WIDGET (ptr),
width, natural_req.height);
gdk_threads_leave ();
/* Set the menubar's size request to width by natural_req.height. */
gtk_widget_set_size_request (GTK_WIDGET (ptr),
width, natural_req.height);
}
}
JNIEXPORT void JNICALL
@@ -58,13 +58,6 @@ Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose
NSA_DEL_PTR (env, obj);
gdk_threads_leave ();
/*
* Wake up the main thread, to make sure it re-checks the window
* destruction condition.
*/
g_main_context_wakeup (NULL);
}
JNIEXPORT void JNICALL
@@ -35,6 +35,7 @@ this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
#include "jcl.h"
#include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GtkImage.h"
#include <gdk-pixbuf/gdk-pixbuf.h>
@@ -96,6 +97,67 @@ Java_gnu_java_awt_peer_gtk_GtkImage_loadPixbuf
return JNI_TRUE;
}
/*
* Creates the image from an array of java bytes.
*/
JNIEXPORT jboolean JNICALL
Java_gnu_java_awt_peer_gtk_GtkImage_loadImageFromData
(JNIEnv *env, jobject obj, jbyteArray data)
{
jbyte *src;
GdkPixbuf* pixbuf;
GdkPixbufLoader* loader;
int len;
int width;
int height;
gdk_threads_enter ();
src = (*env)->GetByteArrayElements (env, data, NULL);
len = (*env)->GetArrayLength (env, data);
loader = gdk_pixbuf_loader_new ();
gdk_pixbuf_loader_write (loader, (guchar *)src, len, NULL);
gdk_pixbuf_loader_close (loader, NULL);
(*env)->ReleaseByteArrayElements (env, data, src, 0);
pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
if (pixbuf == NULL)
{
createRawData (env, obj, NULL);
gdk_threads_leave ();
return JNI_FALSE;
}
width = gdk_pixbuf_get_width (pixbuf);
height = gdk_pixbuf_get_height (pixbuf);
createRawData (env, obj, pixbuf);
setWidthHeight(env, obj, width, height);
gdk_threads_leave ();
return JNI_TRUE;
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkImage_createFromPixbuf
(JNIEnv *env, jobject obj)
{
int width, heigth;
GdkPixbuf *pixbuf = (GdkPixbuf *) getData (env, obj);
gdk_threads_enter ();
width = gdk_pixbuf_get_width (pixbuf);
heigth = gdk_pixbuf_get_height (pixbuf);
gdk_threads_leave ();
setWidthHeight(env, obj, width, heigth);
}
/**
* Returns a copy of the pixel data as a java array.
*/
@@ -116,15 +178,8 @@ Java_gnu_java_awt_peer_gtk_GtkImage_getPixels(JNIEnv *env, jobject obj)
height = gdk_pixbuf_get_height (pixbuf);
rowstride = gdk_pixbuf_get_rowstride (pixbuf);
/* Must release the GDK lock before allocating memory through the
JVM, since some JVMs use the same lock for allocations and
finalization. Deadlock can occur on those JVMs. */
gdk_threads_leave ();
result_array = (*env)->NewIntArray (env, (width * height));
gdk_threads_enter ();
dst = result_array_iter =
(*env)->GetIntArrayElements (env, result_array, NULL);
@@ -307,10 +362,16 @@ Java_gnu_java_awt_peer_gtk_GtkImage_drawPixelsScaled
gdk_threads_enter ();
if (width <= 0 || height <= 0)
{
gdk_threads_leave ();
return;
}
bgColor = ((bg_red & 0xFF) << 16) |
((bg_green & 0xFF) << 8) | (bg_blue & 0xFF);
g = (struct graphics *) NSA_GET_PTR (env, gc_obj);
g = (struct graphics *) NSA_GET_G_PTR (env, gc_obj);
if (!g || !GDK_IS_DRAWABLE (g->drawable))
{
@@ -368,7 +429,12 @@ JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkImage_drawPixelsScaledFlipped
(JNIEnv *env, jobject obj, jobject gc_obj,
jint bg_red, jint bg_green, jint bg_blue,
#if GTK_MINOR_VERSION > 4
jboolean flipx, jboolean flipy,
#else
jboolean flipx __attribute__((unused)),
jboolean flipy __attribute__((unused)),
#endif
jint srcx, jint srcy, jint srcwidth, jint srcheight,
jint dstx, jint dsty, jint dstwidth, jint dstheight,
jboolean composite)
@@ -380,10 +446,17 @@ Java_gnu_java_awt_peer_gtk_GtkImage_drawPixelsScaledFlipped
gdk_threads_enter ();
if (srcwidth <= 0 || srcheight <= 0
|| dstwidth <= 0 || dstheight <= 0)
{
gdk_threads_leave ();
return;
}
bgColor = ((bg_red & 0xFF) << 16) |
((bg_green & 0xFF) << 8) | (bg_blue & 0xFF);
g = (struct graphics *) NSA_GET_PTR (env, gc_obj);
g = (struct graphics *) NSA_GET_G_PTR (env, gc_obj);
if (!g || !GDK_IS_DRAWABLE (g->drawable))
{
@@ -573,24 +646,15 @@ static void
createRawData (JNIEnv * env, jobject obj, void *ptr)
{
jclass cls;
jmethodID method;
jobject data;
jfieldID data_fid;
cls = (*env)->GetObjectClass (env, obj);
data_fid = (*env)->GetFieldID (env, cls, "pixmap",
"Lgnu/classpath/RawData;");
"Lgnu/classpath/Pointer;");
g_assert (data_fid != 0);
#if SIZEOF_VOID_P == 8
cls = (*env)->FindClass (env, "gnu/classpath/RawData64");
method = (*env)->GetMethodID (env, cls, "<init>", "(J)V");
data = (*env)->NewObject (env, cls, method, (jlong) ptr);
#else
cls = (*env)->FindClass (env, "gnu/classpath/RawData32");
method = (*env)->GetMethodID (env, cls, "<init>", "(I)V");
data = (*env)->NewObject (env, cls, method, (jint) ptr);
#endif
data = JCL_NewRawDataObject (env, ptr);
(*env)->SetObjectField (env, obj, data_fid, data);
}
@@ -599,23 +663,14 @@ static void *
getData (JNIEnv * env, jobject obj)
{
jclass cls;
jfieldID field;
jfieldID data_fid;
jobject data;
cls = (*env)->GetObjectClass (env, obj);
data_fid = (*env)->GetFieldID (env, cls, "pixmap",
"Lgnu/classpath/RawData;");
"Lgnu/classpath/Pointer;");
g_assert (data_fid != 0);
data = (*env)->GetObjectField (env, obj, data_fid);
#if SIZEOF_VOID_P == 8
cls = (*env)->FindClass (env, "gnu/classpath/RawData64");
field = (*env)->GetFieldID (env, cls, "data", "J");
return (void *) (*env)->GetLongField (env, data, field);
#else
cls = (*env)->FindClass (env, "gnu/classpath/RawData32");
field = (*env)->GetFieldID (env, cls, "data", "I");
return (void *) (*env)->GetIntField (env, data, field);
#endif
return JCL_GetRawData (env, data);
}
@@ -66,6 +66,44 @@ Java_gnu_java_awt_peer_gtk_GtkLabelPeer_create
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkWidgetGetPreferredDimensions
(JNIEnv *env, jobject obj, jintArray jdims)
{
void *ptr;
jint *dims;
GtkWidget *label;
GtkRequisition current_req;
GtkRequisition natural_req;
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
label = gtk_bin_get_child (GTK_BIN (ptr));
dims = (*env)->GetIntArrayElements (env, jdims, 0);
dims[0] = dims[1] = 0;
/* Save the widget's current size request. */
gtk_widget_size_request (GTK_WIDGET (label), &current_req);
/* Get the widget's "natural" size request. */
gtk_widget_set_size_request (GTK_WIDGET (label), -1, -1);
gtk_widget_size_request (GTK_WIDGET (label), &natural_req);
/* Reset the widget's size request. */
gtk_widget_set_size_request (GTK_WIDGET (label),
current_req.width, current_req.height);
dims[0] = natural_req.width;
dims[1] = natural_req.height;
(*env)->ReleaseIntArrayElements (env, jdims, dims, 0);
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkWidgetModifyFont
(JNIEnv *env, jobject obj, jstring name, jint style, jint size)
@@ -423,12 +423,8 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_getSelectedIndexes
{
current_row = rows = gtk_tree_selection_get_selected_rows (selection, NULL);
gdk_threads_leave ();
result_array = (*env)->NewIntArray (env, count);
gdk_threads_enter ();
result_array_iter = (*env)->GetIntArrayElements (env, result_array, NULL);
for (i = 0; i < count; i++)
@@ -513,25 +509,17 @@ item_highlighted_cb (GtkTreeSelection *selection __attribute__((unused)),
if (!path_currently_selected)
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postListItemEventID,
row,
(jint) AWT_ITEM_SELECTED);
gdk_threads_enter ();
}
else
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postListItemEventID,
row,
(jint) AWT_ITEM_DESELECTED);
gdk_threads_enter ();
}
}
@@ -186,8 +186,6 @@ Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_setLabel
static void
item_activate_cb (GtkMenuItem *item __attribute__((unused)), jobject peer_obj)
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer_obj,
postMenuActionEventID);
gdk_threads_enter ();
postMenuActionEventID);
}
@@ -417,7 +417,5 @@ static void
textcomponent_changed_cb (GtkEditable *editable __attribute__((unused)),
jobject peer)
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, postTextEventID);
gdk_threads_enter ();
}
@@ -40,8 +40,7 @@ exception statement from your version. */
#include "gnu_java_awt_peer_gtk_GtkToolkit.h"
#include "gthread-jni.h"
#include "jcl.h"
#include <sys/time.h>
#include <gdk/gdkx.h>
#define RC_FILE ".classpath-gtkrc"
@@ -157,6 +156,10 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkInit (JNIEnv *env,
gtk_init (&argc, &argv);
#if SYNCHRONIZE_GDK
XSynchronize (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), True);
#endif
gdk_rgb_init ();
gtk_widget_set_default_colormap (gdk_rgb_get_cmap ());
gtk_widget_set_default_visual (gdk_rgb_get_visual ());
@@ -190,6 +193,7 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkInit (JNIEnv *env,
cp_gtk_checkbox_init_jni ();
cp_gtk_choice_init_jni ();
cp_gtk_component_init_jni ();
cp_gtk_filedialog_init_jni ();
cp_gtk_list_init_jni ();
cp_gtk_menuitem_init_jni ();
cp_gtk_scrollbar_init_jni ();
@@ -292,20 +296,6 @@ dpi_changed_cb (GtkSettings *settings,
PANGO_SCALE * 72.0 / (int_dpi / PANGO_SCALE);
}
static int
within_human_latency_tolerance(struct timeval *init)
{
struct timeval curr;
unsigned long milliseconds_elapsed;
gettimeofday(&curr, NULL);
milliseconds_elapsed = (((curr.tv_sec * 1000) + (curr.tv_usec / 1000))
- ((init->tv_sec * 1000) + (init->tv_usec / 1000)));
return milliseconds_elapsed < 100;
}
#if GTK_MINOR_VERSION > 4
static void
glog_func (const gchar *log_domain,
@@ -332,69 +322,15 @@ glog_func (const gchar *log_domain,
}
#endif
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkToolkit_iterateNativeQueue
(JNIEnv *env,
jobject self __attribute__((unused)),
jobject lockedQueue,
jboolean block)
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkMain
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)))
{
/* We're holding an EventQueue lock, and we're about to acquire the GDK
* lock before dropping the EventQueue lock. This can deadlock if someone
* holds the GDK lock and wants to acquire the EventQueue lock; however
* all callbacks from GTK happen with the GDK lock released, so this
* would only happen in an odd case such as some JNI helper code
* acquiring the GDK lock and calling back into
* EventQueue.getNextEvent().
*/
struct timeval init;
gettimeofday(&init, NULL);
gdk_threads_enter ();
(*env)->MonitorExit (env, lockedQueue);
if (block)
{
/* If we're blocking-when-empty, we want a do .. while loop. */
do
gtk_main_iteration ();
while (within_human_latency_tolerance (&init)
&& gtk_events_pending ());
}
else
{
/* If we're not blocking-when-empty, we want a while loop. */
while (within_human_latency_tolerance (&init)
&& gtk_events_pending ())
gtk_main_iteration ();
}
(*env)->MonitorEnter (env, lockedQueue);
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkToolkit_wakeNativeQueue
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)))
{
g_main_context_wakeup (NULL);
}
JNIEXPORT jboolean JNICALL
Java_gnu_java_awt_peer_gtk_GtkToolkit_nativeQueueEmpty
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)))
{
jboolean empty = FALSE;
gdk_threads_enter ();
empty = ! gtk_events_pending();
gtk_main ();
gdk_threads_leave ();
return empty;
}
@@ -466,7 +402,11 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_loadSystemColors
jint *colors;
GtkStyle *style;
/* FIXME: this was deadlocking so assume it is thread-safe for now;
we need to replace this call with a .properties file anyway. */
#if 0
gdk_threads_enter ();
#endif
colors = (*env)->GetIntArrayElements (env, jcolors, 0);
@@ -501,7 +441,9 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_loadSystemColors
(*env)->ReleaseIntArrayElements(env, jcolors, colors, 0);
#if 0
gdk_threads_leave ();
#endif
}
#undef CONVERT
@@ -260,20 +260,12 @@ static jmethodID postConfigureEventID;
static jmethodID postInsetsChangedEventID;
static jmethodID windowGetWidthID;
static jmethodID windowGetHeightID;
static jmethodID setBoundsCallbackID;
void
cp_gtk_window_init_jni (void)
{
jclass window;
jclass gtkwindowpeer;
window = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(), "java/awt/Window");
setBoundsCallbackID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), window,
"setBoundsCallback",
"(IIII)V");
gtkwindowpeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
"gnu/java/awt/peer/gtk/GtkWindowPeer");
@@ -302,9 +294,10 @@ cp_gtk_window_init_jni (void)
}
/* Get the first keyval in the keymap for this event's keycode. The
first keyval corresponds roughly to Java's notion of a virtual
key. Returns the uppercase version of the first keyval. */
static guint
first keyval corresponds roughly to Java's notion of a virtual key.
Returns the uppercase version of the first keyval or -1 if no
keyval was found for the given hardware keycode. */
static gint
get_first_keyval_from_keymap (GdkEventKey *event)
{
guint keyval;
@@ -317,10 +310,8 @@ get_first_keyval_from_keymap (GdkEventKey *event)
&keyvals,
&n_entries))
{
g_warning ("No keyval found for hardware keycode %d\n",
event->hardware_keycode);
/* Try to recover by using the keyval in the event structure. */
keyvals = &(event->keyval);
/* No keyval found for hardware keycode */
return -1;
}
keyval = keyvals[0];
g_free (keyvals);
@@ -328,16 +319,22 @@ get_first_keyval_from_keymap (GdkEventKey *event)
return gdk_keyval_to_upper (keyval);
}
/* Return the AWT key code for the given keysym or -1 if no keyval was
found for the given hardware keycode. */
#ifdef __GNUC__
__inline
#endif
static jint
keysym_to_awt_keycode (GdkEventKey *event)
{
guint ukeyval;
gint ukeyval;
guint state;
ukeyval = get_first_keyval_from_keymap (event);
if (ukeyval < 0)
return -1;
state = event->state;
/* VK_A through VK_Z */
@@ -736,13 +733,18 @@ keysym_to_awt_keycode (GdkEventKey *event)
}
}
/* Return the AWT key location code for the given keysym or -1 if no
keyval was found for the given hardware keycode. */
static jint
keysym_to_awt_keylocation (GdkEventKey *event)
{
guint ukeyval;
gint ukeyval;
ukeyval = get_first_keyval_from_keymap (event);
if (ukeyval < 0)
return -1;
/* VK_A through VK_Z */
if (ukeyval >= GDK_A && ukeyval <= GDK_Z)
return AWT_KEY_LOCATION_STANDARD;
@@ -1052,8 +1054,6 @@ window_configure_cb (GtkWidget *widget __attribute__((unused)),
GdkEventConfigure *event,
jobject peer)
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postConfigureEventID,
(jint) event->x,
@@ -1061,8 +1061,6 @@ window_configure_cb (GtkWidget *widget __attribute__((unused)),
(jint) event->width,
(jint) event->height);
gdk_threads_enter ();
return FALSE;
}
@@ -1071,18 +1069,25 @@ key_press_cb (GtkWidget *widget __attribute__((unused)),
GdkEventKey *event,
jobject peer)
{
gdk_threads_leave ();
jint keycode;
jint keylocation;
keycode = keysym_to_awt_keycode (event);
keylocation = keysym_to_awt_keylocation (event);
/* Return immediately if an error occurs translating a hardware
keycode to a keyval. */
if (keycode < 0 || keylocation < 0)
return TRUE;
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postKeyEventID,
(jint) AWT_KEY_PRESSED,
(jlong) event->time,
keyevent_state_to_awt_mods (event),
keysym_to_awt_keycode (event),
keycode,
keyevent_to_awt_keychar (event),
keysym_to_awt_keylocation (event));
gdk_threads_enter ();
keylocation);
/* FIXME: generation of key typed events needs to be moved
to GtkComponentPeer.postKeyEvent. If the key in a key
@@ -1098,18 +1103,25 @@ key_release_cb (GtkWidget *widget __attribute__((unused)),
GdkEventKey *event,
jobject peer)
{
gdk_threads_leave ();
jint keycode;
jint keylocation;
keycode = keysym_to_awt_keycode (event);
keylocation = keysym_to_awt_keylocation (event);
/* Return immediately if an error occurs translating a hardware
keycode to a keyval. */
if (keycode < 0 || keylocation < 0)
return TRUE;
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postKeyEventID,
(jint) AWT_KEY_RELEASED,
(jlong) event->time,
keyevent_state_to_awt_mods (event),
keysym_to_awt_keycode (event),
keycode,
keyevent_to_awt_keychar (event),
keysym_to_awt_keylocation (event));
gdk_threads_enter ();
keylocation);
return TRUE;
}
@@ -1218,23 +1230,31 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_gtkWindowSetModal
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetVisible
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisibleNative
(JNIEnv *env, jobject obj, jboolean visible)
{
gdk_threads_enter ();
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisibleNativeUnlocked
(env, obj, visible);
gdk_flush ();
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisibleNativeUnlocked
(JNIEnv *env, jobject obj, jboolean visible)
{
void *ptr;
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
if (visible)
gtk_widget_show (GTK_WIDGET (ptr));
else
gtk_widget_hide (GTK_WIDGET (ptr));
XFlush (GDK_DISPLAY ());
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
@@ -1348,17 +1368,6 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toFront (JNIEnv *env,
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setBoundsCallback
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
jobject window, jint x, jint y, jint width, jint height)
{
/* Circumvent package-private access to call Window's
setBoundsCallback method. */
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), window, setBoundsCallbackID,
x, y, width, height);
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setSize
(JNIEnv *env, jobject obj, jint width, jint height)
@@ -1382,10 +1391,20 @@ JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBounds
(JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
{
void *ptr;
gdk_threads_enter ();
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBoundsUnlocked
(env, obj, x, y, width, height);
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBoundsUnlocked
(JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
{
void *ptr;
ptr = NSA_GET_PTR (env, obj);
/* Avoid GTK runtime assertion failures. */
@@ -1414,8 +1433,6 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBounds
by the program and the window's "resizable" property is true then
the size request will not be honoured. */
gtk_window_resize (GTK_WINDOW (ptr), width, height);
gdk_threads_leave ();
}
static void
@@ -1427,10 +1444,20 @@ window_get_frame_extents (GtkWidget *window,
/* Guess frame extents in case _NET_FRAME_EXTENTS is not
supported. */
*top = 23;
*left = 6;
*bottom = 6;
*right = 6;
if (gtk_window_get_decorated (GTK_WINDOW (window)))
{
*top = 23;
*left = 6;
*bottom = 6;
*right = 6;
}
else
{
*top = 0;
*left = 0;
*bottom = 0;
*right = 0;
}
/* Request that the window manager set window's
_NET_FRAME_EXTENTS property. */
@@ -1531,15 +1558,11 @@ window_delete_cb (GtkWidget *widget __attribute__((unused)),
GdkEvent *event __attribute__((unused)),
jobject peer)
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_CLOSING,
(jobject) NULL, (jint) 0);
gdk_threads_enter ();
/* Prevents that the Window dissappears ("destroy"
not being signalled). This is necessary because it
should be up to a WindowListener implementation
@@ -1552,28 +1575,20 @@ window_destroy_cb (GtkWidget *widget __attribute__((unused)),
GdkEvent *event __attribute__((unused)),
jobject peer)
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_CLOSED,
(jobject) NULL, (jint) 0);
gdk_threads_enter ();
}
static void
window_show_cb (GtkWidget *widget __attribute__((unused)),
jobject peer)
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_OPENED,
(jobject) NULL, (jint) 0);
gdk_threads_enter ();
}
static void
@@ -1606,8 +1621,6 @@ window_focus_state_change_cb (GtkWidget *widget,
GParamSpec *pspec __attribute__((unused)),
jobject peer)
{
gdk_threads_leave ();
if (GTK_WINDOW (widget)->has_toplevel_focus)
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
@@ -1618,8 +1631,6 @@ window_focus_state_change_cb (GtkWidget *widget,
postWindowEventID,
(jint) AWT_WINDOW_DEACTIVATED,
(jobject) NULL, (jint) 0);
gdk_threads_enter ();
}
static gboolean
@@ -1627,15 +1638,11 @@ window_focus_in_cb (GtkWidget * widget __attribute__((unused)),
GdkEventFocus *event __attribute__((unused)),
jobject peer)
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_GAINED_FOCUS,
(jobject) NULL, (jint) 0);
gdk_threads_enter ();
return FALSE;
}
@@ -1644,15 +1651,11 @@ window_focus_out_cb (GtkWidget * widget __attribute__((unused)),
GdkEventFocus *event __attribute__((unused)),
jobject peer)
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_LOST_FOCUS,
(jobject) NULL, (jint) 0);
gdk_threads_enter ();
return FALSE;
}
@@ -1670,26 +1673,18 @@ window_window_state_cb (GtkWidget *widget,
if (event->window_state.new_window_state & GDK_WINDOW_STATE_ICONIFIED)
{
/* We've been iconified. */
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_ICONIFIED,
(jobject) NULL, (jint) 0);
gdk_threads_enter ();
}
else
{
/* We've been deiconified. */
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_DEICONIFIED,
(jobject) NULL, (jint) 0);
gdk_threads_enter ();
}
}
@@ -1702,15 +1697,11 @@ window_window_state_cb (GtkWidget *widget,
new_state |= window_get_new_state (widget);
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postWindowEventID,
(jint) AWT_WINDOW_STATE_CHANGED,
(jobject) NULL, new_state);
gdk_threads_enter ();
return TRUE;
}
@@ -1776,16 +1767,12 @@ window_property_changed_cb (GtkWidget *widget __attribute__((unused)),
NULL,
gu_ex.gu_extents))
{
gdk_threads_leave ();
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
postInsetsChangedEventID,
(jint) extents[2], /* top */
(jint) extents[0], /* left */
(jint) extents[3], /* bottom */
(jint) extents[1]); /* right */
gdk_threads_enter ();
}
@@ -83,6 +83,20 @@ extern struct state_table *cp_gtk_native_global_ref_table;
(*env)->DeleteGlobalRef (env, *globRefPtr); \
free (globRefPtr);} while (0)
extern struct state_table *cp_gtk_native_graphics_state_table;
#define NSA_G_INIT(env, clazz) \
cp_gtk_native_graphics_state_table = cp_gtk_init_state_table (env, clazz)
#define NSA_GET_G_PTR(env, obj) \
cp_gtk_get_state (env, obj, cp_gtk_native_graphics_state_table)
#define NSA_SET_G_PTR(env, obj, ptr) \
cp_gtk_set_state (env, obj, cp_gtk_native_graphics_state_table, (void *)ptr)
#define NSA_DEL_G_PTR(env, obj) \
cp_gtk_remove_state_slot (env, obj, cp_gtk_native_graphics_state_table)
#define SWAPU32(w) \
(((w) << 24) | (((w) & 0xff00) << 8) | (((w) >> 8) & 0xff00) | ((w) >> 24))
@@ -142,6 +156,14 @@ JNIEnv *cp_gtk_gdk_env(void);
extern double cp_gtk_dpi_conversion_factor;
extern GtkWindowGroup *cp_gtk_global_window_group;
/* Shared global clipboard for GtkClipboard and GtkSelection. */
extern GtkClipboard *cp_gtk_clipboard;
/* Standard target (strings) for GtkClipboard and GtkSelection. */
extern jstring cp_gtk_stringTarget;
extern jstring cp_gtk_imageTarget;
extern jstring cp_gtk_filesTarget;
/* Union used for type punning. */
union widget_union
{
@@ -149,8 +171,9 @@ union widget_union
GtkWidget **widget;
};
/* Keycode helpers */
/* Constant conversion helpers */
guint cp_gtk_awt_keycode_to_keysym (jint keyCode, jint keyLocation);
jint cp_gtk_state_to_awt_mods (guint state);
/* Image helpers */
GdkPixbuf *cp_gtk_image_get_pixbuf (JNIEnv *env, jobject obj);
@@ -166,6 +189,7 @@ void cp_gtk_button_init_jni (void);
void cp_gtk_checkbox_init_jni (void);
void cp_gtk_choice_init_jni (void);
void cp_gtk_component_init_jni (void);
void cp_gtk_filedialog_init_jni (void);
void cp_gtk_list_init_jni (void);
void cp_gtk_menuitem_init_jni (void);
void cp_gtk_scrollbar_init_jni (void);
@@ -182,6 +206,8 @@ void cp_gtk_textcomponent_connect_signals (GObject *ptr, jobject *gref);
/* Debugging */
void cp_gtk_print_current_thread (void);
#define SYNCHRONIZE_GDK 0
#define DEBUG_LOCKING 0
#if DEBUG_LOCKING
@@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# Makefile.in generated by automake 1.9.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -112,8 +112,14 @@ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATE = @DATE@
DEFS = @DEFS@
@@ -175,6 +181,7 @@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -186,12 +193,13 @@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
REMOVE = @REMOVE@
SET_MAKE = @SET_MAKE@
SH = @SH@
SHELL = @SHELL@
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
STRIP = @STRIP@
@@ -213,10 +221,13 @@ X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
@@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# Makefile.in generated by automake 1.9.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -117,8 +117,14 @@ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATE = @DATE@
DEFS = @DEFS@
@@ -180,6 +186,7 @@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -191,12 +198,13 @@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
REMOVE = @REMOVE@
SET_MAKE = @SET_MAKE@
SH = @SH@
SHELL = @SHELL@
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
STRIP = @STRIP@
@@ -218,10 +226,13 @@ X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
@@ -348,12 +348,7 @@ Java_java_lang_VMDouble_parseDouble
struct _Jv_reent reent;
memset (&reent, 0, sizeof reent);
#ifdef KISSME_LINUX_USER
/* FIXME: The libc strtod may not be reliable. */
val = strtod (p, &endptr);
#else
val = _strtod_r (&reent, p, &endptr);
#endif
#ifdef DEBUG
fprintf (stderr, "java.lang.VMDouble.parseDouble val = %g\n", val);
@@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# Makefile.in generated by automake 1.9.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -114,8 +114,14 @@ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATE = @DATE@
DEFS = @DEFS@
@@ -177,6 +183,7 @@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -188,12 +195,13 @@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
REMOVE = @REMOVE@
SET_MAKE = @SET_MAKE@
SH = @SH@
SHELL = @SHELL@
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
STRIP = @STRIP@
@@ -215,10 +223,13 @@ X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
@@ -50,6 +50,7 @@ exception statement from your version. */
#include "target_native.h"
#ifndef WITHOUT_NETWORK
#include "target_native_file.h" /* Get FIONREAD on Solaris. */
#include "target_native_network.h"
#endif /* WITHOUT_NETWORK */
@@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# Makefile.in generated by automake 1.9.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -119,8 +119,14 @@ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATE = @DATE@
DEFS = @DEFS@
@@ -182,6 +188,7 @@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -193,12 +200,13 @@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
REMOVE = @REMOVE@
SET_MAKE = @SET_MAKE@
SH = @SH@
SHELL = @SHELL@
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
STRIP = @STRIP@
@@ -220,10 +228,13 @@ X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
@@ -56,6 +56,10 @@ exception statement from your version. */
#include <fcntl.h>
#endif /* HAVE_FCNTL_H */
#ifdef HAVE_SYS_MMAN_H
#include <sys/mman.h>
#endif /* HAVE_SYS_MMAN_H */
/* These values must be kept in sync with FileChannelImpl.java. */
#define FILECHANNELIMPL_READ 1
#define FILECHANNELIMPL_WRITE 2
@@ -91,6 +95,10 @@ exception statement from your version. */
#define CONVERT_SSIZE_T_TO_JINT(x) ((jint)(x & 0xFFFFFFFF))
#define CONVERT_JINT_TO_SSIZE_T(x) (x)
/* Align a value up or down to a multiple of the pagesize. */
#define ALIGN_DOWN(p,s) ((p) - ((p) % (s)))
#define ALIGN_UP(p,s) ((p) + ((s) - ((p) % (s))))
/* cached fieldID of gnu.java.nio.channels.FileChannelImpl.fd */
static jfieldID native_fd_fieldID;
@@ -105,12 +113,12 @@ get_native_fd (JNIEnv * env, jobject obj)
* static initialization.
*/
JNIEXPORT void JNICALL
Java_gnu_java_nio_channels_FileChannelImpl_init (JNIEnv * env, jclass clazz)
Java_gnu_java_nio_channels_FileChannelImpl_init (JNIEnv * env,
jclass clazz
__attribute__ ((__unused__)))
{
jclass clazz_fc;
jfieldID field;
jmethodID constructor;
jobject obj;
/* Initialize native_fd_fieldID so we only compute it once! */
clazz_fc = (*env)->FindClass (env, "gnu/java/nio/channels/FileChannelImpl");
@@ -128,28 +136,6 @@ Java_gnu_java_nio_channels_FileChannelImpl_init (JNIEnv * env, jclass clazz)
}
native_fd_fieldID = field;
constructor = (*env)->GetMethodID (env, clazz, "<init>", "(II)V");
if (!constructor)
return;
#define INIT_FIELD(FIELDNAME, FDVALUE, MODE) \
field = (*env)->GetStaticFieldID (env, clazz, FIELDNAME, \
"Lgnu/java/nio/channels/FileChannelImpl;"); \
if (! field) \
return; \
obj = (*env)->NewObject (env, clazz, constructor, FDVALUE, MODE); \
if (! obj) \
return; \
(*env)->SetStaticObjectField (env, clazz, field, obj); \
if ((*env)->ExceptionOccurred (env)) \
return;
INIT_FIELD ("in", 0, FILECHANNELIMPL_READ);
INIT_FIELD ("out", 1, FILECHANNELIMPL_WRITE);
INIT_FIELD ("err", 2, FILECHANNELIMPL_WRITE);
#undef INIT_FIELD
}
/*
@@ -218,17 +204,22 @@ Java_gnu_java_nio_channels_FileChannelImpl_open (JNIEnv * env,
#endif
TARGET_NATIVE_FILE_OPEN (filename, native_fd, flags, permissions, result);
JCL_free_cstring (env, name, filename);
if (result != TARGET_NATIVE_OK)
{
/* We can only throw FileNotFoundException. */
char message[256]; /* Fixed size we don't need to malloc. */
char *error_string = TARGET_NATIVE_LAST_ERROR_STRING ();
snprintf(message, 256, "%s: %s", error_string, filename);
/* We are only allowed to throw FileNotFoundException. */
JCL_ThrowException (env,
"java/io/FileNotFoundException",
TARGET_NATIVE_LAST_ERROR_STRING ());
message);
JCL_free_cstring (env, name, filename);
return TARGET_NATIVE_MATH_INT_INT64_CONST_MINUS_1;
}
JCL_free_cstring (env, name, filename);
return native_fd;
}
@@ -245,12 +236,19 @@ Java_gnu_java_nio_channels_FileChannelImpl_implCloseChannel (JNIEnv * env,
native_fd = get_native_fd (env, obj);
TARGET_NATIVE_FILE_CLOSE (native_fd, result);
if (result != TARGET_NATIVE_OK)
do
{
JCL_ThrowException (env, IO_EXCEPTION,
TARGET_NATIVE_LAST_ERROR_STRING ());
TARGET_NATIVE_FILE_CLOSE (native_fd, result);
if (result != TARGET_NATIVE_OK
&& (TARGET_NATIVE_LAST_ERROR ()
!= TARGET_NATIVE_ERROR_INTERRUPT_FUNCTION_CALL))
{
JCL_ThrowException (env, IO_EXCEPTION,
TARGET_NATIVE_LAST_ERROR_STRING ());
return;
}
}
while (result != TARGET_NATIVE_OK);
}
/*
@@ -267,13 +265,19 @@ Java_gnu_java_nio_channels_FileChannelImpl_available (JNIEnv * env,
native_fd = get_native_fd (env, obj);
TARGET_NATIVE_FILE_AVAILABLE (native_fd, bytes_available, result);
if (result != TARGET_NATIVE_OK)
do
{
JCL_ThrowException (env, IO_EXCEPTION,
TARGET_NATIVE_LAST_ERROR_STRING ());
return 0;
TARGET_NATIVE_FILE_AVAILABLE (native_fd, bytes_available, result);
if (result != TARGET_NATIVE_OK
&& (TARGET_NATIVE_LAST_ERROR ()
!= TARGET_NATIVE_ERROR_INTERRUPT_FUNCTION_CALL))
{
JCL_ThrowException (env, IO_EXCEPTION,
TARGET_NATIVE_LAST_ERROR_STRING ());
return 0;
}
}
while (result != TARGET_NATIVE_OK);
/* FIXME NYI ??? why only jint and not jlong? */
return TARGET_NATIVE_MATH_INT_INT64_TO_INT32 (bytes_available);
@@ -503,13 +507,91 @@ Java_gnu_java_nio_channels_FileChannelImpl_implTruncate (JNIEnv * env,
}
JNIEXPORT jobject JNICALL
Java_gnu_java_nio_channels_FileChannelImpl_mapImpl (JNIEnv * env,
jobject obj
__attribute__ ((__unused__)), jchar mode __attribute__ ((__unused__)), jlong position __attribute__ ((__unused__)), jint size __attribute__ ((__unused__)))
Java_gnu_java_nio_channels_FileChannelImpl_mapImpl (JNIEnv *env, jobject obj,
jchar mode, jlong position, jint size)
{
#ifdef HAVE_MMAP
jclass MappedByteBufferImpl_class;
jmethodID MappedByteBufferImpl_init = NULL;
jobject Pointer_instance;
volatile jobject buffer;
long pagesize;
int prot, flags;
int fd;
void *p;
void *address;
/* FIXME: should we just assume we're on an OS modern enough to
have 'sysconf'? And not check for 'getpagesize'? */
#if defined(HAVE_GETPAGESIZE)
pagesize = getpagesize ();
#elif defined(HAVE_SYSCONF)
pagesize = sysconf (_SC_PAGESIZE);
#else
JCL_ThrowException (env, IO_EXCEPTION,
"java.nio.FileChannelImpl.nio_mmap_file(): not implemented");
"can't determine memory page size");
return NULL;
#endif /* HAVE_GETPAGESIZE/HAVE_SYSCONF */
if ((*env)->ExceptionOccurred (env))
{
return NULL;
}
prot = PROT_READ;
if (mode == '+')
prot |= PROT_WRITE;
flags = (mode == 'c' ? MAP_PRIVATE : MAP_SHARED);
fd = get_native_fd (env, obj);
p = mmap (NULL, (size_t) ALIGN_UP (size, pagesize), prot, flags,
fd, ALIGN_DOWN (position, pagesize));
if (p == MAP_FAILED)
{
JCL_ThrowException (env, IO_EXCEPTION, strerror (errno));
return NULL;
}
/* Unalign the mapped value back up, since we aligned offset
down to a multiple of the page size. */
address = (void *) ((char *) p + (position % pagesize));
Pointer_instance = JCL_NewRawDataObject(env, address);
MappedByteBufferImpl_class = (*env)->FindClass (env,
"java/nio/MappedByteBufferImpl");
if (MappedByteBufferImpl_class != NULL)
{
MappedByteBufferImpl_init =
(*env)->GetMethodID (env, MappedByteBufferImpl_class,
"<init>", "(Lgnu/classpath/Pointer;IZ)V");
}
if ((*env)->ExceptionOccurred (env))
{
munmap (p, ALIGN_UP (size, pagesize));
return NULL;
}
if (MappedByteBufferImpl_init == NULL)
{
JCL_ThrowException (env, "java/lang/InternalError",
"could not get MappedByteBufferImpl constructor");
munmap (p, ALIGN_UP (size, pagesize));
return NULL;
}
buffer = (*env)->NewObject (env, MappedByteBufferImpl_class,
MappedByteBufferImpl_init, Pointer_instance,
(jint) size, mode == 'r');
return buffer;
#else
(void) obj;
(void) mode;
(void) position;
(void) size;
JCL_ThrowException (env, IO_EXCEPTION,
"memory-mapped files not implemented");
return 0;
#endif /* HAVE_MMAP */
}
/*
@@ -735,17 +817,23 @@ Java_gnu_java_nio_channels_FileChannelImpl_lock (JNIEnv *env, jobject obj,
flock.l_type = shared ? F_RDLCK : F_WRLCK;
flock.l_whence = SEEK_SET;
flock.l_start = (off_t) position;
flock.l_len = (off_t) size;
/* Long.MAX_VALUE means lock everything possible starting at pos. */
if (size == 9223372036854775807LL)
flock.l_len = 0;
else
flock.l_len = (off_t) size;
ret = fcntl (fd, cmd, &flock);
/* fprintf(stderr, "fd %d, wait %d, shared %d, ret %d, position %lld, size %lld, l_start %ld, l_len %ld\n", fd, wait, shared,ret, position, size, (long) flock.l_start, (long) flock.l_len); */
if (ret)
{
/* Linux man pages for fcntl state that errno might be either
EACCES or EAGAIN if we try F_SETLK, and another process has
an overlapping lock. */
an overlapping lock. We should not get an unexpected errno. */
if (errno != EACCES && errno != EAGAIN)
{
JCL_ThrowException (env, IO_EXCEPTION, strerror (errno));
JCL_ThrowException (env, "java/lang/InternalError",
strerror (errno));
}
return JNI_FALSE;
}
@@ -776,12 +864,17 @@ Java_gnu_java_nio_channels_FileChannelImpl_unlock (JNIEnv *env,
flock.l_type = F_UNLCK;
flock.l_whence = SEEK_SET;
flock.l_start = (off_t) position;
flock.l_len = (off_t) length;
/* Long.MAX_VALUE means unlock everything possible starting at pos. */
if (length == 9223372036854775807LL)
flock.l_len = 0;
else
flock.l_len = (off_t) length;
ret = fcntl (fd, F_SETLK, &flock);
if (ret)
{
JCL_ThrowException (env, IO_EXCEPTION, strerror (errno));
JCL_ThrowException (env, "java/lang/InternalError",
strerror (errno));
}
#else
(void) obj;
@@ -173,23 +173,14 @@ static void
createRawData (JNIEnv * env, jobject obj, void *ptr)
{
jclass cls;
jmethodID method;
jobject data;
jfieldID data_fid;
cls = (*env)->GetObjectClass (env, obj);
data_fid = (*env)->GetFieldID (env, cls, "data", "Lgnu/classpath/RawData;");
data_fid = (*env)->GetFieldID (env, cls, "data", "Lgnu/classpath/Pointer;");
assert (data_fid != 0);
#ifdef POINTERS_ARE_64BIT
cls = (*env)->FindClass (env, "gnu/classpath/RawData64");
method = (*env)->GetMethodID (env, cls, "<init>", "(J)V");
data = (*env)->NewObject (env, cls, method, (jlong) ptr);
#else
cls = (*env)->FindClass (env, "gnu/classpath/RawData32");
method = (*env)->GetMethodID (env, cls, "<init>", "(I)V");
data = (*env)->NewObject (env, cls, method, (jint) ptr);
#endif
data = JCL_NewRawDataObject(env, ptr);
(*env)->SetObjectField (env, obj, data_fid, data);
}
@@ -198,22 +189,13 @@ static void *
getData (JNIEnv * env, jobject obj)
{
jclass cls;
jfieldID field;
jfieldID data_fid;
jobject data;
cls = (*env)->GetObjectClass (env, obj);
data_fid = (*env)->GetFieldID (env, cls, "data", "Lgnu/classpath/RawData;");
data_fid = (*env)->GetFieldID (env, cls, "data", "Lgnu/classpath/Pointer;");
assert (data_fid != 0);
data = (*env)->GetObjectField (env, obj, data_fid);
#if SIZEOF_VOID_P == 8
cls = (*env)->FindClass (env, "gnu/classpath/RawData64");
field = (*env)->GetFieldID (env, cls, "data", "J");
return (void *) (*env)->GetLongField (env, data, field);
#else
cls = (*env)->FindClass (env, "gnu/classpath/RawData32");
field = (*env)->GetFieldID (env, cls, "data", "I");
return (void *) (*env)->GetIntField (env, data, field);
#endif
return JCL_GetRawData(env, data);
}
@@ -173,23 +173,14 @@ static void
createRawData (JNIEnv * env, jobject obj, void *ptr)
{
jclass cls;
jmethodID method;
jobject data;
jfieldID data_fid;
cls = (*env)->GetObjectClass (env, obj);
data_fid = (*env)->GetFieldID (env, cls, "data", "Lgnu/classpath/RawData;");
data_fid = (*env)->GetFieldID (env, cls, "data", "Lgnu/classpath/Pointer;");
assert (data_fid != 0);
#ifdef POINTERS_ARE_64BIT
cls = (*env)->FindClass (env, "gnu/classpath/RawData64");
method = (*env)->GetMethodID (env, cls, "<init>", "(J)V");
data = (*env)->NewObject (env, cls, method, (jlong) ptr);
#else
cls = (*env)->FindClass (env, "gnu/classpath/RawData32");
method = (*env)->GetMethodID (env, cls, "<init>", "(I)V");
data = (*env)->NewObject (env, cls, method, (jint) ptr);
#endif
data = JCL_NewRawDataObject (env, ptr);
(*env)->SetObjectField (env, obj, data_fid, data);
}
@@ -198,22 +189,13 @@ static void *
getData (JNIEnv * env, jobject obj)
{
jclass cls;
jfieldID field;
jfieldID data_fid;
jobject data;
cls = (*env)->GetObjectClass (env, obj);
data_fid = (*env)->GetFieldID (env, cls, "data", "Lgnu/classpath/RawData;");
data_fid = (*env)->GetFieldID (env, cls, "data", "Lgnu/classpath/Pointer;");
assert (data_fid != 0);
data = (*env)->GetObjectField (env, obj, data_fid);
#if SIZEOF_VOID_P == 8
cls = (*env)->FindClass (env, "gnu/classpath/RawData64");
field = (*env)->GetFieldID (env, cls, "data", "J");
return (void *) (*env)->GetLongField (env, data, field);
#else
cls = (*env)->FindClass (env, "gnu/classpath/RawData32");
field = (*env)->GetFieldID (env, cls, "data", "I");
return (void *) (*env)->GetIntField (env, data, field);
#endif
return JCL_GetRawData(env, data);
}
@@ -1,5 +1,5 @@
/* java_nio_MappedByteBufferImpl.c - Native methods for MappedByteBufferImpl
Copyright (C) 2004 Free Software Foundation, Inc.
Copyright (C) 2004,2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -43,41 +43,200 @@ exception statement from your version. */
#include "java_nio_MappedByteBufferImpl.h"
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif /* HAVE_UNISTD_H */
#ifdef HAVE_SYS_MMAN_H
#include <sys/mman.h>
#endif /* HAVE_SYS_MMAN_H */
#define IO_EXCEPTION "java/io/IOException"
JNIEXPORT void JNICALL
Java_java_nio_MappedByteBufferImpl_unmapImpl (JNIEnv * env,
jclass class
__attribute__ ((__unused__)))
/* FIXME these are defined in gnu_java_nio_channels_FileChannelImpl
too; should be someplace common. */
#define ALIGN_DOWN(p,s) ((jpointer)(p) - ((jpointer)(p) % (s)))
#define ALIGN_UP(p,s) ((jpointer)(p) + ((s) - ((jpointer)(p) % (s))))
/**
* Returns the memory page size of this platform.
*
* \return The page size.
*/
static long
get_pagesize (void)
{
/* FIXME can we just try HAVE_SYSCONF? */
#if defined(HAVE_GETPAGESIZE)
return getpagesize ();
#elif defined (HAVE_SYSCONF)
return sysconf (_SC_PAGESIZE);
#endif /* HAVE_GETPAGESIZE / HAVE_SYSCONF */
}
/**
* Retrieve the 'address' and 'cap' (the mapped size) fields of this
* buffer.
*
* This function will align the address down to the nearest page
* boundary, and the size up to the nearest page boundary. Thus, it is
* safe to use these values in 'mman' functions.
*
* \param env The JNI environment pointer.
* \param this The MappedByteBufferImpl instance.
* \param address A pointer to where the actual pointer should be
* stored.
* \param size A pointer to where the mapped region's size should be
* stored
*/
static void
get_raw_values (JNIEnv *env, jobject this, void **address, size_t *size)
{
const long pagesize = get_pagesize ();
jfieldID MappedByteBufferImpl_address;
jfieldID MappedByteBufferImpl_size;
jobject MappedByteBufferImpl_address_value = NULL;
*address = NULL;
/* 'address' is declared in java.nio.Buffer */
MappedByteBufferImpl_address
= (*env)->GetFieldID (env, (*env)->GetObjectClass (env, this),
"address", "Lgnu/classpath/Pointer;");
/* 'cap' -- likewise, the capacity */
MappedByteBufferImpl_size
= (*env)->GetFieldID (env, (*env)->GetObjectClass (env, this),
"cap", "I");
if (MappedByteBufferImpl_address != NULL)
{
MappedByteBufferImpl_address_value =
(*env)->GetObjectField (env, this, MappedByteBufferImpl_address);
}
if ((*env)->ExceptionOccurred (env))
return;
if (MappedByteBufferImpl_address_value == NULL)
{
JCL_ThrowException (env, "java/lang/NullPointerException",
"mapped address is NULL");
return;
}
*address = (void *)
ALIGN_DOWN (JCL_GetRawData (env, MappedByteBufferImpl_address_value), pagesize);
*size = (size_t)
ALIGN_UP ((*env)->GetIntField (env, this, MappedByteBufferImpl_size),
pagesize);
}
JNIEXPORT void JNICALL
Java_java_nio_MappedByteBufferImpl_unmapImpl (JNIEnv *env, jobject this)
{
#ifdef HAVE_MUNMAP
void *address;
size_t size;
get_raw_values (env, this, &address, &size);
if (address == NULL)
return;
if (munmap (address, size) != 0)
{
JCL_ThrowException (env, IO_EXCEPTION, strerror (errno));
return;
}
#else
JCL_ThrowException (env, IO_EXCEPTION,
"java.nio.MappedByteBufferImpl.unmapImpl(): not implemented");
"unmapping files not implemented");
#endif /* HAVE_MUNMAP */
}
JNIEXPORT jboolean JNICALL
Java_java_nio_MappedByteBufferImpl_isLoadedImpl (JNIEnv * env,
jclass class
__attribute__ ((__unused__)))
Java_java_nio_MappedByteBufferImpl_isLoadedImpl (JNIEnv * env, jobject this)
{
JCL_ThrowException (env, IO_EXCEPTION,
"java.nio.MappedByteBufferImpl.isLoadedImpl(): not implemented");
return 0;
#ifdef HAVE_MINCORE
void *address;
size_t size;
char *vec;
size_t count, i;
const long pagesize = get_pagesize ();
/*
* FIXME on Darwin this does not work if the mapped region is
* exactly one page long; i.e., 'mincore' tells us it isn't loaded.
*/
get_raw_values (env, this, &address, &size);
if (address == NULL)
return JNI_FALSE;
count = (size_t) ((size + pagesize - 1) / pagesize);
vec = (char *) malloc (count * sizeof (unsigned char));
/*
* Darwin (and BSD?) define argument 3 of 'mincore' to be 'char *',
* while GNU libc defines it to be 'unsigned char *'. Casting the
* argument to 'void *' fixes this, but not with C++. So you might
* be SOL if you compile this with g++ (!) on GNU with -Werror.
*/
#ifdef __cplusplus
if (mincore (address, size, vec) != 0)
#else
if (mincore (address, size, (void *) vec) != 0)
#endif /* __cplusplus */
{
free (vec);
JCL_ThrowException (env, IO_EXCEPTION, strerror (errno));
return JNI_FALSE;
}
for (i = 0; i < count; i++)
{
if ((vec[i] & 1) == 0)
return JNI_FALSE;
}
return JNI_TRUE;
#else
return JNI_FALSE;
#endif
}
JNIEXPORT void JNICALL
Java_java_nio_MappedByteBufferImpl_loadImpl (JNIEnv * env,
jclass clazz
__attribute__ ((__unused__)))
Java_java_nio_MappedByteBufferImpl_loadImpl (JNIEnv *env, jobject this)
{
#ifdef HAVE_MADVISE
void *address;
size_t size;
get_raw_values (env, this, &address, &size);
if (address == NULL)
return;
madvise (address, size, MADV_WILLNEED);
#else
JCL_ThrowException (env, IO_EXCEPTION,
"java.nio.MappedByteBufferImpl.loadImpl(): not implemented");
"forcing mapped files into core not implemented");
#endif /* HAVE_MADVISE */
}
JNIEXPORT void JNICALL
Java_java_nio_MappedByteBufferImpl_forceImpl (JNIEnv * env,
jclass class
__attribute__ ((__unused__)))
Java_java_nio_MappedByteBufferImpl_forceImpl (JNIEnv *env, jobject this)
{
#ifdef HAVE_MSYNC
void *address;
size_t size;
get_raw_values (env, this, &address, &size);
if (address == NULL)
return;
/* FIXME: is using MS_SYNC ok? Should we use MS_INVALIDATE? */
if (msync (address, size, MS_SYNC) != 0)
{
JCL_ThrowException (env, IO_EXCEPTION, strerror (errno));
}
#else
JCL_ThrowException (env, IO_EXCEPTION,
"java.nio.MappedByteBufferImpl.forceImpl(): not implemented");
"forcing mapped files to disk not implemented");
#endif /* HAVE_MSYNC */
}
@@ -45,106 +45,6 @@ exception statement from your version. */
#include "java_nio_VMDirectByteBuffer.h"
static jclass classRawData;
static jmethodID methodRawDataInit;
static jfieldID fieldNativePointer;
static void *NIOGetPointer (JNIEnv *, jobject);
static jobject NIOGetRawData (JNIEnv *, void *pointer);
static void *
NIOGetPointer (JNIEnv * env, jobject rawdata)
{
#if SIZEOF_VOID_P == 4
return (void *) (*env)->GetIntField (env, rawdata, fieldNativePointer);
#elif SIZEOF_VOID_P == 8
return (void *) (*env)->GetLongField (env, rawdata, fieldNativePointer);
#else
#error unsupported pointer size
#endif
}
static jobject
NIOGetRawData (JNIEnv * env, void *pointer)
{
#if SIZEOF_VOID_P == 4
return (*env)->NewObject (env, classRawData, methodRawDataInit,
(jint) pointer);
#elif SIZEOF_VOID_P == 8
return (*env)->NewObject (env, classRawData, methodRawDataInit,
(jlong) pointer);
#else
#error unsupported pointer size
#endif
}
JNIEXPORT void JNICALL
Java_java_nio_VMDirectByteBuffer_init
(JNIEnv * env, jclass clazz __attribute__ ((__unused__)))
{
#if SIZEOF_VOID_P == 4
classRawData = (*env)->FindClass (env, "gnu/classpath/RawData32");
if (classRawData == NULL)
{
JCL_ThrowException (env, "java/lang/InternalError",
"unable to find internal class");
return;
}
methodRawDataInit = (*env)->GetMethodID (env, classRawData,
"<init>", "(I)V");
if (methodRawDataInit == NULL)
{
JCL_ThrowException (env, "java/lang/InternalError",
"unable to find internal constructor");
return;
}
fieldNativePointer = (*env)->GetFieldID (env, classRawData, "data", "I");
if (fieldNativePointer == NULL)
{
JCL_ThrowException (env, "java/lang/InternalError",
"unable to find internal field");
return;
}
#elif SIZEOF_VOID_P == 8
classRawData = (*env)->FindClass (env, "gnu/classpath/RawData64");
if (classRawData == NULL)
{
JCL_ThrowException (env, "java/lang/InternalError",
"unable to find internal class");
return;
}
methodRawDataInit = (*env)->GetMethodID (env, classRawData,
"<init>", "(J)V");
if (methodRawDataInit == NULL)
{
JCL_ThrowException (env, "java/lang/InternalError",
"unable to find internal constructor");
return;
}
fieldNativePointer = (*env)->GetFieldID (env, classRawData, "data", "J");
if (fieldNativePointer == NULL)
{
JCL_ThrowException (env, "java/lang/InternalError",
"unable to find internal field");
return;
}
#else
#error unsupported pointer size
#endif
/* We need to wrap the jclass in global reference to make it persistent */
if ((classRawData = (*env)->NewGlobalRef (env, classRawData)) == NULL)
{
JCL_ThrowException (env, "java/lang/InternalError",
"failed to create global reference");
return;
}
}
JNIEXPORT jobject JNICALL
Java_java_nio_VMDirectByteBuffer_allocate
(JNIEnv * env, jclass clazz __attribute__ ((__unused__)), jint capacity)
@@ -160,41 +60,53 @@ Java_java_nio_VMDirectByteBuffer_allocate
return 0;
}
return NIOGetRawData (env, buffer);
return JCL_NewRawDataObject (env, buffer);
}
JNIEXPORT void JNICALL
Java_java_nio_VMDirectByteBuffer_free
(JNIEnv * env, jclass clazz __attribute__ ((__unused__)), jobject address)
{
free (NIOGetPointer (env, address));
free (JCL_GetRawData (env, address));
}
JNIEXPORT jbyte JNICALL
Java_java_nio_VMDirectByteBuffer_get__Lgnu_classpath_RawData_2I
Java_java_nio_VMDirectByteBuffer_get__Lgnu_classpath_Pointer_2I
(JNIEnv * env, jclass clazz __attribute__ ((__unused__)),
jobject address, jint index)
{
return ((jbyte *) NIOGetPointer (env, address))[index];
return ((jbyte *) JCL_GetRawData (env, address))[index];
}
JNIEXPORT void JNICALL
Java_java_nio_VMDirectByteBuffer_put
Java_java_nio_VMDirectByteBuffer_put__Lgnu_classpath_Pointer_2IB
(JNIEnv * env, jclass clazz __attribute__ ((__unused__)),
jobject address, jint index, jbyte value)
{
jbyte *pointer = (jbyte *) NIOGetPointer (env, address) + index;
jbyte *pointer = (jbyte *) JCL_GetRawData (env, address) + index;
*pointer = value;
}
JNIEXPORT void JNICALL
Java_java_nio_VMDirectByteBuffer_get__Lgnu_classpath_RawData_2I_3BII
Java_java_nio_VMDirectByteBuffer_get__Lgnu_classpath_Pointer_2I_3BII
(JNIEnv * env, jclass clazz __attribute__ ((__unused__)),
jobject address, jint index, jbyteArray dst, jint dst_offset, jint dst_len)
{
jbyte *src = (jbyte *) NIOGetPointer (env, address) + index;
memcpy ((*env)->GetByteArrayElements (env, dst, NULL) + dst_offset, src,
dst_len);
jbyte *src = (jbyte *) JCL_GetRawData (env, address) + index;
jbyte *_dst = (*env)->GetByteArrayElements (env, dst, NULL) + dst_offset;
memcpy (_dst, src, dst_len);
(*env)->ReleaseByteArrayElements (env, dst, _dst, 0);
}
JNIEXPORT void JNICALL
Java_java_nio_VMDirectByteBuffer_put__Lgnu_classpath_Pointer_2I_3BII
(JNIEnv *env, jclass clazz __attribute__ ((__unused__)),
jobject address, jint index, jbyteArray src, jint src_offset, jint src_len)
{
jbyte *_src = (*env)->GetByteArrayElements (env, src, NULL) + src_offset;
jbyte *dst = (jbyte *)JCL_GetRawData (env, address) + index;
(*env)->ReleaseByteArrayElements (env, src, _src, 0);
memcpy (dst, _src, src_len);
}
JNIEXPORT void JNICALL
@@ -202,8 +114,8 @@ Java_java_nio_VMDirectByteBuffer_shiftDown
(JNIEnv * env, jclass clazz __attribute__ ((__unused__)),
jobject address, jint dst_offset, jint src_offset, jint count)
{
jbyte *dst = (jbyte *) NIOGetPointer (env, address) + dst_offset;
jbyte *src = (jbyte *) NIOGetPointer (env, address) + src_offset;
jbyte *dst = (jbyte *) JCL_GetRawData (env, address) + dst_offset;
jbyte *src = (jbyte *) JCL_GetRawData (env, address) + src_offset;
memmove (dst, src, count);
}
@@ -212,5 +124,5 @@ Java_java_nio_VMDirectByteBuffer_adjustAddress
(JNIEnv * env, jclass clazz __attribute__ ((__unused__)),
jobject address, jint offset)
{
return NIOGetRawData (env, (jbyte *) NIOGetPointer (env, address) + offset);
return JCL_NewRawDataObject (env, (jbyte *) JCL_GetRawData (env, address) + offset);
}
@@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# Makefile.in generated by automake 1.9.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -110,8 +110,14 @@ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATE = @DATE@
DEFS = @DEFS@
@@ -173,6 +179,7 @@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -184,12 +191,13 @@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
REMOVE = @REMOVE@
SET_MAKE = @SET_MAKE@
SH = @SH@
SHELL = @SHELL@
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
STRIP = @STRIP@
@@ -211,10 +219,13 @@ X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
+14 -3
View File
@@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# Makefile.in generated by automake 1.9.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -112,8 +112,14 @@ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATE = @DATE@
DEFS = @DEFS@
@@ -175,6 +181,7 @@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -186,12 +193,13 @@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
REMOVE = @REMOVE@
SET_MAKE = @SET_MAKE@
SH = @SH@
SHELL = @SHELL@
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
STRIP = @STRIP@
@@ -213,10 +221,13 @@ X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
+3 -24
View File
@@ -39,6 +39,7 @@ exception statement from your version. */
#include "xmlj_error.h"
#include <libxml/tree.h>
#include <unistd.h>
#include <jcl.h>
/* xmlChar->jstring cache */
#ifdef XMLJ_STRING_CACHE
@@ -218,35 +219,13 @@ jmethodID xmljGetMethodID (JNIEnv *env,
void *
xmljAsPointer (JNIEnv *env, jobject ptr)
{
jclass cls;
jfieldID field;
#if defined XMLJ_64BIT_POINTER
cls = (*env)->FindClass (env, "gnu/classpath/RawData64");
field = (*env)->GetFieldID (env, cls, "data", "J");
return (void *) (*env)->GetLongField (env, ptr, field);
#else
cls = (*env)->FindClass (env, "gnu/classpath/RawData32");
field = (*env)->GetFieldID (env, cls, "data", "I");
return (void *) (*env)->GetIntField (env, ptr, field);
#endif
return JCL_GetRawData(env, ptr);
}
jobject
xmljAsField (JNIEnv *env, void * ptr)
{
jclass cls;
jmethodID method;
#if defined XMLJ_64BIT_POINTER
cls = (*env)->FindClass (env, "gnu/classpath/RawData64");
method = (*env)->GetMethodID (env, cls, "<init>", "(J)V");
return (*env)->NewObject (env, cls, method, (jlong) ptr);
#else
cls = (*env)->FindClass (env, "gnu/classpath/RawData32");
method = (*env)->GetMethodID (env, cls, "<init>", "(I)V");
return (*env)->NewObject (env, cls, method, (jint) ptr);
#endif
return JCL_NewRawDataObject(env, ptr);
}
JNIEnv *
@@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# Makefile.in generated by automake 1.9.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -82,8 +82,14 @@ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATE = @DATE@
DEFS = @DEFS@
@@ -145,6 +151,7 @@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -156,12 +163,13 @@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
REMOVE = @REMOVE@
SET_MAKE = @SET_MAKE@
SH = @SH@
SHELL = @SHELL@
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
STRIP = @STRIP@
@@ -183,10 +191,13 @@ X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
+18 -19
View File
@@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# Makefile.in generated by automake 1.9.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -91,8 +91,14 @@ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATE = @DATE@
DEFS = @DEFS@
@@ -154,6 +160,7 @@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -165,12 +172,13 @@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
REMOVE = @REMOVE@
SET_MAKE = @SET_MAKE@
SH = @SH@
SHELL = @SHELL@
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
STRIP = @STRIP@
@@ -192,10 +200,13 @@ X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
@@ -287,13 +298,7 @@ uninstall-info-am:
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
@@ -305,7 +310,7 @@ $(RECURSIVE_TARGETS):
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
@@ -313,13 +318,7 @@ $(RECURSIVE_TARGETS):
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
@@ -340,7 +339,7 @@ maintainer-clean-recursive:
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
@@ -1,8 +1,8 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# Makefile.in generated by automake 1.9.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# 2003, 2004 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -82,8 +82,14 @@ CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
CREATE_JNI_HEADERS_TRUE = @CREATE_JNI_HEADERS_TRUE@
CREATE_JNI_LIBRARIES_FALSE = @CREATE_JNI_LIBRARIES_FALSE@
CREATE_JNI_LIBRARIES_TRUE = @CREATE_JNI_LIBRARIES_TRUE@
CREATE_QT_PEER_LIBRARIES_FALSE = @CREATE_QT_PEER_LIBRARIES_FALSE@
CREATE_QT_PEER_LIBRARIES_TRUE = @CREATE_QT_PEER_LIBRARIES_TRUE@
CREATE_XMLJ_LIBRARY_FALSE = @CREATE_XMLJ_LIBRARY_FALSE@
CREATE_XMLJ_LIBRARY_TRUE = @CREATE_XMLJ_LIBRARY_TRUE@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATE = @DATE@
DEFS = @DEFS@
@@ -145,6 +151,7 @@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
MOC = @MOC@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -156,12 +163,13 @@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
QT_CFLAGS = @QT_CFLAGS@
QT_LIBS = @QT_LIBS@
RANLIB = @RANLIB@
REGEN_PARSERS_FALSE = @REGEN_PARSERS_FALSE@
REGEN_PARSERS_TRUE = @REGEN_PARSERS_TRUE@
REMOVE = @REMOVE@
SET_MAKE = @SET_MAKE@
SH = @SH@
SHELL = @SHELL@
STRICT_WARNING_CFLAGS = @STRICT_WARNING_CFLAGS@
STRIP = @STRIP@
@@ -183,10 +191,13 @@ X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
@@ -666,6 +666,16 @@ Systems : all
#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_TIMEOUT
#include <sys/types.h>
#include <sys/socket.h>
#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
# include <sys/time.h>
# else
# include <time.h>
# endif
#endif
#define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_TIMEOUT(socketDescriptor,flag,result) \
do { \
struct timeval __value; \