This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Patch: embedded window extension


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi list,


I just commited the attached patch to remove some native code and 
replace it by java code using reflection. It was really simple. It 
was tested by gcjwebplugin running in galeon.


Michael


2004-07-17  Michael Koch  <konqueror@gmx.de>

	* gnu/java/awt/EmbeddedWindow.java
	(static): Removed.
	(addNotify): Set peer via reflection.
	(setWindowPeer): Removed.
	* gnu/java/awt/natEmbeddedWindow.cc: Removed.
	* Makefile.am (nat_source_files):
	Removed gnu/java/awt/natEmbeddedWindow.cc.
	* Makefile.in: Regenerated.
- -- 
Homepage: http://www.worldforge.org/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQFA+OZDWSOgCCdjSDsRAr4HAJ4nQCL8dGWsCE2npn5OQNKUCiFEpwCcCvn6
ldPQb3uOkOq5ujzOiT3Rlqg=
=BDzp
-----END PGP SIGNATURE-----
Index: gnu/java/awt/EmbeddedWindow.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/EmbeddedWindow.java,v
retrieving revision 1.5
diff -u -b -B -r1.5 EmbeddedWindow.java
--- gnu/java/awt/EmbeddedWindow.java	9 Jul 2004 13:20:26 -0000	1.5
+++ gnu/java/awt/EmbeddedWindow.java	17 Jul 2004 08:36:18 -0000
@@ -40,23 +40,20 @@
 
 import gnu.classpath.Configuration;
 import gnu.java.awt.peer.EmbeddedWindowPeer;
+
+import java.awt.Component;
 import java.awt.Frame;
 import java.awt.Toolkit;
+import java.lang.reflect.Field;
 
 /**
  * Represents an AWT window that can be embedded into another
  * application.
  * 
- * @author Michael Koch <konqueror@gmx.de>
+ * @author Michael Koch (konqueror@gmx.de)
  */
 public class EmbeddedWindow extends Frame
 {
-  static
-  {
-    if (Configuration.INIT_LOAD_LIBRARY)
-      System.loadLibrary("javaawt");
-  }
-  
   private long handle;
   
   /**
@@ -93,13 +90,24 @@
       throw new UnsupportedOperationException
         ("Embedded windows are not supported by the current peers: " + tk.getClass());
 
-    setWindowPeer (((EmbeddedWindowSupport) tk).createEmbeddedWindow (this));
-    super.addNotify();
+    // Circumvent the package-privateness of the AWT internal
+    // java.awt.Component.peer member variable.
+    try
+      {
+	Field peerField = Component.class.getDeclaredField("peer");
+	peerField.set(this, ((EmbeddedWindowSupport) tk).createEmbeddedWindow (this));
+      }
+    catch (IllegalAccessException e)
+      {
+	// This should never happen.
+      }
+    catch (NoSuchFieldException e)
+      {
+	// This should never happen.
   }
 
-  // This method is only made native to circumvent the package-privateness of
-  // an AWT internal java.awt.Component.peer member variable.
-  native void setWindowPeer (EmbeddedWindowPeer peer);
+    super.addNotify();
+  }
 
   /**
    * If the native peer for this embedded window has been created,
Index: gnu/java/awt/natEmbeddedWindow.cc
===================================================================
RCS file: gnu/java/awt/natEmbeddedWindow.cc
diff -N gnu/java/awt/natEmbeddedWindow.cc
--- gnu/java/awt/natEmbeddedWindow.cc	4 Sep 2003 16:58:13 -0000	1.3
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,18 +0,0 @@
-/* Copyright (C) 2003  Free Software Foundation
-
-   This file is part of libgcj.
-
-This software is copyrighted work licensed under the terms of the
-Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
-details.  */
-
-#include <gnu/java/awt/EmbeddedWindow.h>
-#include <gnu/java/awt/peer/EmbeddedWindowPeer.h>
-#include <java/awt/peer/ComponentPeer.h>
-
-void
-gnu::java::awt::EmbeddedWindow::setWindowPeer (gnu::java::awt::peer::EmbeddedWindowPeer* w)
-{
-  if (!peer)
-    peer = reinterpret_cast< ::java::awt::peer::ComponentPeer *> (w);
-}
Index: Makefile.am
===================================================================
RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v
retrieving revision 1.391
diff -u -b -B -r1.391 Makefile.am
--- Makefile.am	16 Jul 2004 21:04:53 -0000	1.391
+++ Makefile.am	17 Jul 2004 08:36:19 -0000
@@ -2943,7 +2943,6 @@
 gnu/gcj/runtime/natStackTrace.cc \
 gnu/gcj/runtime/natStringBuffer.cc \
 gnu/gcj/runtime/natVMClassLoader.cc \
-gnu/java/awt/natEmbeddedWindow.cc \
 gnu/java/lang/natMainThread.cc \
 gnu/java/net/natPlainDatagramSocketImpl.cc \
 gnu/java/net/natPlainSocketImpl.cc \
Index: Makefile.in
===================================================================
RCS file: /cvs/gcc/gcc/libjava/Makefile.in,v
retrieving revision 1.416
diff -u -b -B -r1.416 Makefile.in
--- Makefile.in	16 Jul 2004 21:04:54 -0000	1.416
+++ Makefile.in	17 Jul 2004 08:36:22 -0000
@@ -2625,7 +2625,6 @@
 gnu/gcj/runtime/natStackTrace.cc \
 gnu/gcj/runtime/natStringBuffer.cc \
 gnu/gcj/runtime/natVMClassLoader.cc \
-gnu/java/awt/natEmbeddedWindow.cc \
 gnu/java/lang/natMainThread.cc \
 gnu/java/net/natPlainDatagramSocketImpl.cc \
 gnu/java/net/natPlainSocketImpl.cc \
@@ -2806,8 +2805,7 @@
 gnu/gcj/io/shs.lo gnu/gcj/runtime/natFinalizerThread.lo \
 gnu/gcj/runtime/natNameFinder.lo gnu/gcj/runtime/natSharedLibLoader.lo \
 gnu/gcj/runtime/natStackTrace.lo gnu/gcj/runtime/natStringBuffer.lo \
-gnu/gcj/runtime/natVMClassLoader.lo gnu/java/awt/natEmbeddedWindow.lo \
-gnu/java/lang/natMainThread.lo \
+gnu/gcj/runtime/natVMClassLoader.lo gnu/java/lang/natMainThread.lo \
 gnu/java/net/natPlainDatagramSocketImpl.lo \
 gnu/java/net/natPlainSocketImpl.lo \
 gnu/java/net/protocol/core/natCoreInputStream.lo \
@@ -3171,7 +3169,6 @@
 .deps/gnu/java/awt/EventModifier.P \
 .deps/gnu/java/awt/image/ImageDecoder.P \
 .deps/gnu/java/awt/image/XBMDecoder.P \
-.deps/gnu/java/awt/natEmbeddedWindow.P \
 .deps/gnu/java/awt/peer/ClasspathFontPeer.P \
 .deps/gnu/java/awt/peer/EmbeddedWindowPeer.P \
 .deps/gnu/java/awt/peer/GLightweightPeer.P \

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]