This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[gui][PATCH] set text area focus traversal keys
- From: Thomas Fitzsimmons <fitzsim at redhat dot com>
- To: java-patches at gcc dot gnu dot org
- Date: Thu, 06 May 2004 19:25:08 -0400
- Subject: [gui][PATCH] set text area focus traversal keys
Hi,
This patch fixes two TextArea problems. First, TextAreas were not
receiving the keyboard input focus. Second, Tab and Shift-Tab
keystrokes were causing the keyboard focus to be transferred. Instead,
these keystrokes should be delivered to the TextArea.
I committed this to java-gui-branch.
Tom
2004-05-06 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
(gtkWidgetRequestFocus): New method.
* java/awt/TextArea.java (TextArea): Set focus traversal keys to
disable Tab and Shift-Tab keystrokes.
(addNotify, appendText, insertText, replaceText): Simplify peer
retrieval code.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
(connectSignals): Remove connections to "commit" signals.
Remove C++-style comments.
Index: gnu/java/awt/peer/gtk/GtkTextAreaPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,v
retrieving revision 1.7
diff -u -r1.7 GtkTextAreaPeer.java
--- gnu/java/awt/peer/gtk/GtkTextAreaPeer.java 13 Jan 2004 20:58:33 -0000 1.7
+++ gnu/java/awt/peer/gtk/GtkTextAreaPeer.java 6 May 2004 23:13:32 -0000
@@ -50,6 +50,7 @@
native void create (int width, int height, int scrollbarVisibility);
native void gtkSetFont (String name, int style, int size);
+ native protected void gtkWidgetRequestFocus ();
void create ()
{
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
diff -u -r1.11 gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c 13 Jan 2004 20:58:33 -0000 1.11
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c 6 May 2004 23:13:32 -0000
@@ -173,6 +173,24 @@
(*env)->ReleaseStringUTFChars (env, name, font_name);
}
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkWidgetRequestFocus
+ (JNIEnv *env, jobject obj)
+{
+ void *ptr;
+ GtkWidget *text;
+
+ ptr = NSA_GET_PTR (env, obj);
+
+ gdk_threads_enter ();
+
+ text = GTK_WIDGET (TEXT_FROM_SW (ptr));
+
+ gtk_widget_grab_focus (text);
+
+ gdk_threads_leave ();
+}
+
JNIEXPORT jint JNICALL
Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getHScrollbarHeight
(JNIEnv *env, jobject obj)
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c,v
retrieving revision 1.11
diff -u -r1.11 gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c 13 Dec 2003 01:15:47 -0000 1.11
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c 6 May 2004 23:13:32 -0000
@@ -61,9 +61,6 @@
if (GTK_IS_ENTRY(ptr))
{
- g_signal_connect (GTK_ENTRY (ptr)->im_context, "commit",
- G_CALLBACK (textcomponent_commit_cb), *gref);
-
g_signal_connect (GTK_EDITABLE (ptr), "changed",
G_CALLBACK (textcomponent_changed_cb), *gref);
@@ -85,9 +82,6 @@
if (text)
{
- g_signal_connect (text->im_context, "commit",
- G_CALLBACK (textcomponent_commit_cb), *gref);
-
buf = gtk_text_view_get_buffer (text);
if (buf)
g_signal_connect (buf, "changed",
@@ -112,8 +106,8 @@
{
void *ptr;
int pos = 0;
- GtkEditable *editable; // type of GtkEntry (TextField)
- GtkWidget *text = NULL; // type of GtkTextView (TextArea)
+ GtkEditable *editable;
+ GtkWidget *text = NULL;
GtkTextBuffer *buf;
GtkTextMark *mark;
GtkTextIter iter;
@@ -157,8 +151,8 @@
(JNIEnv *env, jobject obj, jint pos)
{
void *ptr;
- GtkEditable *editable; // type of GtkEntry (TextField)
- GtkWidget *text = NULL; // type of GtkTextView (TextArea)
+ GtkEditable *editable;
+ GtkWidget *text = NULL;
GtkTextBuffer *buf;
GtkTextIter iter;
@@ -198,8 +192,8 @@
{
void *ptr;
int pos = 0;
- GtkEditable *editable; // type of GtkEntry (TextField)
- GtkWidget *text = NULL; // type of GtkTextView (TextArea)
+ GtkEditable *editable;
+ GtkWidget *text = NULL;
GtkTextBuffer *buf;
GtkTextIter start;
GtkTextIter end;
@@ -255,8 +249,8 @@
{
void *ptr;
int pos = 0;
- GtkEditable *editable; // type of GtkEntry (TextField)
- GtkWidget *text = NULL; // type of GtkTextView (TextArea)
+ GtkEditable *editable;
+ GtkWidget *text = NULL;
GtkTextBuffer *buf;
GtkTextIter start;
GtkTextIter end;
@@ -311,8 +305,8 @@
(JNIEnv *env, jobject obj, jint start, jint end)
{
void *ptr;
- GtkEditable *editable; // type of GtkEntry (TextField)
- GtkWidget *text = NULL; // type of GtkTextView (TextArea)
+ GtkEditable *editable;
+ GtkWidget *text = NULL;
GtkTextBuffer *buf;
GtkTextIter iter;
@@ -357,8 +351,8 @@
(JNIEnv *env, jobject obj, jboolean state)
{
void *ptr;
- GtkEditable *editable; // type of GtkEntry (TextField)
- GtkWidget *text = NULL; // type of GtkTextView (TextArea)
+ GtkEditable *editable;
+ GtkWidget *text = NULL;
ptr = NSA_GET_PTR (env, obj);
@@ -396,8 +390,8 @@
void *ptr;
char *contents = NULL;
jstring jcontents;
- GtkEditable *editable; // type of GtkEntry (TextField)
- GtkWidget *text = NULL; // type of GtkTextView (TextArea)
+ GtkEditable *editable;
+ GtkWidget *text = NULL;
GtkTextBuffer *buf;
GtkTextIter start, end;
@@ -444,7 +438,7 @@
{
void *ptr;
const char *str;
- GtkWidget *text = NULL; // type of GtkTextView (TextArea)
+ GtkWidget *text = NULL;
GtkTextBuffer *buf;
ptr = NSA_GET_PTR (env, obj);
Index: java/awt/TextArea.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/TextArea.java,v
retrieving revision 1.10
diff -u -r1.10 TextArea.java
--- java/awt/TextArea.java 3 Feb 2004 17:10:54 -0000 1.10
+++ java/awt/TextArea.java 6 May 2004 23:13:32 -0000
@@ -39,6 +39,9 @@
import java.awt.peer.ComponentPeer;
import java.awt.peer.TextAreaPeer;
+import java.awt.event.KeyEvent;
+import java.util.HashSet;
+import java.util.Set;
/**
@@ -193,11 +196,19 @@
this.rows = rows;
this.columns = columns;
this.scrollbarVisibility = scrollbarVisibility;
- }
- /*
- * Instance Variables
- */
+ // TextAreas need to receive tab key events so we override the
+ // default forward and backward traversal key sets.
+ Set s = new HashSet ();
+ s.add (AWTKeyStroke.getAWTKeyStroke (KeyEvent.VK_TAB,
+ KeyEvent.CTRL_DOWN_MASK));
+ setFocusTraversalKeys (KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, s);
+ s = new HashSet ();
+ s.add (AWTKeyStroke.getAWTKeyStroke (KeyEvent.VK_TAB,
+ KeyEvent.SHIFT_DOWN_MASK
+ | KeyEvent.CTRL_DOWN_MASK));
+ setFocusTraversalKeys (KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, s);
+ }
/**
* Retrieve the number of columns that this text area would prefer
@@ -431,10 +442,8 @@
*/
public void addNotify ()
{
- if (getPeer () != null)
- return;
-
- setPeer ((ComponentPeer) getToolkit().createTextArea (this));
+ if (getPeer () == null)
+ setPeer ((ComponentPeer) getToolkit().createTextArea (this));
}
/**
@@ -458,10 +467,9 @@
public void appendText (String str)
{
TextAreaPeer peer = (TextAreaPeer) getPeer ();
- if (peer == null)
- return;
- peer.insert (str, peer.getText().length ());
+ if (peer != null)
+ peer.insert (str, peer.getText().length ());
}
/**
@@ -489,10 +497,9 @@
public void insertText (String str, int pos)
{
TextAreaPeer peer = (TextAreaPeer) getPeer ();
- if (peer == null)
- return;
- peer.insert (str, pos);
+ if (peer != null)
+ peer.insert (str, pos);
}
/**
@@ -530,10 +537,9 @@
public void replaceText (String str, int start, int end)
{
TextAreaPeer peer = (TextAreaPeer) getPeer ();
- if (peer == null)
- return;
- peer.replaceRange (str, start, end);
+ if (peer != null)
+ peer.replaceRange (str, start, end);
}
/**