[Top][All Lists]
[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);
- [cp-patches] [patch] refactor text peers to remove GtkTextComponentPeer,
Thomas Fitzsimmons <=