classpath-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[cp-patches] [patch] refactor text peers to remove GtkTextComponentPeer


From: Thomas Fitzsimmons
Subject: [cp-patches] [patch] refactor text peers to remove GtkTextComponentPeer
Date: Mon, 04 Jul 2005 19:57:29 -0400

Hi,

GtkTextComponentPeer is unnecessary since the GTK widgets, GtkTextView
and GtkEntry are not related.  This patch refactors the
GtkTextComponentPeer code into GtkTextAreaPeer and GtkTextFieldPeer.  I
applied this to mainline.

Tom

2005-07-04  Thomas Fitzsimmons  <address@hidden>

        * gnu/java/awt/peer/gtk/GtkComponentPeer.java (postTextEvent): New
        method.
        * gnu/java/awt/peer/gtk/GtkTextAreaPeer.java: Add
        TextComponentPeer method declarations.
        * gnu/java/awt/peer/gtk/GtkTextFieldPeer.java: Likewise.
        * gnu/java/awt/peer/gtk/GtkTextComponentPeer.java: Remove file.
        * include/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h: Regenerate.
        * include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h: Likewise.
        * native/jni/gtk-peer/Makefile.am (libgtkpeer_la_SOURCES): Remove
        gnu_java_awt_peer_gtk_GtkTextComponentPeer.c.
        * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
        (classpath_gtk_component_connect_nonfocus_signals): New function.
        (classpath_gtk_component_connect_signals): Likewise.
        * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c: Add
        method implementations from
        gnu_java_awt_peer_gtk_GtkTextComponentPeer.c.
        * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c:
        Likewise.
        * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c:
        Remove file.
        * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
        (gtkInit): Get postTextEventID from GtkComponentPeer, not
        GtkTextComponentPeer.
        * native/jni/gtk-peer/gtkpeer.h (classpath_gtk_textcomponent_init_jni): 
Declare.
        (classpath_gtk_component_connect_signals): Likewise.
        (classpath_gtk_component_connect_nonfocus_signals): Likewise.
        (classpath_gtk_textcomponent_connect_signals): Likewise.

Index: gnu/java/awt/peer/gtk/GtkComponentPeer.java
===================================================================
RCS file: 
/cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GtkComponentPeer.java,v
retrieving revision 1.86
diff -u -r1.86 GtkComponentPeer.java
--- gnu/java/awt/peer/gtk/GtkComponentPeer.java 2 Jul 2005 20:32:12 -0000       
1.86
+++ gnu/java/awt/peer/gtk/GtkComponentPeer.java 4 Jul 2005 23:50:38 -0000
@@ -63,6 +63,7 @@
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseEvent;
 import java.awt.event.PaintEvent;
+import java.awt.event.TextEvent;
 import java.awt.image.BufferedImage;
 import java.awt.image.ColorModel;
 import java.awt.image.ImageObserver;
@@ -530,6 +531,11 @@
                                item, stateChange));
   }
 
+  protected void postTextEvent ()
+  {
+    q().postEvent (new TextEvent (awtComponent, TextEvent.TEXT_VALUE_CHANGED));
+  }
+
   public GraphicsConfiguration getGraphicsConfiguration ()
   {
     // FIXME: just a stub for now.
Index: gnu/java/awt/peer/gtk/GtkTextAreaPeer.java
===================================================================
RCS file: 
/cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,v
retrieving revision 1.24
diff -u -r1.24 GtkTextAreaPeer.java
--- gnu/java/awt/peer/gtk/GtkTextAreaPeer.java  2 Jul 2005 20:32:12 -0000       
1.24
+++ gnu/java/awt/peer/gtk/GtkTextAreaPeer.java  4 Jul 2005 23:50:38 -0000
@@ -41,11 +41,13 @@
 import java.awt.Dimension;
 import java.awt.Font;
 import java.awt.FontMetrics;
+import java.awt.Rectangle;
 import java.awt.TextArea;
 import java.awt.peer.TextAreaPeer;
+import java.awt.peer.TextComponentPeer;
 
-public class GtkTextAreaPeer extends GtkTextComponentPeer
-  implements TextAreaPeer
+public class GtkTextAreaPeer extends GtkComponentPeer
+  implements TextComponentPeer, TextAreaPeer
 {
   private static transient int DEFAULT_ROWS = 10;
   private static transient int DEFAULT_COLS = 80;
@@ -55,6 +57,35 @@
   native void gtkWidgetModifyFont (String name, int style, int size);
   native void gtkWidgetRequestFocus ();
 
+  public native void connectSignals ();
+
+  public native int getCaretPosition ();
+  public native void setCaretPosition (int pos);
+  public native int getSelectionStart ();
+  public native int getSelectionEnd ();
+  public native String getText ();
+  public native void select (int start, int end);
+  public native void setEditable (boolean state);
+  public native void setText (String text);
+
+  public int getIndexAtPoint(int x, int y)
+  {
+    // FIXME
+    return 0;
+  }
+
+  public Rectangle getCharacterBounds (int pos)
+  {
+    // FIXME
+    return null;
+  }
+
+  public long filterEvents (long filter)
+  {
+    // FIXME
+    return filter;
+  }
+
   void create ()
   {
     Font f = awtComponent.getFont ();
@@ -87,6 +118,9 @@
   public GtkTextAreaPeer (TextArea ta)
   {
     super (ta);
+
+    setText (ta.getText ());
+    setCaretPosition (0);
   }
 
   public native void insert (String str, int pos);
Index: gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
===================================================================
RCS file: gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
diff -N gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
--- gnu/java/awt/peer/gtk/GtkTextComponentPeer.java     12 Feb 2005 14:26:02 
-0000      1.16
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,87 +0,0 @@
-/* GtkTextComponentPeer.java -- Implements TextComponentPeer with GTK
-   Copyright (C) 1998, 1999 Free Software Foundation, Inc.
-
-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 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.
-
-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. */
-
-
-package gnu.java.awt.peer.gtk;
-
-import java.awt.Rectangle;
-import java.awt.TextComponent;
-import java.awt.event.TextEvent;
-import java.awt.peer.TextComponentPeer;
-
-public class GtkTextComponentPeer extends GtkComponentPeer
-  implements TextComponentPeer
-{
-  GtkTextComponentPeer (TextComponent tc)
-  {
-    super (tc);
-
-    setText (tc.getText ());
-    setCaretPosition(0);
-  }
-
-  public native void connectSignals ();
-
-  public native int getCaretPosition ();
-  public native void setCaretPosition (int pos);
-  public native int getSelectionStart ();
-  public native int getSelectionEnd ();
-  public native String getText ();
-  public native void select (int start, int end);
-  public native void setEditable (boolean state);
-  public native void setText (String text);
-  
-  public int getIndexAtPoint(int x, int y)
-  {
-    return 0;  // FIXME
-  }
-
-  public Rectangle getCharacterBounds (int pos)
-  {
-    return null;
-  }
-
-  public long filterEvents (long filter)
-  {
-    return filter;  // FIXME
-  }
-
-  protected void postTextEvent ()
-  {
-    q().postEvent (new TextEvent (awtComponent, TextEvent.TEXT_VALUE_CHANGED));
-  }
-}
Index: gnu/java/awt/peer/gtk/GtkTextFieldPeer.java
===================================================================
RCS file: 
/cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,v
retrieving revision 1.29
diff -u -r1.29 GtkTextFieldPeer.java
--- gnu/java/awt/peer/gtk/GtkTextFieldPeer.java 2 Jul 2005 20:32:12 -0000       
1.29
+++ gnu/java/awt/peer/gtk/GtkTextFieldPeer.java 4 Jul 2005 23:50:38 -0000
@@ -42,17 +42,48 @@
 import java.awt.Dimension;
 import java.awt.Font;
 import java.awt.FontMetrics;
+import java.awt.Rectangle;
 import java.awt.TextField;
 import java.awt.event.KeyEvent;
 import java.awt.peer.TextFieldPeer;
+import java.awt.peer.TextComponentPeer;
 
-public class GtkTextFieldPeer extends GtkTextComponentPeer
-  implements TextFieldPeer
+public class GtkTextFieldPeer extends GtkComponentPeer
+  implements TextComponentPeer, TextFieldPeer
 {
   native void create (int width);
   native void gtkWidgetSetBackground (int red, int green, int blue);
   native void gtkWidgetSetForeground (int red, int green, int blue);
 
+  public native void connectSignals ();
+
+  public native int getCaretPosition ();
+  public native void setCaretPosition (int pos);
+  public native int getSelectionStart ();
+  public native int getSelectionEnd ();
+  public native String getText ();
+  public native void select (int start, int end);
+  public native void setEditable (boolean state);
+  public native void setText (String text);
+
+  public int getIndexAtPoint(int x, int y)
+  {
+    // FIXME
+    return 0;
+  }
+
+  public Rectangle getCharacterBounds (int pos)
+  {
+    // FIXME
+    return null;
+  }
+
+  public long filterEvents (long filter)
+  {
+    // FIXME
+    return filter;
+  }
+
   void create ()
   {
     Font f = awtComponent.getFont ();
@@ -86,6 +117,9 @@
   {
     super (tf);
 
+    setText (tf.getText ());
+    setCaretPosition (0);
+
     if (tf.echoCharIsSet ())
       setEchoChar (tf.getEchoChar ());
   }
Index: include/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h
===================================================================
RCS file: 
/cvsroot/classpath/classpath/include/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h,v
retrieving revision 1.10
diff -u -r1.10 gnu_java_awt_peer_gtk_GtkTextAreaPeer.h
--- include/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h     23 Sep 2004 22:57:12 
-0000      1.10
+++ include/gnu_java_awt_peer_gtk_GtkTextAreaPeer.h     4 Jul 2005 23:50:40 
-0000
@@ -13,6 +13,15 @@
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create 
(JNIEnv *env, jobject, jint, jint, jint);
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkWidgetModifyFont (JNIEnv *env, 
jobject, jstring, jint, jint);
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkWidgetRequestFocus (JNIEnv *env, 
jobject);
+JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_connectSignals (JNIEnv *env, 
jobject);
+JNIEXPORT jint JNICALL 
Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getCaretPosition (JNIEnv *env, 
jobject);
+JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_setCaretPosition (JNIEnv *env, 
jobject, jint);
+JNIEXPORT jint JNICALL 
Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getSelectionStart (JNIEnv *env, 
jobject);
+JNIEXPORT jint JNICALL 
Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getSelectionEnd (JNIEnv *env, 
jobject);
+JNIEXPORT jstring JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getText 
(JNIEnv *env, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_select 
(JNIEnv *env, jobject, jint, jint);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_setEditable 
(JNIEnv *env, jobject, jboolean);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_setText 
(JNIEnv *env, jobject, jstring);
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_insert 
(JNIEnv *env, jobject, jstring, jint);
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_replaceRange 
(JNIEnv *env, jobject, jstring, jint, jint);
 JNIEXPORT jint JNICALL 
Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getHScrollbarHeight (JNIEnv *env, 
jobject);
Index: include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h
===================================================================
RCS file: 
/cvsroot/classpath/classpath/include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h,v
retrieving revision 1.10
diff -u -r1.10 gnu_java_awt_peer_gtk_GtkTextFieldPeer.h
--- include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h    23 Sep 2004 22:57:12 
-0000      1.10
+++ include/gnu_java_awt_peer_gtk_GtkTextFieldPeer.h    4 Jul 2005 23:50:40 
-0000
@@ -13,6 +13,15 @@
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_create 
(JNIEnv *env, jobject, jint);
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkWidgetSetBackground (JNIEnv 
*env, jobject, jint, jint, jint);
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkWidgetSetForeground (JNIEnv 
*env, jobject, jint, jint, jint);
+JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_connectSignals (JNIEnv *env, 
jobject);
+JNIEXPORT jint JNICALL 
Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_getCaretPosition (JNIEnv *env, 
jobject);
+JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_setCaretPosition (JNIEnv *env, 
jobject, jint);
+JNIEXPORT jint JNICALL 
Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_getSelectionStart (JNIEnv *env, 
jobject);
+JNIEXPORT jint JNICALL 
Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_getSelectionEnd (JNIEnv *env, 
jobject);
+JNIEXPORT jstring JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_getText 
(JNIEnv *env, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_select 
(JNIEnv *env, jobject, jint, jint);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_setEditable 
(JNIEnv *env, jobject, jboolean);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_setText 
(JNIEnv *env, jobject, jstring);
 JNIEXPORT jint JNICALL 
Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkEntryGetBorderWidth (JNIEnv 
*env, jobject);
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkWidgetModifyFont (JNIEnv *env, 
jobject, jstring, jint, jint);
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_setEchoChar 
(JNIEnv *env, jobject, jchar);
Index: native/jni/gtk-peer/Makefile.am
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/gtk-peer/Makefile.am,v
retrieving revision 1.25
diff -u -r1.25 Makefile.am
--- native/jni/gtk-peer/Makefile.am     4 Jul 2005 23:20:35 -0000       1.25
+++ native/jni/gtk-peer/Makefile.am     4 Jul 2005 23:50:41 -0000
@@ -41,7 +41,6 @@
                        gnu_java_awt_peer_gtk_GtkScrollbarPeer.c \
                        gnu_java_awt_peer_gtk_GtkScrollPanePeer.c \
                        gnu_java_awt_peer_gtk_GtkTextAreaPeer.c \
-                       gnu_java_awt_peer_gtk_GtkTextComponentPeer.c \
                        gnu_java_awt_peer_gtk_GtkTextFieldPeer.c \
                        gnu_java_awt_peer_gtk_GtkToolkit.c \
                        gnu_java_awt_peer_gtk_GtkWindowPeer.c \
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
===================================================================
RCS file: 
/cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,v
retrieving revision 1.44
diff -u -r1.44 gnu_java_awt_peer_gtk_GtkComponentPeer.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c        2 Jul 
2005 20:32:53 -0000       1.44
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c        4 Jul 
2005 23:50:41 -0000
@@ -1076,3 +1076,43 @@
   gdk_threads_enter ();
   return FALSE;
 }
+
+void
+classpath_gtk_component_connect_nonfocus_signals (GObject *ptr, jobject *gref)
+ {
+   /* FIXME */
+#if 0
+  g_signal_connect (G_OBJECT (ptr), "button-press-event",
+                    G_CALLBACK (component_button_press_cb), *gref);
+ 
+  g_signal_connect (G_OBJECT (ptr), "button-release-event",
+                    G_CALLBACK (component_button_release_cb), *gref);
+ 
+  g_signal_connect (G_OBJECT (ptr), "enter-notify-event",
+                    G_CALLBACK (component_enter_notify_cb), *gref);
+ 
+  g_signal_connect (G_OBJECT (ptr), "expose-event",
+                    G_CALLBACK (component_expose_cb), *gref);
+ 
+  g_signal_connect (G_OBJECT (ptr), "leave-notify-event",
+                    G_CALLBACK (component_leave_notify_cb), *gref);
+
+  g_signal_connect (G_OBJECT (ptr), "motion-notify-event",
+                    G_CALLBACK (component_motion_notify_cb), *gref);
+#endif
+}
+
+void
+classpath_gtk_component_connect_signals (GObject *ptr, jobject *gref)
+{
+   /* FIXME */
+#if 0
+  classpath_gtk_component_connect_nonfocus_signals (ptr, gref);
+ 
+   g_signal_connect (G_OBJECT (ptr), "focus-in-event",
+                    G_CALLBACK (component_focus_in_cb), *gref);
+ 
+   g_signal_connect (G_OBJECT (ptr), "focus-out-event",
+                    G_CALLBACK (component_focus_out_cb), *gref);
+#endif
+}
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
===================================================================
RCS file: 
/cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c,v
retrieving revision 1.21
diff -u -r1.21 gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c 2 Jul 2005 
20:32:54 -0000       1.21
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c 4 Jul 2005 
23:50:41 -0000
@@ -39,7 +39,6 @@
 #include "gtkpeer.h"
 #include "gnu_java_awt_peer_gtk_GtkTextAreaPeer.h"
 
-#define TEXT_FROM_SW(obj) (GTK_TEXT_VIEW(GTK_SCROLLED_WINDOW 
(obj)->container.child))
 JNIEXPORT void JNICALL 
 Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create
   (JNIEnv *env, jobject obj,
@@ -47,11 +46,11 @@
 {
   GtkWidget *text, *sw;
 
+  gdk_threads_enter ();
+
   /* Create global reference and save it for future use */
   NSA_SET_GLOBAL_REF (env, obj);
 
-  gdk_threads_enter ();
-
   text = gtk_text_view_new ();
   gtk_widget_set_size_request (text, textview_width, textview_height);
   gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW (text), TRUE);
@@ -76,9 +75,37 @@
                                || scroll == 
AWT_TEXTAREA_SCROLLBARS_HORIZONTAL_ONLY)
                               ? GTK_WRAP_NONE : GTK_WRAP_WORD);
 
+  NSA_SET_PTR (env, obj, sw);
+
   gdk_threads_leave ();
+}
 
-  NSA_SET_PTR (env, obj, sw);
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_connectSignals
+  (JNIEnv *env, jobject obj)
+{
+  GtkWidget *text = NULL;
+  GtkTextBuffer *buf;
+  void *ptr;
+  jobject *gref;
+
+  gdk_threads_enter ();
+
+  ptr = NSA_GET_PTR (env, obj);
+  gref = NSA_GET_GLOBAL_REF (env, obj);
+
+  /* Unwrap the text view from the scrolled window */
+  text = gtk_bin_get_child (GTK_BIN (ptr));
+
+  buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
+
+  /* TextComponent signals */
+  classpath_gtk_textcomponent_connect_signals (G_OBJECT (buf), gref);
+
+  /* Component signals */
+  classpath_gtk_component_connect_signals (G_OBJECT (text), gref);
+
+  gdk_threads_leave ();
 }
 
 JNIEXPORT void JNICALL 
@@ -90,22 +117,21 @@
   GtkWidget *text;
   void *ptr;
   const char *str;
-  int pos=position;
+
+  gdk_threads_enter ();
 
   ptr = NSA_GET_PTR (env, obj);
   str = (*env)->GetStringUTFChars (env, contents, NULL);
   
-  gdk_threads_enter ();
-
-  text = GTK_WIDGET (TEXT_FROM_SW (ptr));
+  text = gtk_bin_get_child (GTK_BIN (ptr));
 
   buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
-  gtk_text_buffer_get_iter_at_offset (buf, &iter, pos);
+  gtk_text_buffer_get_iter_at_offset (buf, &iter, position);
   gtk_text_buffer_insert (buf, &iter, str, strlen (str));
 
-  gdk_threads_leave ();
-
   (*env)->ReleaseStringUTFChars (env, contents, str);
+
+  gdk_threads_leave ();
 }
 
 JNIEXPORT void JNICALL 
@@ -120,12 +146,12 @@
   int mystart = start;
   int myend = end;
 
+  gdk_threads_enter ();
+  
   ptr = NSA_GET_PTR (env, obj);
   str = (*env)->GetStringUTFChars (env, contents, NULL);
   
-  gdk_threads_enter ();
-  
-  text = GTK_WIDGET (TEXT_FROM_SW (ptr));
+  text = gtk_bin_get_child (GTK_BIN (ptr));
 
   buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
 
@@ -136,8 +162,9 @@
   gtk_text_buffer_get_iter_at_offset (buf, &iter, mystart);
   gtk_text_buffer_insert(buf, &iter, str, strlen (str));
 
-  gdk_threads_leave ();
   (*env)->ReleaseStringUTFChars (env, contents, str);
+
+  gdk_threads_leave ();
 }
 
 JNIEXPORT void JNICALL
@@ -149,16 +176,17 @@
   GtkWidget *text;
   PangoFontDescription *font_desc;
 
+  gdk_threads_enter();
+
   ptr = NSA_GET_PTR (env, obj);
 
-  text = GTK_WIDGET (TEXT_FROM_SW (ptr));
+  text = gtk_bin_get_child (GTK_BIN (ptr));
 
   font_name = (*env)->GetStringUTFChars (env, name, NULL);
 
-  gdk_threads_enter();
-
   font_desc = pango_font_description_from_string (font_name);
-  pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
+  pango_font_description_set_size (font_desc,
+                                   size * dpi_conversion_factor);
 
   if (style & AWT_STYLE_BOLD)
     pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
@@ -170,9 +198,9 @@
 
   pango_font_description_free (font_desc);
 
-  gdk_threads_leave();
-
   (*env)->ReleaseStringUTFChars (env, name, font_name);
+
+  gdk_threads_leave();
 }
 
 JNIEXPORT void JNICALL 
@@ -182,11 +210,11 @@
   void *ptr;
   GtkWidget *text;
 
-  ptr = NSA_GET_PTR (env, obj);
-  
   gdk_threads_enter ();
 
-  text = GTK_WIDGET (TEXT_FROM_SW (ptr));
+  ptr = NSA_GET_PTR (env, obj);
+  
+  text = gtk_bin_get_child (GTK_BIN (ptr));
 
   gtk_widget_grab_focus (text);
 
@@ -203,9 +231,10 @@
   jint height = 0;
   jint spacing = 0;
 
+  gdk_threads_enter ();
+
   ptr = NSA_GET_PTR (env, obj);
 
-  gdk_threads_enter ();
   sw = GTK_SCROLLED_WINDOW (ptr);
 
   if (sw)
@@ -230,9 +259,10 @@
   jint width = 0;
   jint spacing = 0;
 
+  gdk_threads_enter ();
+
   ptr = NSA_GET_PTR (env, obj);
 
-  gdk_threads_enter ();
   sw = GTK_SCROLLED_WINDOW (ptr);
 
   if (sw)
@@ -246,3 +276,243 @@
 
   return width;
 }
+
+JNIEXPORT jint JNICALL 
+Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getCaretPosition
+  (JNIEnv *env, jobject obj)
+{
+  void *ptr;
+  int pos = 0;
+  GtkWidget *text = NULL;
+  GtkTextBuffer *buf;
+  GtkTextMark *mark;
+  GtkTextIter iter;
+
+  gdk_threads_enter ();
+
+  ptr = NSA_GET_PTR (env, obj);
+
+  text = gtk_bin_get_child (GTK_BIN (ptr));
+
+  buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
+  mark = gtk_text_buffer_get_insert (buf);
+  gtk_text_buffer_get_iter_at_mark (buf, &iter, mark);
+  pos = gtk_text_iter_get_offset (&iter);
+
+  gdk_threads_leave ();
+  
+  return pos;
+}
+
+JNIEXPORT void JNICALL 
+Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_setCaretPosition
+  (JNIEnv *env, jobject obj, jint pos)
+{
+  void *ptr;
+  GtkWidget *text = NULL;
+  GtkTextBuffer *buf;
+  GtkTextIter iter;
+  GtkTextMark *oldmark;
+  GtkTextIter olditer;
+  int oldpos;
+
+  gdk_threads_enter ();
+
+  ptr = NSA_GET_PTR (env, obj);
+
+  text = gtk_bin_get_child (GTK_BIN (ptr));
+
+  buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
+
+  /* Save old position. */
+  oldmark = gtk_text_buffer_get_insert (buf);
+  gtk_text_buffer_get_iter_at_mark (buf, &olditer, oldmark);
+  oldpos = gtk_text_iter_get_offset (&olditer);
+
+  /* Move to new position. */
+  gtk_text_buffer_get_iter_at_offset (buf, &iter, pos);
+  gtk_text_buffer_place_cursor (buf, &iter);
+
+  /* Scroll to new position. Alignment is determined
+     comparing the new position to the old position. */
+  if (oldpos > pos)
+    gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW (text),
+                                  &iter, 0, TRUE, 0, 0);
+  else if (oldpos < pos)
+    gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW (text),
+                                  &iter, 0, TRUE, 1, 1);
+
+  gdk_threads_leave ();
+}
+
+JNIEXPORT jint JNICALL 
+Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getSelectionStart
+  (JNIEnv *env, jobject obj)
+{
+  void *ptr;
+  int pos = 0;
+  GtkWidget *text = NULL;
+  GtkTextBuffer *buf;
+  GtkTextIter start;
+  GtkTextIter end;
+  GtkTextMark *mark;
+  GtkTextIter iter;
+
+  gdk_threads_enter ();
+
+  ptr = NSA_GET_PTR (env, obj);
+
+  text = gtk_bin_get_child (GTK_BIN (ptr));
+
+  buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
+
+  if (gtk_text_buffer_get_selection_bounds (buf, &start, &end))
+    {
+      pos = gtk_text_iter_get_offset (&start);
+    }
+  else
+    {
+      mark = gtk_text_buffer_get_insert (buf);
+      gtk_text_buffer_get_iter_at_mark (buf, &iter, mark);
+      pos = gtk_text_iter_get_offset (&iter);
+    }
+
+  gdk_threads_leave ();
+
+  return pos;
+}
+
+JNIEXPORT jint JNICALL 
+Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getSelectionEnd
+  (JNIEnv *env, jobject obj)
+{
+  void *ptr;
+  int pos = 0;
+  GtkWidget *text = NULL;
+  GtkTextBuffer *buf;
+  GtkTextIter start;
+  GtkTextIter end;
+  GtkTextMark *mark;
+  GtkTextIter iter;
+
+  gdk_threads_enter ();
+
+  ptr = NSA_GET_PTR (env, obj);
+
+  text = gtk_bin_get_child (GTK_BIN (ptr));
+
+  buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
+
+  if (gtk_text_buffer_get_selection_bounds (buf, &start, &end))
+    {
+      pos = gtk_text_iter_get_offset (&end);
+    }
+  else
+    {
+      mark = gtk_text_buffer_get_insert (buf);
+      gtk_text_buffer_get_iter_at_mark (buf, &iter, mark);
+      pos = gtk_text_iter_get_offset (&iter);
+    }
+
+  gdk_threads_leave ();
+
+  return pos;
+}
+
+JNIEXPORT void JNICALL 
+Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_select
+  (JNIEnv *env, jobject obj, jint start, jint end)
+{
+  void *ptr;
+  GtkWidget *text = NULL;
+  GtkTextBuffer *buf;
+  GtkTextIter iter;
+
+  gdk_threads_enter ();
+
+  ptr = NSA_GET_PTR (env, obj);
+
+  text = gtk_bin_get_child (GTK_BIN (ptr));
+
+  buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
+  gtk_text_buffer_get_iter_at_offset (buf, &iter, start);
+  /* quickly move both 'insert' and 'selection_bound' to the 
+     same position */
+  gtk_text_buffer_place_cursor (buf, &iter);  
+  gtk_text_buffer_get_iter_at_offset (buf, &iter, end);
+  gtk_text_buffer_move_mark_by_name (buf, "selection_bound", &iter);
+
+  gdk_threads_leave ();
+}
+
+JNIEXPORT void JNICALL 
+Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_setEditable
+  (JNIEnv *env, jobject obj, jboolean state)
+{
+  void *ptr;
+  GtkWidget *text = NULL;
+
+  gdk_threads_enter ();
+
+  ptr = NSA_GET_PTR (env, obj);
+
+  text = gtk_bin_get_child (GTK_BIN (ptr));
+
+  gtk_text_view_set_editable (GTK_TEXT_VIEW (text), state);
+
+  gdk_threads_leave ();
+}
+
+JNIEXPORT jstring JNICALL
+Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getText
+  (JNIEnv *env, jobject obj)
+{
+  void *ptr;
+  char *contents = NULL;
+  jstring jcontents;
+  GtkWidget *text = NULL;
+  GtkTextBuffer *buf;
+  GtkTextIter start, end;
+
+  gdk_threads_enter ();
+
+  ptr = NSA_GET_PTR (env, obj);
+  
+  text = gtk_bin_get_child (GTK_BIN (ptr));
+
+  buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
+  gtk_text_buffer_get_start_iter (buf, &start);
+  gtk_text_buffer_get_end_iter (buf, &end);
+  contents = gtk_text_buffer_get_text (buf, &start, &end, FALSE);
+
+  jcontents = (*env)->NewStringUTF (env, contents);
+  g_free (contents);
+
+  gdk_threads_leave ();
+
+  return jcontents;
+}
+
+JNIEXPORT void JNICALL 
+Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_setText
+  (JNIEnv *env, jobject obj, jstring contents)
+{
+  void *ptr;
+  const char *str;
+  GtkWidget *text = NULL;
+  GtkTextBuffer *buf;
+
+  gdk_threads_enter ();
+
+  ptr = NSA_GET_PTR (env, obj);
+  str = (*env)->GetStringUTFChars (env, contents, NULL);
+
+  text = gtk_bin_get_child (GTK_BIN (ptr));
+
+  buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
+  gtk_text_buffer_set_text (buf, str, strlen (str));
+
+  (*env)->ReleaseStringUTFChars (env, contents, str);
+
+  gdk_threads_leave ();
+}
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
===================================================================
RCS file: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
diff -N native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c    10 Feb 
2005 15:47:14 -0000      1.19
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,498 +0,0 @@
-/* gtktextcomponentpeer.c -- Native implementation of GtkTextComponentPeer
-   Copyright (C) 1998, 1999, 2004 Free Software Foundation, Inc.
-
-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 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.
-
-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. */
-
-
-#include "gtkpeer.h"
-#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
-#include "gnu_java_awt_peer_gtk_GtkTextComponentPeer.h"
-
-static void textcomponent_changed_cb (GtkEditable *editable,
-                                  jobject peer);
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_connectSignals
-  (JNIEnv *env, jobject obj)
-{
-  GtkTextView *text = NULL;
-  GtkTextBuffer *buf;
-  void *ptr = NSA_GET_PTR (env, obj);
-  jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
-  g_assert (gref);
-
-  gdk_threads_enter ();
-
-  if (GTK_IS_ENTRY(ptr))
-    {
-      g_signal_connect (GTK_EDITABLE (ptr), "changed",
-                        G_CALLBACK (textcomponent_changed_cb), *gref);
-
-      gdk_threads_leave ();
-
-      /* Connect the superclass signals.  */
-      Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, *gref);
-    }
-  else
-    {
-      if (GTK_IS_SCROLLED_WINDOW (ptr))
-       {
-          text = GTK_TEXT_VIEW (GTK_SCROLLED_WINDOW (ptr)->container.child);
-       }
-      else if (GTK_IS_TEXT_VIEW (ptr))
-       {
-         text = GTK_TEXT_VIEW (ptr);
-       }
-
-      if (text)
-       {
-          buf = gtk_text_view_get_buffer (text);
-          if (buf)
-            g_signal_connect (buf, "changed",
-                              G_CALLBACK (textcomponent_changed_cb), *gref);
-
-          /* Connect the superclass signals.  */
-          /* FIXME: Cannot do that here or it will get the sw and not the list.
-             We must a generic way of doing this. */
-          /* Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env,
-                                                                        obj); 
*/
-          g_signal_connect (GTK_OBJECT (text), "event", 
-                    G_CALLBACK (pre_event_handler), *gref);
-
-          gdk_threads_leave ();
-       }
-    }
-}
-
-JNIEXPORT jint JNICALL 
-Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_getCaretPosition
-  (JNIEnv *env, jobject obj)
-{
-  void *ptr;
-  int pos = 0;
-  GtkEditable *editable;
-  GtkWidget *text = NULL;
-  GtkTextBuffer *buf;
-  GtkTextMark *mark;
-  GtkTextIter iter;
-
-  ptr = NSA_GET_PTR (env, obj);
-
-  gdk_threads_enter ();
-
-  if (GTK_IS_EDITABLE (ptr))
-    {
-      editable = GTK_EDITABLE (ptr);
-      pos = gtk_editable_get_position (editable);
-    }
-  else
-    {
-      if (GTK_IS_SCROLLED_WINDOW (ptr))
-       {
-         text = GTK_WIDGET (GTK_TEXT_VIEW (GTK_SCROLLED_WINDOW 
(ptr)->container.child));
-       }
-      else if (GTK_IS_TEXT_VIEW (ptr))
-       {
-         text = GTK_WIDGET (ptr);
-       }
-
-      if (text)
-       {
-         buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
-         mark = gtk_text_buffer_get_insert (buf);
-         gtk_text_buffer_get_iter_at_mark (buf, &iter, mark);
-         pos = gtk_text_iter_get_offset (&iter);
-       }
-    }
-
-  gdk_threads_leave ();
-  
-  return pos;
-}
-
-JNIEXPORT void JNICALL 
-Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_setCaretPosition
-  (JNIEnv *env, jobject obj, jint pos)
-{
-  void *ptr;
-  GtkEditable *editable;
-  GtkWidget *text = NULL;
-  GtkTextBuffer *buf;
-  GtkTextIter iter;
-  GtkTextMark *oldmark;
-  GtkTextIter olditer;
-  int oldpos;
-
-  ptr = NSA_GET_PTR (env, obj);
-
-  gdk_threads_enter ();
-  if (GTK_IS_EDITABLE (ptr))
-    {
-      editable = GTK_EDITABLE (ptr);
-      gtk_editable_set_position (editable, pos);
-    }
-  else
-    {
-      if (GTK_IS_SCROLLED_WINDOW (ptr))
-       {
-         text = GTK_WIDGET (GTK_TEXT_VIEW (GTK_SCROLLED_WINDOW 
(ptr)->container.child));
-       }
-      else if (GTK_IS_TEXT_VIEW (ptr))
-       {
-         text = GTK_WIDGET (ptr);
-       }
-
-      if (text)
-       {
-         buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
-
-         /* Save old position. */
-         oldmark = gtk_text_buffer_get_insert (buf);
-         gtk_text_buffer_get_iter_at_mark (buf, &olditer, oldmark);
-         oldpos = gtk_text_iter_get_offset (&olditer);
-
-         /* Move to new position. */
-         gtk_text_buffer_get_iter_at_offset (buf, &iter, pos);
-         gtk_text_buffer_place_cursor (buf, &iter);
-
-         /* Scroll to new position. Alignment is determined
-            comparing the new position to the old position. */
-         if (oldpos > pos)
-           gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW (text),
-                                         &iter, 0, TRUE, 0, 0);
-         else if (oldpos < pos)
-           gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW (text),
-                                         &iter, 0, TRUE, 1, 1);
-       }
-    }
-
-  gdk_threads_leave ();
-}
-
-JNIEXPORT jint JNICALL 
-Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_getSelectionStart
-  (JNIEnv *env, jobject obj)
-{
-  void *ptr;
-  int pos = 0;
-  GtkEditable *editable;
-  GtkWidget *text = NULL;
-  GtkTextBuffer *buf;
-  GtkTextIter start;
-  GtkTextIter end;
-  int starti, endi;
-  GtkTextMark *mark;
-  GtkTextIter iter;
-
-  ptr = NSA_GET_PTR (env, obj);
-
-  gdk_threads_enter ();
-
-  if (GTK_IS_EDITABLE (ptr))
-    {
-      editable = GTK_EDITABLE (ptr);
-      if (gtk_editable_get_selection_bounds (editable, &starti, &endi))
-       pos = starti;
-      else
-        pos = gtk_editable_get_position (editable);
-    }
-  else
-    {
-      if (GTK_IS_SCROLLED_WINDOW (ptr))
-       {
-         text = GTK_WIDGET (GTK_TEXT_VIEW (GTK_SCROLLED_WINDOW 
(ptr)->container.child));
-       }
-      else if (GTK_IS_TEXT_VIEW (ptr))
-       {
-         text = GTK_WIDGET (ptr);
-       }
-
-      if (text)
-       {
-         buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
-         if (gtk_text_buffer_get_selection_bounds(buf, &start, &end))
-           pos = gtk_text_iter_get_offset (&start);
-         else 
-           {
-            mark = gtk_text_buffer_get_insert (buf);
-            gtk_text_buffer_get_iter_at_mark (buf, &iter, mark);
-            pos = gtk_text_iter_get_offset (&iter);
-           }  
-       }
-    }
-
-  gdk_threads_leave ();
-
-  return pos;
-}
-
-JNIEXPORT jint JNICALL 
-Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_getSelectionEnd
-  (JNIEnv *env, jobject obj)
-{
-  void *ptr;
-  int pos = 0;
-  GtkEditable *editable;
-  GtkWidget *text = NULL;
-  GtkTextBuffer *buf;
-  GtkTextIter start;
-  GtkTextIter end;
-  int starti, endi;
-  GtkTextMark *mark;
-  GtkTextIter iter;
-
-  ptr = NSA_GET_PTR (env, obj);
-
-  gdk_threads_enter ();
-
-  if (GTK_IS_EDITABLE (ptr))
-    {
-      editable = GTK_EDITABLE (ptr);
-      if (gtk_editable_get_selection_bounds (editable, &starti, &endi))
-       pos = endi;
-      else
-        pos = gtk_editable_get_position (editable);
-    }
-  else
-    {
-      if (GTK_IS_SCROLLED_WINDOW (ptr))
-       {
-         text = GTK_WIDGET (GTK_TEXT_VIEW (GTK_SCROLLED_WINDOW 
(ptr)->container.child));
-       }
-      else if (GTK_IS_TEXT_VIEW (ptr))
-       {
-         text = GTK_WIDGET (ptr);
-       }
-
-      if (text)
-       {
-         buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
-         if (gtk_text_buffer_get_selection_bounds(buf, &start, &end))
-           pos = gtk_text_iter_get_offset (&end);
-         else 
-           {
-            mark = gtk_text_buffer_get_insert (buf);
-            gtk_text_buffer_get_iter_at_mark (buf, &iter, mark);
-            pos = gtk_text_iter_get_offset (&iter);
-           }    
-       }
-    }
-
-  gdk_threads_leave ();
-
-  return pos;
-}
-
-JNIEXPORT void JNICALL 
-Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_select
-  (JNIEnv *env, jobject obj, jint start, jint end)
-{
-  void *ptr;
-  GtkEditable *editable;
-  GtkWidget *text = NULL;
-  GtkTextBuffer *buf;
-  GtkTextIter iter;
-
-  ptr = NSA_GET_PTR (env, obj);
-
-  gdk_threads_enter ();
-
-
-  if (GTK_IS_EDITABLE (ptr))
-    {
-      editable = GTK_EDITABLE (ptr);
-      gtk_editable_select_region (editable, start, end);
-    }
-  else
-    {
-      if (GTK_IS_SCROLLED_WINDOW (ptr))
-       {
-         text = GTK_WIDGET (GTK_TEXT_VIEW (GTK_SCROLLED_WINDOW 
(ptr)->container.child));
-       }
-      else if (GTK_IS_TEXT_VIEW (ptr))
-       {
-         text = GTK_WIDGET (ptr);
-       }
-
-      if (text)
-       {
-         buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
-         gtk_text_buffer_get_iter_at_offset (buf, &iter, start);
-         /* quickly move both 'insert' and 'selection_bound' to the 
-            same position */
-         gtk_text_buffer_place_cursor (buf, &iter);  
-         gtk_text_buffer_get_iter_at_offset (buf, &iter, end);
-         gtk_text_buffer_move_mark_by_name (buf, "selection_bound", &iter);
-       }
-    }
-
-  gdk_threads_leave ();
-}
-
-JNIEXPORT void JNICALL 
-Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_setEditable
-  (JNIEnv *env, jobject obj, jboolean state)
-{
-  void *ptr;
-  GtkEditable *editable;
-  GtkWidget *text = NULL;
-
-  ptr = NSA_GET_PTR (env, obj);
-
-  gdk_threads_enter ();
-
-  if (GTK_IS_EDITABLE (ptr))
-    {
-      editable = GTK_EDITABLE (ptr);
-      gtk_editable_set_editable (editable, state);
-    }
-  else
-    {
-      if (GTK_IS_SCROLLED_WINDOW (ptr))
-       {
-         text = GTK_WIDGET (GTK_TEXT_VIEW (GTK_SCROLLED_WINDOW 
(ptr)->container.child));
-       }
-      else if (GTK_IS_TEXT_VIEW (ptr))
-       {
-         text = GTK_WIDGET (ptr);
-       }
-
-      if (text)
-       {
-         gtk_text_view_set_editable (GTK_TEXT_VIEW (text), state);
-       }
-    }
-
-  gdk_threads_leave ();
-}
-
-JNIEXPORT jstring JNICALL
-Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_getText
-  (JNIEnv *env, jobject obj)
-{
-  void *ptr;
-  char *contents = NULL;
-  jstring jcontents;
-  GtkEditable *editable;
-  GtkWidget *text = NULL;
-  GtkTextBuffer *buf;
-  GtkTextIter start, end;
-
-  ptr = NSA_GET_PTR (env, obj);
-  
-  gdk_threads_enter ();
-
-  if (GTK_IS_EDITABLE (ptr))
-    {
-      editable = GTK_EDITABLE (ptr);
-      contents = gtk_editable_get_chars (editable, 0, -1);
-    }
-  else
-    {
-      if (GTK_IS_SCROLLED_WINDOW (ptr))
-       {
-         text = GTK_WIDGET (GTK_TEXT_VIEW (GTK_SCROLLED_WINDOW 
(ptr)->container.child));
-       }
-      else if (GTK_IS_TEXT_VIEW (ptr))
-       {
-         text = GTK_WIDGET (ptr);
-       }
-
-      if (text)
-       {
-         buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
-         gtk_text_buffer_get_start_iter (buf, &start);
-         gtk_text_buffer_get_end_iter (buf, &end);
-         contents = gtk_text_buffer_get_text (buf, &start, &end, FALSE);
-       }
-    }
-
-  gdk_threads_leave ();
-
-  jcontents = (*env)->NewStringUTF (env, contents);
-  g_free (contents);
-
-  return jcontents;
-}
-
-JNIEXPORT void JNICALL 
-Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_setText
-  (JNIEnv *env, jobject obj, jstring contents)
-{
-  void *ptr;
-  const char *str;
-  GtkWidget *text = NULL;
-  GtkTextBuffer *buf;
-
-  ptr = NSA_GET_PTR (env, obj);
-  str = (*env)->GetStringUTFChars (env, contents, NULL);
-  
-  gdk_threads_enter ();
-
-  if (GTK_IS_EDITABLE (ptr))
-    {
-      gtk_entry_set_text (GTK_ENTRY (ptr), str);
-    }
-  else
-    {
-      if (GTK_IS_SCROLLED_WINDOW (ptr))
-       {
-         text = GTK_WIDGET (GTK_TEXT_VIEW (GTK_SCROLLED_WINDOW 
(ptr)->container.child));
-       }
-      else if (GTK_IS_TEXT_VIEW (ptr))
-       {
-         text = GTK_WIDGET (ptr);
-       }
-
-      if (text)
-       {
-         buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
-         gtk_text_buffer_set_text (buf, str, strlen (str));
-       }
-    }
-
-  gdk_threads_leave ();
-
-  (*env)->ReleaseStringUTFChars (env, contents, str);
-}
-
-static void
-textcomponent_changed_cb (GtkEditable *editable __attribute__((unused)),
-                         jobject peer)
-{
-  gdk_threads_leave ();
-  (*gdk_env())->CallVoidMethod (gdk_env(), peer, postTextEventID);
-  gdk_threads_enter ();
-}
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
===================================================================
RCS file: 
/cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c,v
retrieving revision 1.20
diff -u -r1.20 gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c        2 Jul 
2005 20:32:54 -0000       1.20
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c        4 Jul 
2005 23:50:41 -0000
@@ -45,8 +45,22 @@
 #define BB_GREEN  26985
 #define BB_BLUE   31611
 
-static jint
-get_border_width (GtkWidget *entry);
+void
+classpath_gtk_textcomponent_init_jni (void)
+{
+  jclass gtkcomponentpeer;
+
+  gtkcomponentpeer = (*gdk_env())->FindClass (gdk_env(),
+                                              
"gnu/java/awt/peer/gtk/GtkComponentPeer");
+
+  postTextEventID = (*gdk_env())->GetMethodID (gdk_env(), gtkcomponentpeer,
+                                            "postTextEvent",
+                                            "()V");
+}
+
+static void textcomponent_changed_cb (GtkEditable *editable, jobject peer);
+
+static jint get_border_width (GtkWidget *entry);
 
 JNIEXPORT void JNICALL 
 Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_create
@@ -54,18 +68,39 @@
 {
   GtkWidget *entry;
 
+  gdk_threads_enter ();
+
   /* Create global reference and save it for future use */
   NSA_SET_GLOBAL_REF (env, obj);
 
-  gdk_threads_enter ();
-
   entry = gtk_entry_new ();
   gtk_widget_set_size_request (entry,
                               text_width + 2 * get_border_width (entry), -1);
 
+  NSA_SET_PTR (env, obj, entry);
+
   gdk_threads_leave ();
+}
 
-  NSA_SET_PTR (env, obj, entry);
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_connectSignals
+  (JNIEnv *env, jobject obj)
+{
+  void *ptr;
+  jobject *gref;
+
+  gdk_threads_enter ();
+
+  ptr = NSA_GET_PTR (env, obj);
+  gref = NSA_GET_GLOBAL_REF (env, obj);
+
+  /* TextComponent signals */
+  classpath_gtk_textcomponent_connect_signals (G_OBJECT (ptr), gref);
+
+  /* Component signals */
+  classpath_gtk_component_connect_signals (G_OBJECT (ptr), gref);
+
+  gdk_threads_leave ();
 }
 
 JNIEXPORT void JNICALL
@@ -75,14 +110,14 @@
   GdkColor color;
   void *ptr;
 
+  gdk_threads_enter ();
+
   ptr = NSA_GET_PTR (env, obj);
 
   color.red = (red / 255.0) * 65535;
   color.green = (green / 255.0) * 65535;
   color.blue = (blue / 255.0) * 65535;
 
-  gdk_threads_enter ();
-
   gtk_widget_modify_base (GTK_WIDGET (ptr), GTK_STATE_NORMAL, &color);
 
   gdk_threads_leave ();
@@ -95,14 +130,14 @@
   GdkColor color;
   void *ptr;
 
+  gdk_threads_enter ();
+
   ptr = NSA_GET_PTR (env, obj);
 
   color.red = (red / 255.0) * 65535;
   color.green = (green / 255.0) * 65535;
   color.blue = (blue / 255.0) * 65535;
   
-  gdk_threads_enter ();
-
   gtk_widget_modify_text (GTK_WIDGET (ptr), GTK_STATE_NORMAL, &color);
 
   if ( red == 0 && green == 0 && blue == 0)
@@ -123,10 +158,10 @@
   void *ptr;
   int border_width = 0;
 
-  ptr = NSA_GET_PTR (env, obj);
-
   gdk_threads_enter ();
 
+  ptr = NSA_GET_PTR (env, obj);
+
   border_width = get_border_width (GTK_WIDGET (ptr));
 
   gdk_threads_leave ();
@@ -168,10 +203,10 @@
   void *ptr;
   GtkEntry *entry;
 
-  ptr = NSA_GET_PTR (env, obj);
-
   gdk_threads_enter ();
 
+  ptr = NSA_GET_PTR (env, obj);
+
   entry = GTK_ENTRY (ptr);
 
   if (c != 0)
@@ -193,18 +228,17 @@
 {
   const char *font_name;
   void *ptr;
-  GtkWidget *entry;
   PangoFontDescription *font_desc;
 
+  gdk_threads_enter();
+
   ptr = NSA_GET_PTR (env, obj);
 
-  entry = GTK_WIDGET (ptr);
   font_name = (*env)->GetStringUTFChars (env, name, NULL);
 
-  gdk_threads_enter();
-
   font_desc = pango_font_description_from_string (font_name);
-  pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
+  pango_font_description_set_size (font_desc,
+                                   size * dpi_conversion_factor);
 
   if (style & AWT_STYLE_BOLD)
     pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
@@ -212,11 +246,176 @@
   if (style & AWT_STYLE_ITALIC)
     pango_font_description_set_style (font_desc, PANGO_STYLE_OBLIQUE);
 
-  gtk_widget_modify_font (GTK_WIDGET(entry), font_desc);
+  gtk_widget_modify_font (GTK_WIDGET (ptr), font_desc);
 
   pango_font_description_free (font_desc);
 
+  (*env)->ReleaseStringUTFChars (env, name, font_name);
+
   gdk_threads_leave();
+}
 
-  (*env)->ReleaseStringUTFChars (env, name, font_name);
+JNIEXPORT jint JNICALL 
+Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_getCaretPosition
+  (JNIEnv *env, jobject obj)
+{
+  void *ptr;
+  int pos = 0;
+
+  gdk_threads_enter ();
+
+  ptr = NSA_GET_PTR (env, obj);
+
+  pos = gtk_editable_get_position (GTK_EDITABLE (ptr));
+
+  gdk_threads_leave ();
+  
+  return pos;
+}
+
+JNIEXPORT void JNICALL 
+Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_setCaretPosition
+  (JNIEnv *env, jobject obj, jint pos)
+{
+  void *ptr;
+
+  gdk_threads_enter ();
+
+  ptr = NSA_GET_PTR (env, obj);
+
+  gtk_editable_set_position (GTK_EDITABLE (ptr), pos);
+
+  gdk_threads_leave ();
+}
+
+JNIEXPORT jint JNICALL 
+Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_getSelectionStart
+  (JNIEnv *env, jobject obj)
+{
+  void *ptr;
+  int pos = 0;
+  int starti, endi;
+
+  gdk_threads_enter ();
+
+  ptr = NSA_GET_PTR (env, obj);
+
+  if (gtk_editable_get_selection_bounds (GTK_EDITABLE (ptr), &starti, &endi))
+    pos = starti;
+  else
+    pos = gtk_editable_get_position (GTK_EDITABLE (ptr));
+
+  gdk_threads_leave ();
+
+  return pos;
+}
+
+JNIEXPORT jint JNICALL 
+Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_getSelectionEnd
+  (JNIEnv *env, jobject obj)
+{
+  void *ptr;
+  int pos = 0;
+  int starti, endi;
+
+  gdk_threads_enter ();
+
+  ptr = NSA_GET_PTR (env, obj);
+
+  if (gtk_editable_get_selection_bounds (GTK_EDITABLE (ptr), &starti, &endi))
+    pos = endi;
+  else
+    pos = gtk_editable_get_position (GTK_EDITABLE (ptr));
+
+  gdk_threads_leave ();
+
+  return pos;
+}
+
+JNIEXPORT void JNICALL 
+Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_select
+  (JNIEnv *env, jobject obj, jint start, jint end)
+{
+  void *ptr;
+
+  gdk_threads_enter ();
+
+  ptr = NSA_GET_PTR (env, obj);
+
+  gtk_editable_select_region (GTK_EDITABLE (ptr), start, end);
+
+  gdk_threads_leave ();
+}
+
+JNIEXPORT void JNICALL 
+Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_setEditable
+  (JNIEnv *env, jobject obj, jboolean state)
+{
+  void *ptr;
+
+  gdk_threads_enter ();
+
+  ptr = NSA_GET_PTR (env, obj);
+
+  gtk_editable_set_editable (GTK_EDITABLE (ptr), state);
+
+  gdk_threads_leave ();
+}
+
+JNIEXPORT jstring JNICALL
+Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_getText
+  (JNIEnv *env, jobject obj)
+{
+  void *ptr;
+  char *contents = NULL;
+  jstring jcontents;
+
+  gdk_threads_enter ();
+
+  ptr = NSA_GET_PTR (env, obj);
+  
+  contents = gtk_editable_get_chars (GTK_EDITABLE (ptr), 0, -1);
+
+  jcontents = (*env)->NewStringUTF (env, contents);
+
+  g_free (contents);
+
+  gdk_threads_leave ();
+
+  return jcontents;
+}
+
+JNIEXPORT void JNICALL 
+Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_setText
+  (JNIEnv *env, jobject obj, jstring contents)
+{
+  void *ptr;
+  const char *str;
+
+  gdk_threads_enter ();
+
+  ptr = NSA_GET_PTR (env, obj);
+  str = (*env)->GetStringUTFChars (env, contents, NULL);
+  
+  gtk_entry_set_text (GTK_ENTRY (ptr), str);
+
+  (*env)->ReleaseStringUTFChars (env, contents, str);
+
+  gdk_threads_leave ();
+}
+
+void
+classpath_gtk_textcomponent_connect_signals (GObject *ptr, jobject *gref)
+{
+  g_signal_connect (G_OBJECT(ptr), "changed",
+                    G_CALLBACK (textcomponent_changed_cb), *gref);
+}
+
+static void
+textcomponent_changed_cb (GtkEditable *editable __attribute__((unused)),
+                         jobject peer)
+{
+  gdk_threads_leave ();
+  (*gdk_env())->CallVoidMethod (gdk_env(), peer, postTextEventID);
+  gdk_threads_enter ();
 }
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
===================================================================
RCS file: 
/cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c,v
retrieving revision 1.16
diff -u -r1.16 gnu_java_awt_peer_gtk_GtkToolkit.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c      2 Jul 2005 
20:32:54 -0000       1.16
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c      4 Jul 2005 
23:50:41 -0000
@@ -133,7 +133,7 @@
   char *homedir, *rcpath = NULL;
 
   jclass gtkgenericpeer, gtkcomponentpeer, gtkchoicepeer, gtkwindowpeer, 
gtkscrollbarpeer, gtklistpeer,
-    gtkmenuitempeer, gtktextcomponentpeer, window, gdkgraphics;
+    gtkmenuitempeer, window, gdkgraphics;
 #ifdef GTK_CAIRO
   jclass gdkgraphics2d;
 #endif
@@ -206,8 +206,6 @@
   gtklistpeer = (*env)->FindClass (env, "gnu/java/awt/peer/gtk/GtkListPeer");
   gtkmenuitempeer = (*env)->FindClass (env,
                                      "gnu/java/awt/peer/gtk/GtkMenuItemPeer");
-  gtktextcomponentpeer = (*env)->FindClass (env,
-                                     
"gnu/java/awt/peer/gtk/GtkTextComponentPeer");
   gdkgraphics = (*env)->FindClass (env,
                                    "gnu/java/awt/peer/gtk/GdkGraphics");
 #ifdef GTK_CAIRO
@@ -262,7 +260,7 @@
   postListItemEventID = (*env)->GetMethodID (env, gtklistpeer,
                                             "postItemEvent",
                                             "(II)V");
-  postTextEventID = (*env)->GetMethodID (env, gtktextcomponentpeer,
+  postTextEventID = (*env)->GetMethodID (env, gtkcomponentpeer,
                                             "postTextEvent",
                                             "()V");
   initComponentGraphicsID = (*env)->GetMethodID (env, gdkgraphics,
Index: native/jni/gtk-peer/gtkpeer.h
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/gtk-peer/gtkpeer.h,v
retrieving revision 1.33
diff -u -r1.33 gtkpeer.h
--- native/jni/gtk-peer/gtkpeer.h       2 Jul 2005 20:32:54 -0000       1.33
+++ native/jni/gtk-peer/gtkpeer.h       4 Jul 2005 23:50:41 -0000
@@ -504,6 +504,14 @@
   GtkWidget **widget;
 };
 
+/* JNI initialization functions */
+void classpath_gtk_textcomponent_init_jni (void);
+
+/* Signal connection convience functions */
+void classpath_gtk_component_connect_signals (GObject *ptr, jobject *gref);
+void classpath_gtk_component_connect_nonfocus_signals (GObject *ptr, jobject 
*gref);
+void classpath_gtk_textcomponent_connect_signals (GObject *ptr, jobject *gref);
+
 /* GtkImage functions used by other gtk peer native routines */
 GdkPixbuf *gnu_java_awt_peer_gtk_GtkImage_getPixbuf(JNIEnv *env, jobject obj);
 GdkPixmap *gnu_java_awt_peer_gtk_GtkImage_getPixmap(JNIEnv *env, jobject obj);

reply via email to

[Prev in Thread] Current Thread [Next in Thread]