Commit b6fa901b by Thomas Fitzsimmons Committed by Thomas Fitzsimmons

* gnu/java/awt/peer/gtk/GtkTextComponentPeer.java

	(setCaretPosition, setEditable): Rely entirely on native
	implementation.
	(getArgs): Remove.
	(postTextEvent): New method.
	(handleEvent): New method.
	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java (handleEvent): New
	method.
	* java/awt/event/ActionEvent.java (paramString): Fix formatting.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
	(keysym_to_awt_keycode): Fix range checks.
	(generates_key_typed_event): New function.
	(awt_event_handler): Post AWT_KEY_RELEASED events to event
	queue.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
	(gtkInit): Store TextComponent's postTextEvent method ID.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
	(setText): Post TEXT_VALUE_CHANGED event to event queue.

From-SVN: r69054
parent 0fcd5dda
2003-07-07 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkTextComponentPeer.java
(setCaretPosition, setEditable): Rely entirely on native
implementation.
(getArgs): Remove.
(postTextEvent): New method.
(handleEvent): New method.
* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java (handleEvent): New
method.
* java/awt/event/ActionEvent.java (paramString): Fix formatting.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
(keysym_to_awt_keycode): Fix range checks.
(generates_key_typed_event): New function.
(awt_event_handler): Post AWT_KEY_RELEASED events to event
queue.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
(gtkInit): Store TextComponent's postTextEvent method ID.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
(setText): Post TEXT_VALUE_CHANGED event to event queue.
2003-07-07 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE> 2003-07-07 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
* configure.in: Check for usleep declaration. * configure.in: Check for usleep declaration.
......
...@@ -39,6 +39,7 @@ exception statement from your version. */ ...@@ -39,6 +39,7 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk; package gnu.java.awt.peer.gtk;
import java.awt.peer.*; import java.awt.peer.*;
import java.awt.*; import java.awt.*;
import java.awt.event.*;
public class GtkTextComponentPeer extends GtkComponentPeer public class GtkTextComponentPeer extends GtkComponentPeer
implements TextComponentPeer implements TextComponentPeer
...@@ -51,32 +52,14 @@ public class GtkTextComponentPeer extends GtkComponentPeer ...@@ -51,32 +52,14 @@ public class GtkTextComponentPeer extends GtkComponentPeer
} }
public native int getCaretPosition (); public native int getCaretPosition ();
public void setCaretPosition (int pos) public native void setCaretPosition (int pos);
{
set ("text_position", pos);
}
public native int getSelectionStart (); public native int getSelectionStart ();
public native int getSelectionEnd (); public native int getSelectionEnd ();
public native String getText (); public native String getText ();
public native void select (int start, int end); public native void select (int start, int end);
public native void setEditable (boolean state);
public void setEditable (boolean state)
{
set ("editable", state);
}
public native void setText (String text); public native void setText (String text);
public void getArgs (Component component, GtkArgList args)
{
super.getArgs (component, args);
TextComponent tc = (TextComponent) component;
args.add ("text_position", tc.getCaretPosition ());
args.add ("editable", tc.isEditable ());
}
public int getIndexAtPoint(int x, int y) public int getIndexAtPoint(int x, int y)
{ {
return 0; // FIXME return 0; // FIXME
...@@ -91,4 +74,21 @@ public class GtkTextComponentPeer extends GtkComponentPeer ...@@ -91,4 +74,21 @@ public class GtkTextComponentPeer extends GtkComponentPeer
{ {
return filter; // FIXME return filter; // FIXME
} }
protected void postTextEvent ()
{
q.postEvent (new TextEvent (awtComponent, TextEvent.TEXT_VALUE_CHANGED));
}
public void handleEvent (AWTEvent e)
{
if (e.getID () == KeyEvent.KEY_TYPED
&& ((TextComponent)e.getSource()).isEditable())
{
KeyEvent ke = (KeyEvent)e;
if (!ke.isConsumed())
postTextEvent ();
}
}
} }
...@@ -37,6 +37,7 @@ exception statement from your version. */ ...@@ -37,6 +37,7 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk; package gnu.java.awt.peer.gtk;
import java.awt.event.KeyEvent;
import java.awt.peer.*; import java.awt.peer.*;
import java.awt.*; import java.awt.*;
...@@ -102,4 +103,18 @@ public class GtkTextFieldPeer extends GtkTextComponentPeer ...@@ -102,4 +103,18 @@ public class GtkTextFieldPeer extends GtkTextComponentPeer
{ {
gtkSetFont(((GtkFontPeer)f.getPeer()).getXLFD(), f.getSize()); gtkSetFont(((GtkFontPeer)f.getPeer()).getXLFD(), f.getSize());
} }
public void handleEvent (AWTEvent e)
{
if (e.getID () == KeyEvent.KEY_PRESSED)
{
KeyEvent ke = (KeyEvent)e;
if (!ke.isConsumed()
&& ke.getKeyCode() == KeyEvent.VK_ENTER)
postActionEvent (getText(), ke.getModifiers ());
}
super.handleEvent (e);
}
} }
...@@ -205,7 +205,7 @@ public class ActionEvent extends AWTEvent ...@@ -205,7 +205,7 @@ public class ActionEvent extends AWTEvent
StringBuffer s = new StringBuffer(id == ACTION_PERFORMED StringBuffer s = new StringBuffer(id == ACTION_PERFORMED
? "ACTION_PERFORMED,cmd=" ? "ACTION_PERFORMED,cmd="
: "unknown type,cmd="); : "unknown type,cmd=");
s.append(actionCommand).append(",when=").append(when).append("modifiers"); s.append(actionCommand).append(",when=").append(when).append(",modifiers");
int len = s.length(); int len = s.length();
s.setLength(len + 1); s.setLength(len + 1);
if ((modifiers & META_MASK) != 0) if ((modifiers & META_MASK) != 0)
......
...@@ -90,10 +90,10 @@ keysym_to_awt_keycode (guint keyval) ...@@ -90,10 +90,10 @@ keysym_to_awt_keycode (guint keyval)
vk = gdk_keyval_to_upper (keyval); vk = gdk_keyval_to_upper (keyval);
if (vk <= 0x41 && vk <= 0x5A) /* VK_A through VK_Z */ if (vk >= 0x41 && vk <= 0x5A) /* VK_A through VK_Z */
return vk; return vk;
if (vk <= 0x30 && vk <= 39) /* VK_0 through VK_9 */ if (vk >= 0x30 && vk <= 0x39) /* VK_0 through VK_9 */
return vk; return vk;
switch (vk) switch (vk)
...@@ -232,6 +232,24 @@ keysym_to_awt_keycode (guint keyval) ...@@ -232,6 +232,24 @@ keysym_to_awt_keycode (guint keyval)
} }
} }
static int
generates_key_typed_event (guint keyval)
{
guint vk;
vk = gdk_keyval_to_upper (keyval);
if ((vk >= 0x20 && vk <= 0x7e) /* Most printable keysyms on a
standard US keyboard. */
|| (vk >= 0xFF9F && vk <= 0xFFB9) /* Numeric Keypad keysyms. */
|| vk == GDK_BackSpace
|| vk == GDK_Delete
|| vk == GDK_Return)
return 1;
else
return 0;
}
void void
awt_event_handler (GdkEvent *event) awt_event_handler (GdkEvent *event)
{ {
...@@ -275,6 +293,7 @@ awt_event_handler (GdkEvent *event) ...@@ -275,6 +293,7 @@ awt_event_handler (GdkEvent *event)
|| event->type == GDK_CONFIGURE || event->type == GDK_CONFIGURE
|| event->type == GDK_EXPOSE || event->type == GDK_EXPOSE
|| event->type == GDK_KEY_PRESS || event->type == GDK_KEY_PRESS
|| event->type == GDK_KEY_RELEASE
|| event->type == GDK_FOCUS_CHANGE || event->type == GDK_FOCUS_CHANGE
|| event->type == GDK_MOTION_NOTIFY) || event->type == GDK_MOTION_NOTIFY)
&& gdk_property_get (event->any.window, && gdk_property_get (event->any.window,
...@@ -468,29 +487,70 @@ awt_event_handler (GdkEvent *event) ...@@ -468,29 +487,70 @@ awt_event_handler (GdkEvent *event)
NULL, NULL,
NULL, NULL,
(guchar **)&obj_ptr); (guchar **)&obj_ptr);
/* if (grab && GTK_WIDGET_HAS_DEFAULT (widget) ) */ /* if (grab && GTK_WIDGET_HAS_DEFAULT (widget) ) */
/* { */ /* { */
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr,
postKeyEventID, postKeyEventID,
(jint) AWT_KEY_PRESSED, (jint) AWT_KEY_PRESSED,
(jlong) event->key.time, (jlong) event->key.time,
state_to_awt_mods (event->key.state), state_to_awt_mods (event->key.state),
keysym_to_awt_keycode (event->key.keyval), keysym_to_awt_keycode (event->key.keyval),
(jchar) (event->key.length) ? (jchar) (event->key.length) ?
event->key.string[0] : event->key.string[0] :
AWT_KEY_CHAR_UNDEFINED); AWT_KEY_CHAR_UNDEFINED);
if (event->key.length)
if (event->key.length
&& generates_key_typed_event(event->key.keyval))
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr,
postKeyEventID, postKeyEventID,
(jint) AWT_KEY_TYPED, (jint) AWT_KEY_TYPED,
(jlong) event->key.time, (jlong) event->key.time,
state_to_awt_mods (event->key.state), state_to_awt_mods (event->key.state),
VK_UNDEFINED, VK_UNDEFINED,
(jchar) event->key.string[0]); (jchar) event->key.string[0]);
} }
} }
break; break;
case GDK_KEY_RELEASE:
{
GtkWidget *widget;
GtkWindow *window;
gdk_window_get_user_data (event->any.window, (void **) &widget);
window = GTK_WINDOW (gtk_widget_get_ancestor (widget,
GTK_TYPE_WINDOW));
if (window
&& GTK_WIDGET_IS_SENSITIVE (window)
&& window->focus_widget
&& GTK_WIDGET_IS_SENSITIVE (window->focus_widget)
&& window->focus_widget->window)
{
gtk_widget_activate (window->focus_widget);
gdk_property_get (window->focus_widget->window,
gdk_atom_intern ("_GNU_GTKAWT_ADDR", FALSE),
gdk_atom_intern ("CARDINAL", FALSE),
0,
sizeof (jobject),
FALSE,
NULL,
NULL,
NULL,
(guchar **)&obj_ptr);
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr,
postKeyEventID,
(jint) AWT_KEY_RELEASED,
(jlong) event->key.time,
state_to_awt_mods (event->key.state),
keysym_to_awt_keycode (event->key.keyval),
(jchar) (event->key.length) ?
event->key.string[0] :
AWT_KEY_CHAR_UNDEFINED);
}
}
break;
case GDK_FOCUS_CHANGE: case GDK_FOCUS_CHANGE:
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, (*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr,
postFocusEventID, postFocusEventID,
......
...@@ -54,6 +54,7 @@ jmethodID postFocusEventID; ...@@ -54,6 +54,7 @@ jmethodID postFocusEventID;
jmethodID postAdjustmentEventID; jmethodID postAdjustmentEventID;
jmethodID postItemEventID; jmethodID postItemEventID;
jmethodID postListItemEventID; jmethodID postListItemEventID;
jmethodID postTextEventID;
JNIEnv *gdk_env; JNIEnv *gdk_env;
#ifdef PORTABLE_NATIVE_SYNC #ifdef PORTABLE_NATIVE_SYNC
...@@ -72,7 +73,8 @@ Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit (JNIEnv *env, jclass clazz) ...@@ -72,7 +73,8 @@ Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit (JNIEnv *env, jclass clazz)
char **argv; char **argv;
char *homedir, *rcpath = NULL; char *homedir, *rcpath = NULL;
/* jclass gtkgenericpeer; */ /* jclass gtkgenericpeer; */
jclass gtkcomponentpeer, gtkwindowpeer, gtkscrollbarpeer, gtklistpeer, gtkmenuitempeer; jclass gtkcomponentpeer, gtkwindowpeer, gtkscrollbarpeer, gtklistpeer,
gtkmenuitempeer, gtktextcomponentpeer;
NSA_INIT (env, clazz); NSA_INIT (env, clazz);
...@@ -133,6 +135,7 @@ Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit (JNIEnv *env, jclass clazz) ...@@ -133,6 +135,7 @@ Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit (JNIEnv *env, jclass clazz)
"gnu/java/awt/peer/gtk/GtkScrollbarPeer"); "gnu/java/awt/peer/gtk/GtkScrollbarPeer");
gtklistpeer = (*env)->FindClass (env, "gnu/java/awt/peer/gtk/GtkListPeer"); gtklistpeer = (*env)->FindClass (env, "gnu/java/awt/peer/gtk/GtkListPeer");
gtkmenuitempeer = (*env)->FindClass (env, "gnu/java/awt/peer/gtk/GtkMenuItemPeer"); gtkmenuitempeer = (*env)->FindClass (env, "gnu/java/awt/peer/gtk/GtkMenuItemPeer");
gtktextcomponentpeer = (*env)->FindClass (env, "gnu/java/awt/peer/gtk/GtkTextComponentPeer");
/* gdkColor = (*env)->FindClass (env, */ /* gdkColor = (*env)->FindClass (env, */
/* "gnu/java/awt/peer/gtk/GdkColor"); */ /* "gnu/java/awt/peer/gtk/GdkColor"); */
/* gdkColorID = (*env)->GetMethodID (env, gdkColor, "<init>", "(III)V"); */ /* gdkColorID = (*env)->GetMethodID (env, gdkColor, "<init>", "(III)V"); */
...@@ -162,6 +165,9 @@ Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit (JNIEnv *env, jclass clazz) ...@@ -162,6 +165,9 @@ Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit (JNIEnv *env, jclass clazz)
postListItemEventID = (*env)->GetMethodID (env, gtklistpeer, postListItemEventID = (*env)->GetMethodID (env, gtklistpeer,
"postItemEvent", "postItemEvent",
"(II)V"); "(II)V");
postTextEventID = (*env)->GetMethodID (env, gtktextcomponentpeer,
"postTextEvent",
"()V");
} }
/* /*
......
...@@ -361,6 +361,7 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_setText ...@@ -361,6 +361,7 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_setText
const char *str; const char *str;
GtkWidget *text = NULL; // type of GtkTextView (TextArea) GtkWidget *text = NULL; // type of GtkTextView (TextArea)
GtkTextBuffer *buf; GtkTextBuffer *buf;
jobject *obj_ptr;
ptr = NSA_GET_PTR (env, obj); ptr = NSA_GET_PTR (env, obj);
str = (*env)->GetStringUTFChars (env, contents, NULL); str = (*env)->GetStringUTFChars (env, contents, NULL);
...@@ -370,6 +371,18 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_setText ...@@ -370,6 +371,18 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_setText
if (GTK_IS_EDITABLE (ptr)) if (GTK_IS_EDITABLE (ptr))
{ {
gtk_entry_set_text (GTK_ENTRY (ptr), str); gtk_entry_set_text (GTK_ENTRY (ptr), str);
if (gdk_property_get (GTK_WIDGET(ptr)->window,
gdk_atom_intern ("_GNU_GTKAWT_ADDR", FALSE),
gdk_atom_intern ("CARDINAL", FALSE),
0,
sizeof (jobject),
FALSE,
NULL,
NULL,
NULL,
(guchar **)&obj_ptr))
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postTextEventID);
} }
else else
{ {
......
...@@ -266,6 +266,7 @@ extern jmethodID postFocusEventID; ...@@ -266,6 +266,7 @@ extern jmethodID postFocusEventID;
extern jmethodID postAdjustmentEventID; extern jmethodID postAdjustmentEventID;
extern jmethodID postItemEventID; extern jmethodID postItemEventID;
extern jmethodID postListItemEventID; extern jmethodID postListItemEventID;
extern jmethodID postTextEventID;
extern jmethodID syncAttrsID; extern jmethodID syncAttrsID;
extern jclass gdkColor; extern jclass gdkColor;
extern jmethodID gdkColorID; extern jmethodID gdkColorID;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment