Linux: Moved input event processing to LinuxKeyboard and LinuxMouse
This commit is contained in:
parent
850f3c6b7f
commit
a972dd272d
|
@ -638,16 +638,13 @@ final class LinuxDisplay implements DisplayImplementation {
|
||||||
while (LinuxEvent.getPending(getDisplay()) > 0) {
|
while (LinuxEvent.getPending(getDisplay()) > 0) {
|
||||||
event_buffer.nextEvent(getDisplay());
|
event_buffer.nextEvent(getDisplay());
|
||||||
long event_window = event_buffer.getWindow();
|
long event_window = event_buffer.getWindow();
|
||||||
if (event_window != getWindow())
|
if (event_window != getWindow() || event_buffer.filterEvent(event_window) ||
|
||||||
continue;
|
(mouse != null && mouse.filterEvent(grab, shouldWarpPointer(), event_buffer)) ||
|
||||||
if (event_buffer.filterEvent(event_window))
|
(keyboard != null && keyboard.filterEvent(event_buffer)))
|
||||||
continue;
|
continue;
|
||||||
switch (event_buffer.getType()) {
|
switch (event_buffer.getType()) {
|
||||||
case LinuxEvent.ClientMessage:
|
case LinuxEvent.ClientMessage:
|
||||||
if (event_buffer.getClientMessageType() == warp_atom) {
|
if ((event_buffer.getClientFormat() == 32) && (event_buffer.getClientData(0) == delete_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))
|
|
||||||
close_requested = true;
|
close_requested = true;
|
||||||
break;
|
break;
|
||||||
case LinuxEvent.MapNotify:
|
case LinuxEvent.MapNotify:
|
||||||
|
@ -661,20 +658,6 @@ final class LinuxDisplay implements DisplayImplementation {
|
||||||
case LinuxEvent.Expose:
|
case LinuxEvent.Expose:
|
||||||
dirty = true;
|
dirty = true;
|
||||||
break;
|
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:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
int keycode = getKeycode(event_ptr, event_state);
|
||||||
byte key_state = getKeyState(event_type);
|
byte key_state = getKeyState(event_type);
|
||||||
key_down_buffer[keycode] = key_state;
|
key_down_buffer[keycode] = key_state;
|
||||||
translateEvent(event_ptr, event_type, keycode, key_state, millis*1000000);
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -190,7 +190,7 @@ final class LinuxMouse {
|
||||||
}
|
}
|
||||||
private static native void nWarpCursor(long display, long window, int x, int y);
|
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);
|
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;
|
long nanos = millis*1000000;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case ButtonRelease:
|
case ButtonRelease:
|
||||||
|
@ -258,7 +258,28 @@ final class LinuxMouse {
|
||||||
last_y = transformY(y);
|
last_y = transformY(y);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handleWarpEvent(int x, int y) {
|
private void handleWarpEvent(int x, int y) {
|
||||||
resetCursor(x, 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue