This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[gui] [PATCH] Fixes to TextComponent and TextArea
- From: David Jee <djee at redhat dot com>
- To: java-patches at gcc dot gnu dot org
- Date: Wed, 09 Jun 2004 17:10:45 -0400
- Subject: [gui] [PATCH] Fixes to TextComponent and TextArea
Hi,
I committed the following patch to the java-gui-branch. It fixes a
couple bugs related to TextComponent and TextArea. First, it makes sure
that the text cursor is set to the beginning of the text, to match Sun
AWT's behaviour.
It also eliminates an infinite feedback loop problem, where a call to
TextArea.repaint() will cause a GTK expose event, which results in a
call to TextArea.repaint() again. A mechanism to stop this type of
problem was already in place; TextArea just needed to be handled
separately.
-David Jee
2004-06-09 David Jee <djee@redhat.com>
* gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
(GtkTextComponentPeer): Set caret position to 0.
* java/awt/TextComponent.java
(setText): Set caret position to 0.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_addExposeFilter):
Handle GtkScrolledWindow separately. Fix signal handler blocking.
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_removeExposeFilter):
Likewise.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create): Make cursor
visible.
Index: gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkTextComponentPeer.java,v
retrieving revision 1.7
diff -u -r1.7 GtkTextComponentPeer.java
--- gnu/java/awt/peer/gtk/GtkTextComponentPeer.java 11 Dec 2003 13:50:50 -0000 1.7
+++ gnu/java/awt/peer/gtk/GtkTextComponentPeer.java 9 Jun 2004 20:51:44 -0000
@@ -54,6 +54,7 @@
super (tc);
setText (tc.getText ());
+ setCaretPosition(0);
}
public native void connectSignals ();
Index: java/awt/TextComponent.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/TextComponent.java,v
retrieving revision 1.11
diff -u -r1.11 TextComponent.java
--- java/awt/TextComponent.java 4 Dec 2003 19:31:01 -0000 1.11
+++ java/awt/TextComponent.java 9 Jun 2004 20:51:46 -0000
@@ -142,6 +142,7 @@
TextComponentPeer tcp = (TextComponentPeer)getPeer();
if (tcp != null)
tcp.setText(text);
+ setCaretPosition(0);
}
/*************************************************************************/
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,v
retrieving revision 1.15.2.12
diff -u -r1.15.2.12 gnu_java_awt_peer_gtk_GtkComponentPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c 27 May 2004 18:40:20 -0000 1.15.2.12
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c 9 Jun 2004 20:51:46 -0000
@@ -1131,12 +1131,23 @@
filterobj = GTK_OBJECT(layout);
}
+ else if (GTK_IS_SCROLLED_WINDOW(ptr))
+ {
+ // The event will go to the parent GtkLayout.
+ filterobj = GTK_OBJECT(GTK_WIDGET(ptr)->parent);
+ }
else
{
filterobj = GTK_OBJECT(ptr);
}
- g_signal_handlers_block_by_func (filterobj, *pre_event_handler, *gref);
+ gulong hid = g_signal_handler_find(filterobj,
+ G_SIGNAL_MATCH_FUNC,
+ 0, 0, NULL, *pre_event_handler, NULL);
+ if (hid > 0)
+ {
+ g_signal_handler_block(filterobj, hid);
+ }
g_signal_connect( filterobj, "event",
G_CALLBACK(filter_expose_event_handler), *gref);
@@ -1175,6 +1186,11 @@
filterobj = GTK_OBJECT(layout);
}
+ else if (GTK_IS_SCROLLED_WINDOW(ptr))
+ {
+ // The event will go to the parent GtkLayout.
+ filterobj = GTK_OBJECT(GTK_WIDGET(ptr)->parent);
+ }
else
{
filterobj = GTK_OBJECT(ptr);
@@ -1182,7 +1198,13 @@
g_signal_handlers_disconnect_by_func (filterobj,
*filter_expose_event_handler, *gref);
- g_signal_handlers_unblock_by_func (filterobj, *pre_event_handler, *gref);
+ gulong hid = g_signal_handler_find(filterobj,
+ G_SIGNAL_MATCH_FUNC,
+ 0, 0, NULL, *pre_event_handler, NULL);
+ if (hid > 0)
+ {
+ g_signal_handler_unblock(filterobj, hid);
+ }
gdk_threads_leave ();
}
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c,v
retrieving revision 1.11.8.3
diff -u -r1.11.8.3 gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c 27 May 2004 18:40:20 -0000 1.11.8.3
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c 9 Jun 2004 20:51:46 -0000
@@ -54,6 +54,8 @@
text = gtk_text_view_new ();
gtk_widget_set_size_request (text, textview_width, textview_height);
+ gtk_text_view_set_cursor_visible(text, TRUE);
+
gtk_widget_show (text);
sw = gtk_scrolled_window_new (NULL, NULL);