Linux: Moved input event processing to LinuxKeyboard and LinuxMouse

This commit is contained in:
Elias Naur 2006-10-24 10:39:14 +00:00
parent 850f3c6b7f
commit a972dd272d
3 changed files with 41 additions and 25 deletions

View File

@ -638,16 +638,13 @@ final class LinuxDisplay implements DisplayImplementation {
while (LinuxEvent.getPending(getDisplay()) > 0) {
event_buffer.nextEvent(getDisplay());
long event_window = event_buffer.getWindow();
if (event_window != getWindow())
continue;
if (event_buffer.filterEvent(event_window))
if (event_window != getWindow() || event_buffer.filterEvent(event_window) ||
(mouse != null && mouse.filterEvent(grab, shouldWarpPointer(), event_buffer)) ||
(keyboard != null && keyboard.filterEvent(event_buffer)))
continue;
switch (event_buffer.getType()) {
case LinuxEvent.ClientMessage:
if (event_buffer.getClientMessageType() == warp_atom) {
if (mouse != null)
mouse.handleWarpEvent(event_buffer.getClientData(0), event_buffer.getClientData(1));
} else if ((event_buffer.getClientFormat() == 32) && (event_buffer.getClientData(0) == delete_atom))
if ((event_buffer.getClientFormat() == 32) && (event_buffer.getClientData(0) == delete_atom))
close_requested = true;
break;
case LinuxEvent.MapNotify:
@ -661,20 +658,6 @@ final class LinuxDisplay implements DisplayImplementation {
case LinuxEvent.Expose:
dirty = true;
break;
case LinuxEvent.ButtonPress: /* Fall through */
case LinuxEvent.ButtonRelease:
if (mouse != null)
mouse.handleButtonEvent(grab, event_buffer.getButtonTime(), event_buffer.getButtonType(), (byte)event_buffer.getButtonButton());
break;
case LinuxEvent.MotionNotify:
if (mouse != null)
mouse.handlePointerMotion(grab, shouldWarpPointer(), event_buffer.getButtonTime(), event_buffer.getButtonRoot(), event_buffer.getButtonXRoot(), event_buffer.getButtonYRoot(), event_buffer.getButtonX(), event_buffer.getButtonY());
break;
case LinuxEvent.KeyPress: /* Fall through */
case LinuxEvent.KeyRelease:
if (keyboard != null)
keyboard.handleKeyEvent(event_buffer.getKeyAddress(), event_buffer.getKeyTime(), event_buffer.getKeyType(), event_buffer.getKeyKeyCode(), event_buffer.getKeyState());
break;
default:
break;
}

View File

@ -296,10 +296,22 @@ final class LinuxKeyboard {
}
}
public void handleKeyEvent(long event_ptr, long millis, int event_type, int event_keycode, int event_state) {
private void handleKeyEvent(long event_ptr, long millis, int event_type, int event_keycode, int event_state) {
int keycode = getKeycode(event_ptr, event_state);
byte key_state = getKeyState(event_type);
key_down_buffer[keycode] = key_state;
translateEvent(event_ptr, event_type, keycode, key_state, millis*1000000);
}
public boolean filterEvent(LinuxEvent event) {
switch (event.getType()) {
case LinuxEvent.KeyPress: /* Fall through */
case LinuxEvent.KeyRelease:
handleKeyEvent(event.getKeyAddress(), event.getKeyTime(), event.getKeyType(), event.getKeyKeyCode(), event.getKeyState());
return true;
default:
break;
}
return false;
}
}

View File

@ -190,7 +190,7 @@ final class LinuxMouse {
}
private static native void nWarpCursor(long display, long window, int x, int y);
public void handlePointerMotion(boolean grab, boolean warp_pointer, long millis, long root_window, int x_root, int y_root, int x, int y) {
private void handlePointerMotion(boolean grab, boolean warp_pointer, long millis, long root_window, int x_root, int y_root, int x, int y) {
doHandlePointerMotion(grab, warp_pointer, root_window, x_root, y_root, x, y, millis*1000000);
}
@ -239,7 +239,7 @@ final class LinuxMouse {
}
}
public void handleButtonEvent(boolean grab, long millis, int type, byte button) {
private void handleButtonEvent(boolean grab, long millis, int type, byte button) {
long nanos = millis*1000000;
switch (type) {
case ButtonRelease:
@ -258,7 +258,28 @@ final class LinuxMouse {
last_y = transformY(y);
}
public void handleWarpEvent(int x, int y) {
private void handleWarpEvent(int x, int y) {
resetCursor(x, y);
}
public boolean filterEvent(boolean grab, boolean warp_pointer, LinuxEvent event) {
switch (event.getType()) {
case LinuxEvent.ClientMessage:
if (event.getClientMessageType() == warp_atom) {
handleWarpEvent(event.getClientData(0), event.getClientData(1));
return true;
}
break;
case LinuxEvent.ButtonPress: /* Fall through */
case LinuxEvent.ButtonRelease:
handleButtonEvent(grab, event.getButtonTime(), event.getButtonType(), (byte)event.getButtonButton());
return true;
case LinuxEvent.MotionNotify:
handlePointerMotion(grab, warp_pointer, event.getButtonTime(), event.getButtonRoot(), event.getButtonXRoot(), event.getButtonYRoot(), event.getButtonX(), event.getButtonY());
return true;
default:
break;
}
return false;
}
}