diff --git a/src/native/linux/org_lwjgl_input_Mouse.cpp b/src/native/linux/org_lwjgl_input_Mouse.cpp index 02317573..1d983bb3 100644 --- a/src/native/linux/org_lwjgl_input_Mouse.cpp +++ b/src/native/linux/org_lwjgl_input_Mouse.cpp @@ -233,13 +233,13 @@ int checkPointer() { case ButtonPress: switch (event.xbutton.button) { case Button1: - buttons[0] = 1; + buttons[0] = JNI_TRUE; break; case Button2: - buttons[1] = 1; + buttons[1] = JNI_TRUE; break; case Button3: - buttons[2] = 1; + buttons[2] = JNI_TRUE; break; case Button4: current_z--; @@ -253,13 +253,13 @@ int checkPointer() { case ButtonRelease: switch (event.xbutton.button) { case Button1: - buttons[0] = 0; + buttons[0] = JNI_FALSE; break; case Button2: - buttons[1] = 0; + buttons[1] = JNI_FALSE; break; case Button3: - buttons[2] = 0; + buttons[2] = JNI_FALSE; break; case Button4: /* Fall through */ case Button5: @@ -324,9 +324,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_nPoll last_y = current_y; last_z = current_z; jbooleanArray buttonsArray = (jbooleanArray) env->GetStaticObjectField(clazz, fid_button); - unsigned char * class_buttons = (unsigned char *) env->GetPrimitiveArrayCritical(buttonsArray, NULL); - memcpy(class_buttons, buttons, NUM_BUTTONS*sizeof(unsigned char)); - env->ReleasePrimitiveArrayCritical(buttonsArray, class_buttons, 0); + env->SetBooleanArrayRegion(buttonsArray, 0, NUM_BUTTONS, buttons); if (current_fullscreen) warpPointer(); } diff --git a/src/native/win32/org_lwjgl_input_Mouse.cpp b/src/native/win32/org_lwjgl_input_Mouse.cpp index 85a71ace..f501a75c 100644 --- a/src/native/win32/org_lwjgl_input_Mouse.cpp +++ b/src/native/win32/org_lwjgl_input_Mouse.cpp @@ -121,7 +121,7 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_input_Mouse_nCreate } // Grab non-exclusive foreground access to device - if (lpdiMouse->SetCooperativeLevel(hwnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND) != DI_OK) { + if (lpdiMouse->SetCooperativeLevel(hwnd, DISCL_EXCLUSIVE | DISCL_FOREGROUND) != DI_OK) { printf("Failed to set mouse coop\n"); return JNI_FALSE; } @@ -135,6 +135,7 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_input_Mouse_nCreate printf("Failed to acquire mouse\n"); #endif } + printf("Acquired mouse\n"); return JNI_TRUE; } @@ -187,9 +188,12 @@ JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_nPoll env->SetStaticIntField(clazz, fid_dy, (jint)diMouseState.lY); env->SetStaticIntField(clazz, fid_dz, (jint)diMouseState.lZ); jbooleanArray buttonsArray = (jbooleanArray) env->GetStaticObjectField(clazz, fid_button); - BYTE * buttons = (BYTE *) env->GetPrimitiveArrayCritical(buttonsArray, NULL); - memcpy(buttons, diMouseState.rgbButtons, 4); - env->ReleasePrimitiveArrayCritical(buttonsArray, buttons, 0); + for (int i = 0; i < 4; i++) + if (diMouseState.rgbButtons[i] != 0) + diMouseState.rgbButtons[i] = JNI_TRUE; + else + diMouseState.rgbButtons[i] = JNI_FALSE; + env->SetBooleanArrayRegion(buttonsArray, 0, 4, diMouseState.rgbButtons); } else { #ifdef _DEBUG printf("Failed to get mouse device state\n");