From 32da3c3a6bfc61de44c37a77bfca84e3cac2c59d Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Thu, 28 Feb 2013 14:42:41 +0200 Subject: Try to use another kind of events I see randomish crashes that likely are caused by parallelism problems. Try to see if using Application::PostKeyEventg() and PostMouseEvent() instead of SalFrame::CallCallback() helps. Change-Id: Ia97259a378fe40ff0dab3fbb538599e9d2e69c1f --- vcl/android/androidinst.cxx | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) (limited to 'vcl/android') diff --git a/vcl/android/androidinst.cxx b/vcl/android/androidinst.cxx index 5c9fb78a3e4a..d855c17b89ff 100644 --- a/vcl/android/androidinst.cxx +++ b/vcl/android/androidinst.cxx @@ -977,19 +977,14 @@ extern "C" SAL_JNI_EXPORT void JNICALL Java_org_libreoffice_experimental_desktop_Desktop_key(JNIEnv * /* env */, jobject /* clazz */, jchar c, - jshort timestamp) + jshort /* timestamp */) { - SalKeyEvent aEvent; - - aEvent.mnCharCode = c; - aEvent.mnTime = timestamp; - aEvent.mnCode = c; - aEvent.mnRepeat = 0; + KeyEvent aEvent(c, c, 0); SalFrame *pFocus = AndroidSalInstance::getInstance()->getFocusFrame(); if (pFocus) { - pFocus->CallCallback( SALEVENT_KEYINPUT, &aEvent ); - pFocus->CallCallback( SALEVENT_KEYUP, &aEvent ); + Application::PostKeyEvent(VCLEVENT_WINDOW_KEYINPUT, pFocus->GetWindow(), &aEvent); + Application::PostKeyEvent(VCLEVENT_WINDOW_KEYUP, pFocus->GetWindow(), &aEvent); } else LOGW("No focused frame to emit event on"); @@ -1002,26 +997,23 @@ Java_org_libreoffice_experimental_desktop_Desktop_touch(JNIEnv * /* env */, jint action, jint x, jint y, - jshort timestamp) + jshort /* timestamp */) { - SalMouseEvent aEvent; - - aEvent.mnTime = timestamp; - aEvent.mnX = x; - aEvent.mnY = y; - aEvent.mnButton = MOUSE_LEFT; - aEvent.mnCode = 0; + MouseEvent aEvent; - sal_uInt16 eventKind; + sal_uLong nEvent; switch (action) { case AMOTION_EVENT_ACTION_DOWN: - eventKind = SALEVENT_MOUSEBUTTONDOWN; + aEvent = MouseEvent(Point(x, y), 1, MOUSE_SIMPLECLICK, MOUSE_LEFT); + nEvent = VCLEVENT_WINDOW_MOUSEBUTTONDOWN; break; case AMOTION_EVENT_ACTION_UP: - eventKind = SALEVENT_MOUSEBUTTONUP; + aEvent = MouseEvent(Point(x, y), 1, MOUSE_SIMPLECLICK, MOUSE_LEFT); + nEvent = VCLEVENT_WINDOW_MOUSEBUTTONUP; break; case AMOTION_EVENT_ACTION_MOVE: - eventKind = SALEVENT_MOUSEMOVE; + aEvent = MouseEvent(Point(x, y), 1, MOUSE_SIMPLEMOVE, MOUSE_LEFT); + nEvent = VCLEVENT_WINDOW_MOUSEMOVE; break; default: LOGE("Java_org_libreoffice_experimental_desktop_Desktop_touch: Invalid action %d", action); @@ -1030,7 +1022,7 @@ Java_org_libreoffice_experimental_desktop_Desktop_touch(JNIEnv * /* env */, SalFrame *pFocus = AndroidSalInstance::getInstance()->getFocusFrame(); if (pFocus) - pFocus->CallCallback( eventKind, &aEvent ); + Application::PostMouseEvent(nEvent, pFocus->GetWindow(), &aEvent); else LOGW("No focused frame to emit event on"); } -- cgit v1.2.3