int android_process_event(ANDROID_EVENT_QUEUE * queue, freerdp * inst) { ANDROID_EVENT* event; while (android_peek_event(queue) != NULL) { event = android_pop_event(queue); if (event->type == EVENT_TYPE_KEY) { ANDROID_EVENT_KEY* key_event = (ANDROID_EVENT_KEY*) event; inst->input->KeyboardEvent(inst->input, key_event->flags, key_event->scancode); android_event_key_free(key_event); } else if (event->type == EVENT_TYPE_KEY_UNICODE) { ANDROID_EVENT_KEY* key_event = (ANDROID_EVENT_KEY*) event; inst->input->UnicodeKeyboardEvent(inst->input, key_event->flags, key_event->scancode); android_event_key_free(key_event); } else if (event->type == EVENT_TYPE_CURSOR) { ANDROID_EVENT_CURSOR* cursor_event = (ANDROID_EVENT_CURSOR*) event; inst->input->MouseEvent(inst->input, cursor_event->flags, cursor_event->x, cursor_event->y); android_event_cursor_free(cursor_event); } else if (event->type == EVENT_TYPE_DISCONNECT) { android_event_disconnect_free(event); return 1; } } return 0; }
void android_event_free(ANDROID_EVENT* event) { if (!event) return; switch (event->type) { case EVENT_TYPE_KEY: android_event_key_free((ANDROID_EVENT_KEY*)event); break; case EVENT_TYPE_KEY_UNICODE: android_event_unicodekey_free((ANDROID_EVENT_KEY*)event); break; case EVENT_TYPE_CURSOR: android_event_cursor_free((ANDROID_EVENT_CURSOR*)event); break; case EVENT_TYPE_DISCONNECT: android_event_disconnect_free((ANDROID_EVENT*)event); break; case EVENT_TYPE_CLIPBOARD: android_event_clipboard_free((ANDROID_EVENT_CLIPBOARD*)event); break; default: break; } }
JNIEXPORT jboolean JNICALL jni_freerdp_send_cursor_event( JNIEnv *env, jclass cls, jint instance, jint x, jint y, jint flags) { ANDROID_EVENT* event; freerdp* inst = (freerdp*)instance; event = (ANDROID_EVENT*) android_event_cursor_new(flags, x, y); if (!event) return JNI_FALSE; if (!android_push_event(inst, event)) { android_event_cursor_free((ANDROID_EVENT_CURSOR *)event); return JNI_FALSE; } DEBUG_ANDROID("send_cursor_event: (%d, %d), %d", x, y, flags); return JNI_TRUE; }