diff options
Diffstat (limited to 'src/android.c')
| -rw-r--r-- | src/android.c | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/src/android.c b/src/android.c index 5e5e28c60ca..ed162a903ba 100644 --- a/src/android.c +++ b/src/android.c | |||
| @@ -236,7 +236,7 @@ static sem_t android_pselect_sem, android_pselect_start_sem; | |||
| 236 | static void * | 236 | static void * |
| 237 | android_run_select_thread (void *data) | 237 | android_run_select_thread (void *data) |
| 238 | { | 238 | { |
| 239 | sigset_t signals; | 239 | sigset_t signals, sigset; |
| 240 | int rc; | 240 | int rc; |
| 241 | 241 | ||
| 242 | sigfillset (&signals); | 242 | sigfillset (&signals); |
| @@ -259,7 +259,11 @@ android_run_select_thread (void *data) | |||
| 259 | 259 | ||
| 260 | /* Make sure SIGUSR1 can always wake pselect up. */ | 260 | /* Make sure SIGUSR1 can always wake pselect up. */ |
| 261 | if (android_pselect_sigset) | 261 | if (android_pselect_sigset) |
| 262 | sigdelset (android_pselect_sigset, SIGUSR1); | 262 | { |
| 263 | sigset = *android_pselect_sigset; | ||
| 264 | sigdelset (&sigset, SIGUSR1); | ||
| 265 | android_pselect_sigset = &sigset; | ||
| 266 | } | ||
| 263 | else | 267 | else |
| 264 | android_pselect_sigset = &signals; | 268 | android_pselect_sigset = &signals; |
| 265 | 269 | ||
| @@ -356,6 +360,23 @@ android_pending (void) | |||
| 356 | return i; | 360 | return i; |
| 357 | } | 361 | } |
| 358 | 362 | ||
| 363 | /* Wait for events to become available synchronously. Return once an | ||
| 364 | event arrives. */ | ||
| 365 | |||
| 366 | void | ||
| 367 | android_wait_event (void) | ||
| 368 | { | ||
| 369 | pthread_mutex_lock (&event_queue.mutex); | ||
| 370 | |||
| 371 | /* Wait for events to appear if there are none available to | ||
| 372 | read. */ | ||
| 373 | if (!event_queue.num_events) | ||
| 374 | pthread_cond_wait (&event_queue.read_var, | ||
| 375 | &event_queue.mutex); | ||
| 376 | |||
| 377 | pthread_mutex_unlock (&event_queue.mutex); | ||
| 378 | } | ||
| 379 | |||
| 359 | void | 380 | void |
| 360 | android_next_event (union android_event *event_return) | 381 | android_next_event (union android_event *event_return) |
| 361 | { | 382 | { |
| @@ -1472,6 +1493,8 @@ NATIVE_NAME (sendIconified) (JNIEnv *env, jobject object, | |||
| 1472 | 1493 | ||
| 1473 | event.iconified.type = ANDROID_ICONIFIED; | 1494 | event.iconified.type = ANDROID_ICONIFIED; |
| 1474 | event.iconified.window = window; | 1495 | event.iconified.window = window; |
| 1496 | |||
| 1497 | android_write_event (&event); | ||
| 1475 | } | 1498 | } |
| 1476 | 1499 | ||
| 1477 | extern JNIEXPORT void JNICALL | 1500 | extern JNIEXPORT void JNICALL |
| @@ -1482,6 +1505,21 @@ NATIVE_NAME (sendDeiconified) (JNIEnv *env, jobject object, | |||
| 1482 | 1505 | ||
| 1483 | event.iconified.type = ANDROID_DEICONIFIED; | 1506 | event.iconified.type = ANDROID_DEICONIFIED; |
| 1484 | event.iconified.window = window; | 1507 | event.iconified.window = window; |
| 1508 | |||
| 1509 | android_write_event (&event); | ||
| 1510 | } | ||
| 1511 | |||
| 1512 | extern JNIEXPORT void JNICALL | ||
| 1513 | NATIVE_NAME (sendContextMenu) (JNIEnv *env, jobject object, | ||
| 1514 | jshort window, jint menu_event_id) | ||
| 1515 | { | ||
| 1516 | union android_event event; | ||
| 1517 | |||
| 1518 | event.menu.type = ANDROID_CONTEXT_MENU; | ||
| 1519 | event.menu.window = window; | ||
| 1520 | event.menu.menu_event_id = menu_event_id; | ||
| 1521 | |||
| 1522 | android_write_event (&event); | ||
| 1485 | } | 1523 | } |
| 1486 | 1524 | ||
| 1487 | #pragma clang diagnostic pop | 1525 | #pragma clang diagnostic pop |