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


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

[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);
   }
 
   /**

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