Input fixes

This commit is contained in:
Elias Naur 2002-11-21 15:05:51 +00:00
parent d7e9a66338
commit cac92f22c4
2 changed files with 21 additions and 16 deletions

View File

@ -47,12 +47,12 @@
#define KEYBOARD_BUFFER_SIZE 50
#define KEYBOARD_SIZE 256
short readBuffer[KEYBOARD_BUFFER_SIZE];
unsigned char readBuffer[KEYBOARD_BUFFER_SIZE * 2];
jfieldID fid_readBuffer;
jfieldID fid_readBufferAddress;
unsigned char key_buf[KEYBOARD_SIZE];
int keyboard_grabbed;
bool keyboard_grabbed;
extern Display *disp;
extern Window win;
@ -82,12 +82,12 @@ JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_initIDs
int grabKeyboard(void) {
int result = XGrabKeyboard(disp, win, False, GrabModeAsync, GrabModeAsync, CurrentTime);
if (result == GrabSuccess)
keyboard_grabbed = 1;
keyboard_grabbed = true;
return result;
}
void ungrabKeyboard(void) {
keyboard_grabbed = 0;
keyboard_grabbed = false;
XUngrabKeyboard(disp, CurrentTime);
}
@ -134,27 +134,32 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_input_Keyboard_nCreate
JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nDestroy
(JNIEnv * env, jclass clazz)
{
ungrabKeyboard();
if (keyboard_grabbed)
ungrabKeyboard();
}
int checkKeyEvents(unsigned char *result_buf) {
XEvent event;
int count = 0;
int buf_count = 0;
int state;
updateKeyboardGrab();
while (XCheckMaskEvent(disp, KeyPressMask | KeyReleaseMask, &event)) {
unsigned char keycode = (unsigned char)((event.xkey.keycode - 8) & 0xff);
if (result_buf != NULL) {
result_buf[buf_count++] = keycode;
result_buf[buf_count++] = 1;
}
count++;
unsigned char keycode = (unsigned char)((event.xkey.keycode - 8) & 0xff);
if (event.type == KeyPress) {
key_buf[keycode] = 1;
state = 1;
} else if (event.type == KeyRelease) {
key_buf[keycode] = 0;
state = 0;
} else
assert(0);
key_buf[keycode] = state;
if (result_buf != NULL) {
result_buf[buf_count++] = keycode;
result_buf[buf_count++] = state;
if (buf_count >= KEYBOARD_BUFFER_SIZE * 2)
break;
}
}
return count;
}
@ -190,7 +195,7 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_input_Keyboard_nRead
JNIEXPORT jint JNICALL Java_org_lwjgl_input_Keyboard_nEnableBuffer
(JNIEnv * env, jclass clazz)
{
jobject newBuffer = env->NewDirectByteBuffer(&readBuffer, KEYBOARD_BUFFER_SIZE);
jobject newBuffer = env->NewDirectByteBuffer(&readBuffer, KEYBOARD_BUFFER_SIZE * 2);
env->SetStaticObjectField(clazz, fid_readBuffer, newBuffer);
env->SetStaticIntField(clazz, fid_readBufferAddress, (jint) (&readBuffer));
return KEYBOARD_BUFFER_SIZE;

View File

@ -54,7 +54,7 @@ extern Window win;
extern int screen;
extern int current_fullscreen;
int pointer_grabbed;
bool pointer_grabbed;
jfieldID fid_button;
jfieldID fid_dx;
@ -132,12 +132,12 @@ int grabPointer(void) {
} else
result = XGrabPointer(disp, win, False, mask, GrabModeAsync, GrabModeAsync, None, blank_cursor, CurrentTime);
if (result == GrabSuccess)
pointer_grabbed = 1;
pointer_grabbed = true;
return result;
}
void ungrabPointer(void) {
pointer_grabbed = 0;
pointer_grabbed = false;
XUngrabPointer(disp, CurrentTime);
}