aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Speth <[email protected]>2012-10-25 19:53:11 +1300
committerMichael Speth <[email protected]>2012-10-25 19:53:11 +1300
commitee150338c2719e42a9eedb8f8f00d4d3d747a65c (patch)
tree2e2c13b3def4cf1ae11968671952cf80e194b95e
parentf9c8ac4bce9998b58d405af70d93ae028891497d (diff)
Applied grab.patch
-rw-r--r--coreAPI/src/java/net/java/games/input/Keyboard.java4
-rw-r--r--coreAPI/src/java/net/java/games/input/Mouse.java4
-rw-r--r--plugins/linux/src/java/net/java/games/input/LinuxEnvironmentPlugin.java37
-rw-r--r--plugins/linux/src/java/net/java/games/input/LinuxEventDevice.java61
-rw-r--r--plugins/linux/src/java/net/java/games/input/LinuxKeyboard.java4
-rw-r--r--plugins/linux/src/java/net/java/games/input/LinuxMouse.java4
-rw-r--r--plugins/linux/src/native/net_java_games_input_LinuxEventDevice.c29
7 files changed, 98 insertions, 45 deletions
diff --git a/coreAPI/src/java/net/java/games/input/Keyboard.java b/coreAPI/src/java/net/java/games/input/Keyboard.java
index e168869..36dd634 100644
--- a/coreAPI/src/java/net/java/games/input/Keyboard.java
+++ b/coreAPI/src/java/net/java/games/input/Keyboard.java
@@ -66,4 +66,8 @@ public abstract class Keyboard extends AbstractController {
return false;
return key.getPollData() != 0;
}
+
+ public boolean grab(){ return false; }
+
+ public boolean ungrab(){ return false;}
} // class Keyboard
diff --git a/coreAPI/src/java/net/java/games/input/Mouse.java b/coreAPI/src/java/net/java/games/input/Mouse.java
index 74301ff..5fe9cc7 100644
--- a/coreAPI/src/java/net/java/games/input/Mouse.java
+++ b/coreAPI/src/java/net/java/games/input/Mouse.java
@@ -183,4 +183,8 @@ public abstract class Mouse extends AbstractController {
return getComponent(Component.Identifier.Button._4);
}
+ public boolean grab(){ return false; }
+
+ public boolean ungrab(){ return false;}
+
} // class Mouse
diff --git a/plugins/linux/src/java/net/java/games/input/LinuxEnvironmentPlugin.java b/plugins/linux/src/java/net/java/games/input/LinuxEnvironmentPlugin.java
index fc829c9..1a1a85c 100644
--- a/plugins/linux/src/java/net/java/games/input/LinuxEnvironmentPlugin.java
+++ b/plugins/linux/src/java/net/java/games/input/LinuxEnvironmentPlugin.java
@@ -480,6 +480,43 @@ public final class LinuxEnvironmentPlugin extends ControllerEnvironment implemen
}
}
+ /**
+ * Attempt to find devices using uinput used for forwarding events.
+ * TODO try to work this out!
+ */
+ /*
+ private final void enumerateUInputControllers(List controllers) {
+ final File dev = new File("/dev/uinput");
+ File[] event_device_files = listFilesPrivileged(dev, new FilenameFilter() {
+ public final boolean accept(File dir, String name) {
+ return name.startsWith("event");
+ }
+ });
+ if (event_device_files == null)
+ return;
+ for (int i = 0; i < event_device_files.length; i++) {
+ File event_file = event_device_files[i];
+ try {
+ String path = getAbsolutePathPrivileged(event_file);
+ LinuxEventDevice device = new LinuxEventDevice(path);
+ try {
+ Controller controller = createControllerFromDevice(device);
+ if (controller != null) {
+ controllers.add(controller);
+ devices.add(device);
+ } else
+ device.close();
+ } catch (IOException e) {
+ logln("Failed to create Controller: " + e.getMessage());
+ device.close();
+ }
+ } catch (IOException e) {
+ logln("Failed to open device (" + event_file + "): " + e.getMessage());
+ }
+ }
+ }
+ */
+
private final class ShutdownHook extends Thread {
public final void run() {
for (int i = 0; i < devices.size(); i++) {
diff --git a/plugins/linux/src/java/net/java/games/input/LinuxEventDevice.java b/plugins/linux/src/java/net/java/games/input/LinuxEventDevice.java
index a28c4c7..1517147 100644
--- a/plugins/linux/src/java/net/java/games/input/LinuxEventDevice.java
+++ b/plugins/linux/src/java/net/java/games/input/LinuxEventDevice.java
@@ -94,28 +94,6 @@ final class LinuxEventDevice implements LinuxDevice {
}
private final Controller.Type guessType() throws IOException {
- Controller.Type type_from_usages = guessTypeFromUsages();
- if (type_from_usages == Controller.Type.UNKNOWN)
- return guessTypeFromComponents();
- else
- return type_from_usages;
- }
-
- private final Controller.Type guessTypeFromUsages() throws IOException {
- byte[] usage_bits = getDeviceUsageBits();
- if (isBitSet(usage_bits, NativeDefinitions.USAGE_MOUSE))
- return Controller.Type.MOUSE;
- else if (isBitSet(usage_bits, NativeDefinitions.USAGE_KEYBOARD))
- return Controller.Type.KEYBOARD;
- else if (isBitSet(usage_bits, NativeDefinitions.USAGE_GAMEPAD))
- return Controller.Type.GAMEPAD;
- else if (isBitSet(usage_bits, NativeDefinitions.USAGE_JOYSTICK))
- return Controller.Type.STICK;
- else
- return Controller.Type.UNKNOWN;
- }
-
- private final Controller.Type guessTypeFromComponents() throws IOException {
List components = getComponents();
if (components.size() == 0)
return Controller.Type.UNKNOWN;
@@ -342,15 +320,6 @@ final class LinuxEventDevice implements LinuxDevice {
}
private final static native void nGetBits(long fd, int ev_type, byte[] evtype_bits) throws IOException;
- private final byte[] getDeviceUsageBits() throws IOException {
- byte[] bits = new byte[NativeDefinitions.USAGE_MAX/8 + 1];
- if (getVersion() >= 0x010001) {
- nGetDeviceUsageBits(fd, bits);
- }
- return bits;
- }
- private final static native void nGetDeviceUsageBits(long fd, byte[] type_bits) throws IOException;
-
public final synchronized void pollKeyStates() throws IOException {
nGetKeyStates(fd, key_states);
}
@@ -391,6 +360,36 @@ final class LinuxEventDevice implements LinuxDevice {
throw new IOException("Device is closed");
}
+ private final static native int nGrab(long fd, int grab) throws IOException;
+
+ /**
+ * Grabs the device so that no other programs can read from the device.
+ */
+ public synchronized final boolean grab(){
+ try{
+ if(nGrab(fd,1) == 0){
+ return false;
+ }
+ }catch(IOException e){
+ return false;
+ }
+ return true;
+ }
+ /**
+ * Release the event so other programs can get events.
+ */
+ public synchronized final boolean ungrab(){
+ try{
+ if(nGrab(fd,0) == 0){
+ return false;
+ }
+ }catch(IOException e){
+ return false;
+ }
+ return true;
+ }
+
+
protected void finalize() throws IOException {
close();
}
diff --git a/plugins/linux/src/java/net/java/games/input/LinuxKeyboard.java b/plugins/linux/src/java/net/java/games/input/LinuxKeyboard.java
index 96b2d08..3795541 100644
--- a/plugins/linux/src/java/net/java/games/input/LinuxKeyboard.java
+++ b/plugins/linux/src/java/net/java/games/input/LinuxKeyboard.java
@@ -65,4 +65,8 @@ final class LinuxKeyboard extends Keyboard {
public final void pollDevice() throws IOException {
device.pollKeyStates();
}
+
+ public boolean grab(){ return device.grab(); }
+
+ public boolean ungrab(){ return device.ungrab();}
}
diff --git a/plugins/linux/src/java/net/java/games/input/LinuxMouse.java b/plugins/linux/src/java/net/java/games/input/LinuxMouse.java
index 17b5895..4c3d208 100644
--- a/plugins/linux/src/java/net/java/games/input/LinuxMouse.java
+++ b/plugins/linux/src/java/net/java/games/input/LinuxMouse.java
@@ -65,4 +65,8 @@ final class LinuxMouse extends Mouse {
protected final boolean getNextDeviceEvent(Event event) throws IOException {
return LinuxControllers.getNextDeviceEvent(event, device);
}
+
+ public boolean grab(){ return device.grab(); }
+
+ public boolean ungrab(){ return device.ungrab();}
}
diff --git a/plugins/linux/src/native/net_java_games_input_LinuxEventDevice.c b/plugins/linux/src/native/net_java_games_input_LinuxEventDevice.c
index 90eff09..044c3dd 100644
--- a/plugins/linux/src/native/net_java_games_input_LinuxEventDevice.c
+++ b/plugins/linux/src/native/net_java_games_input_LinuxEventDevice.c
@@ -112,20 +112,6 @@ JNIEXPORT jint JNICALL Java_net_java_games_input_LinuxEventDevice_nGetNumEffects
return num_effects;
}
-JNIEXPORT void JNICALL Java_net_java_games_input_LinuxEventDevice_nGetDeviceUsageBits(JNIEnv *env, jclass unused, jlong fd_address, jbyteArray usages_array) {
-#if EV_VERSION >= 0x010001
- int fd = (int)fd_address;
- jsize len = (*env)->GetArrayLength(env, usages_array);
- jbyte *usages = (*env)->GetByteArrayElements(env, usages_array, NULL);
- if (usages == NULL)
- return;
- int res = ioctl(fd, EVIOCGUSAGE(len), usages);
- (*env)->ReleaseByteArrayElements(env, usages_array, usages, 0);
- if (res == -1)
- throwIOException(env, "Failed to get device usages (%d)\n", errno);
-#endif
-}
-
JNIEXPORT void JNICALL Java_net_java_games_input_LinuxEventDevice_nGetBits(JNIEnv *env, jclass unused, jlong fd_address, jint evtype, jbyteArray bits_array) {
int fd = (int)fd_address;
jsize len = (*env)->GetArrayLength(env, bits_array);
@@ -255,3 +241,18 @@ JNIEXPORT void JNICALL Java_net_java_games_input_LinuxEventDevice_nEraseEffect(J
if (ioctl(fd, EVIOCRMFF, &ff_id_int) == -1)
throwIOException(env, "Failed to erase effect (%d)\n", errno);
}
+
+JNIEXPORT jint JNICALL Java_net_java_games_input_LinuxEventDevice_nGrab(JNIEnv *env, jclass unused, jlong fd_address, jint do_grab) {
+ int fd = (int)fd_address;
+ int grab = (int)do_grab;
+<<<<<<< HEAD
+ int version;
+ if (ioctl(fd,EVIOCGRAB,do_grab) == -1){
+=======
+ if (ioctl(fd,EVIOCGRAB,grab) == -1){
+>>>>>>> 835f3b36964d5a757ab4baea8240f1d56a97e375
+ throwIOException(env, "Failed to grab device (%d)\n", errno);
+ return -1;
+ }
+ return 1;
+}