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
This commit is contained in:
Tor Lillqvist
2013-02-28 14:42:41 +02:00
parent 658824e43d
commit 32da3c3a6b

View File

@@ -977,19 +977,14 @@ extern "C" SAL_JNI_EXPORT void JNICALL
Java_org_libreoffice_experimental_desktop_Desktop_key(JNIEnv * /* env */, Java_org_libreoffice_experimental_desktop_Desktop_key(JNIEnv * /* env */,
jobject /* clazz */, jobject /* clazz */,
jchar c, jchar c,
jshort timestamp) jshort /* timestamp */)
{ {
SalKeyEvent aEvent; KeyEvent aEvent(c, c, 0);
aEvent.mnCharCode = c;
aEvent.mnTime = timestamp;
aEvent.mnCode = c;
aEvent.mnRepeat = 0;
SalFrame *pFocus = AndroidSalInstance::getInstance()->getFocusFrame(); SalFrame *pFocus = AndroidSalInstance::getInstance()->getFocusFrame();
if (pFocus) { if (pFocus) {
pFocus->CallCallback( SALEVENT_KEYINPUT, &aEvent ); Application::PostKeyEvent(VCLEVENT_WINDOW_KEYINPUT, pFocus->GetWindow(), &aEvent);
pFocus->CallCallback( SALEVENT_KEYUP, &aEvent ); Application::PostKeyEvent(VCLEVENT_WINDOW_KEYUP, pFocus->GetWindow(), &aEvent);
} }
else else
LOGW("No focused frame to emit event on"); LOGW("No focused frame to emit event on");
@@ -1002,26 +997,23 @@ Java_org_libreoffice_experimental_desktop_Desktop_touch(JNIEnv * /* env */,
jint action, jint action,
jint x, jint x,
jint y, jint y,
jshort timestamp) jshort /* timestamp */)
{ {
SalMouseEvent aEvent; MouseEvent aEvent;
aEvent.mnTime = timestamp; sal_uLong nEvent;
aEvent.mnX = x;
aEvent.mnY = y;
aEvent.mnButton = MOUSE_LEFT;
aEvent.mnCode = 0;
sal_uInt16 eventKind;
switch (action) { switch (action) {
case AMOTION_EVENT_ACTION_DOWN: case AMOTION_EVENT_ACTION_DOWN:
eventKind = SALEVENT_MOUSEBUTTONDOWN; aEvent = MouseEvent(Point(x, y), 1, MOUSE_SIMPLECLICK, MOUSE_LEFT);
nEvent = VCLEVENT_WINDOW_MOUSEBUTTONDOWN;
break; break;
case AMOTION_EVENT_ACTION_UP: case AMOTION_EVENT_ACTION_UP:
eventKind = SALEVENT_MOUSEBUTTONUP; aEvent = MouseEvent(Point(x, y), 1, MOUSE_SIMPLECLICK, MOUSE_LEFT);
nEvent = VCLEVENT_WINDOW_MOUSEBUTTONUP;
break; break;
case AMOTION_EVENT_ACTION_MOVE: case AMOTION_EVENT_ACTION_MOVE:
eventKind = SALEVENT_MOUSEMOVE; aEvent = MouseEvent(Point(x, y), 1, MOUSE_SIMPLEMOVE, MOUSE_LEFT);
nEvent = VCLEVENT_WINDOW_MOUSEMOVE;
break; break;
default: default:
LOGE("Java_org_libreoffice_experimental_desktop_Desktop_touch: Invalid action %d", action); 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(); SalFrame *pFocus = AndroidSalInstance::getInstance()->getFocusFrame();
if (pFocus) if (pFocus)
pFocus->CallCallback( eventKind, &aEvent ); Application::PostMouseEvent(nEvent, pFocus->GetWindow(), &aEvent);
else else
LOGW("No focused frame to emit event on"); LOGW("No focused frame to emit event on");
} }