This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[gui][PATCH] post KEY_TYPED events
- From: Thomas Fitzsimmons <fitzsim at redhat dot com>
- To: java-patches at gcc dot gnu dot org
- Date: Mon, 17 May 2004 15:52:13 -0400
- Subject: [gui][PATCH] post KEY_TYPED events
Hi,
This patch adds support for posting KEY_TYPED events from
GtkComponentPeer.
I committed this on java-gui-branch.
Tom
2004-05-17 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkComponentPeer.java (postKeyEvent):
Post KEY_TYPED events.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
(generates_key_typed_event): Remove function.
Index: gnu/java/awt/peer/gtk/GtkComponentPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java,v
retrieving revision 1.16.2.7
diff -u -r1.16.2.7 GtkComponentPeer.java
--- gnu/java/awt/peer/gtk/GtkComponentPeer.java 7 May 2004 22:39:22 -0000 1.16.2.7
+++ gnu/java/awt/peer/gtk/GtkComponentPeer.java 17 May 2004 19:45:13 -0000
@@ -477,10 +477,28 @@
}
protected void postKeyEvent (int id, long when, int mods,
- int keyCode, char keyChar, int keyLocation)
+ int keyCode, char keyChar, int keyLocation)
{
- q.postEvent (new KeyEvent (awtComponent, id, when, mods,
- keyCode, keyChar, keyLocation));
+ KeyEvent keyEvent = new KeyEvent (awtComponent, id, when, mods,
+ keyCode, keyChar, keyLocation);
+
+ // Also post a KEY_TYPED event if keyEvent is a key press that
+ // doesn't represent an action or modifier key.
+ if (keyEvent.getID () == KeyEvent.KEY_PRESSED
+ && (!keyEvent.isActionKey ()
+ && keyCode != KeyEvent.VK_SHIFT
+ && keyCode != KeyEvent.VK_CONTROL
+ && keyCode != KeyEvent.VK_ALT))
+ {
+ synchronized (q)
+ {
+ q.postEvent (keyEvent);
+ q.postEvent (new KeyEvent (awtComponent, KeyEvent.KEY_TYPED, when, mods,
+ KeyEvent.VK_UNDEFINED, keyChar, keyLocation));
+ }
+ }
+ else
+ q.postEvent (keyEvent);
}
protected void postFocusEvent (int id, boolean temporary)
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c,v
retrieving revision 1.19.2.6
diff -u -r1.19.2.6 gnu_java_awt_peer_gtk_GtkEvents.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c 7 May 2004 22:39:22 -0000 1.19.2.6
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c 17 May 2004 19:45:13 -0000
@@ -806,33 +806,6 @@
}
}
-#if 0
-/* Checks if keyval triggers a KEY_TYPED event on the source widget.
- This function identifies special keyvals that don't trigger
- GtkIMContext "commit" signals, but that do trigger Java KEY_TYPED
- events. */
-static int
-generates_key_typed_event (GdkEvent *event, GtkWidget *source)
-{
- guint keyval;
-
- if (!GTK_IS_ENTRY (source)
- && !GTK_IS_TEXT_VIEW (source))
- return event->key.length ? 1 : 0;
-
- keyval = event->key.keyval;
-
- return (keyval == GDK_Escape
- || keyval == GDK_BackSpace
- || keyval == GDK_Delete
- || keyval == GDK_KP_Delete
- || keyval == GDK_Return
- || keyval == GDK_KP_Enter
- || (keyval == GDK_Tab
- && GTK_IS_TEXT_VIEW(source))) ? 1 : 0;
-}
-#endif
-
void
awt_event_handler (GdkEvent *event)
{