OK, here are some patches; the patches are merged in a single diff file
based on the kaffe 1.0.5 source distribution.

Two patches regards the TextComponent and TextField class, and
fix the textListener, that wasn't called; they apply to the relative
Java classes.

The third package regard the return status for a Process class,
but affect a C file; actually, the waitpid function do not
return the exit status of a process, but a integer coding the 
exit status and some other information; this integer should be decoded
using a couple of macros in order to get the real exit status;
the fix should work on all the POSIX compliant system, but i tryied
it only on Linux (Mandrake).

Hope this is usefull :->

Maurizio


-- snip ----------------------------------------------------------------------
diff -ru kaffe-1.0.5.org/kaffe/kaffevm/systems/unix-jthreads/jthread.c 
kaffe-1.0.5/kaffe/kaffevm/systems/unix-jthreads/jthread.c
--- kaffe-1.0.5.org/kaffe/kaffevm/systems/unix-jthreads/jthread.c       Mon Oct 18 
07:24:01 1999
+++ kaffe-1.0.5/kaffe/kaffevm/systems/unix-jthreads/jthread.c   Tue Mar 14 16:27:02 
+2000
@@ -2362,11 +2362,22 @@
 
        intsDisable();
        for (;;) {
+               int ret;
                wouldlosewakeup = 1;
-               npid = waitpid(wpid, status, options|WNOHANG);
+               npid = waitpid(wpid, &ret, options|WNOHANG);
                /* XXX what return codes should cause us to return an error? */
                if (npid > 0) {
                        *outpid = npid;
+
+                       // Handle exit status correctly
+
+                       if (WIFEXITED(ret))
+                         *status = WEXITSTATUS(ret);
+                       else if (WIFSIGNALED(ret))
+                         *status=128+WTERMSIG(ret);
+                       else
+                         *status = (-1); // should never happens a the end.
+
                        break;
                }
                BLOCKED_ON_EXTERNAL(currentJThread);
diff -ru kaffe-1.0.5.org/libraries/javalib/java/awt/widgets/TextComponent.java 
kaffe-1.0.5/libraries/javalib/java/awt/widgets/TextComponent.java
--- kaffe-1.0.5.org/libraries/javalib/java/awt/widgets/TextComponent.java       Mon 
Oct 18 07:24:17 1999
+++ kaffe-1.0.5/libraries/javalib/java/awt/widgets/TextComponent.java   Tue Mar 14 
+16:36:05 2000
@@ -46,6 +46,7 @@
 }
 
 public void addTextListener( TextListener l) {
+       textListener = AWTEventMulticaster.add( textListener, l);
        eventMask |= AWTEvent.TEXT_EVENT_MASK;
 }
 
diff -ru kaffe-1.0.5.org/libraries/javalib/java/awt/widgets/TextField.java 
kaffe-1.0.5/libraries/javalib/java/awt/widgets/TextField.java
--- kaffe-1.0.5.org/libraries/javalib/java/awt/widgets/TextField.java   Mon Oct 18 
07:24:17 1999
+++ kaffe-1.0.5/libraries/javalib/java/awt/widgets/TextField.java       Tue Mar 14 
+16:36:14 2000
@@ -206,6 +206,7 @@
 }
 
 public void keyPressed( KeyEvent e) {
+        boolean changed = false;
        int mods = e.getModifiers();
        boolean shift = e.isShiftDown();
        int code = e.getKeyCode();
@@ -222,6 +223,7 @@
        case KeyEvent.VK_ESCAPE:
                if (isEditable) {
                        setText( "");
+                       changed = true;
                }
                break;
        case KeyEvent.VK_HOME:
@@ -260,10 +262,12 @@
                if (isEditable) {
                        if ( selStart != selEnd) {
                                deleteSelection();
+                               changed = true;
                        }
                        else if ( tCursor.index > 0) {
                                textBuf.remove( tCursor.index-1, 1);
                                shiftTextCursor( -1, true);
+                               changed = true;
                        }
                }
                break;
@@ -271,10 +275,12 @@
                if (isEditable) {
                        if ( selStart != selEnd) {
                                deleteSelection();
+                               changed = true;
                        }
                        else if ( tCursor.index < textBuf.len) {
                                textBuf.remove( tCursor.index, 1);
                                repaintTrailing();
+                               changed = true;
                        }
                }
                break;
@@ -282,6 +288,11 @@
                return;
        }
        
+       if (changed && ((textListener != null) || (eventMask & 
+AWTEvent.TEXT_EVENT_MASK) != 0))
+       {
+         Toolkit.eventQueue.postEvent( TextEvt.getEvent( this, 
+TextEvt.TEXT_VALUE_CHANGED));           
+       }
+
        e.consume();
 }
 

-- snip ----------------------------------------------------------------------


-- 
Maurizio De Cecco
MandrakeSoft            http://www.mandrakesoft.com/

Reply via email to