--- PApplet.java.orig 2007-10-12 19:42:04.000000000 -0400 +++ PApplet.java 2007-10-12 19:43:16.000000000 -0400 @@ -1465,13 +1465,11 @@ dmouseX = mouseX; dmouseY = mouseY; - // these are called *after* loop so that valid - // drawing commands can be run inside them. it can't + // this is called *after* loop so that valid + // drawing commands can be run inside it. it can't // be before, since a call to background() would wipe // out anything that had been drawn so far. - dequeueMouseEvents(); - - dequeueKeyEvents(); + dequeueInputEvents(); if (THREAD_DEBUG) println(Thread.currentThread().getName() + " 2b endDraw"); @@ -1760,27 +1758,32 @@ ////////////////////////////////////////////////////////////// - MouseEvent mouseEventQueue[] = new MouseEvent[10]; - int mouseEventCount; + InputEvent inputEventQueue[] = new InputEvent[10]; + int inputEventCount; - protected void enqueueMouseEvent(MouseEvent e) { - synchronized (mouseEventQueue) { - if (mouseEventCount == mouseEventQueue.length) { - MouseEvent temp[] = new MouseEvent[mouseEventCount << 1]; - System.arraycopy(mouseEventQueue, 0, temp, 0, mouseEventCount); - mouseEventQueue = temp; - } - mouseEventQueue[mouseEventCount++] = e; + protected void enqueueInputEvent(InputEvent e) { + synchronized (inputEventQueue) { + if (inputEventCount == inputEventQueue.length) { + InputEvent temp[] = new InputEvent[inputEventCount << 1]; + System.arraycopy(inputEventQueue, 0, temp, 0, inputEventCount); + inputEventQueue = temp; + } + inputEventQueue[inputEventCount++] = e; } } - protected void dequeueMouseEvents() { - synchronized (mouseEventQueue) { - for (int i = 0; i < mouseEventCount; i++) { - mouseEvent = mouseEventQueue[i]; - handleMouseEvent(mouseEvent); + protected void dequeueInputEvents() { + synchronized (inputEventQueue) { + for (int i = 0; i < inputEventCount; i++) { + if (inputEventQueue[i] instanceof MouseEvent) { + mouseEvent = (MouseEvent)inputEventQueue[i]; + handleMouseEvent(mouseEvent); + } else if (inputEventQueue[i] instanceof KeyEvent) { + keyEvent = (KeyEvent)inputEventQueue[i]; + handleKeyEvent(keyEvent); + } } - mouseEventCount = 0; + inputEventCount = 0; } } @@ -1873,7 +1876,7 @@ */ protected void checkMouseEvent(MouseEvent event) { if (looping) { - enqueueMouseEvent(event); + enqueueInputEvent(event); } else { handleMouseEvent(event); } @@ -1951,31 +1954,6 @@ ////////////////////////////////////////////////////////////// - KeyEvent keyEventQueue[] = new KeyEvent[10]; - int keyEventCount; - - protected void enqueueKeyEvent(KeyEvent e) { - synchronized (keyEventQueue) { - if (keyEventCount == keyEventQueue.length) { - KeyEvent temp[] = new KeyEvent[keyEventCount << 1]; - System.arraycopy(keyEventQueue, 0, temp, 0, keyEventCount); - keyEventQueue = temp; - } - keyEventQueue[keyEventCount++] = e; - } - } - - protected void dequeueKeyEvents() { - synchronized (keyEventQueue) { - for (int i = 0; i < keyEventCount; i++) { - keyEvent = keyEventQueue[i]; - handleKeyEvent(keyEvent); - } - keyEventCount = 0; - } - } - - protected void handleKeyEvent(KeyEvent event) { keyEvent = event; key = event.getKeyChar(); @@ -2015,7 +1993,7 @@ protected void checkKeyEvent(KeyEvent event) { if (looping) { - enqueueKeyEvent(event); + enqueueInputEvent(event); } else { handleKeyEvent(event); }