diff options
| author | Po Lu | 2022-07-06 12:23:19 +0000 |
|---|---|---|
| committer | Po Lu | 2022-07-06 12:24:20 +0000 |
| commit | b5cd9343aea2d7939209c35eef3247946df24dfa (patch) | |
| tree | fedd0f8e27c17987988fc3d7f88597a90b8c99fc | |
| parent | a2e56a8d659d31466c248a38a954a1b165087781 (diff) | |
| download | emacs-b5cd9343aea2d7939209c35eef3247946df24dfa.tar.gz emacs-b5cd9343aea2d7939209c35eef3247946df24dfa.zip | |
Fix infinite looping around Haiku menus
* src/haikumenu.c (haiku_menu_show): Block SIGIO around menu
event loop.
* src/haikuterm.c (haiku_read_socket): Flush tooltip frames
after resize.
| -rw-r--r-- | src/haikumenu.c | 2 | ||||
| -rw-r--r-- | src/haikuterm.c | 6 |
2 files changed, 8 insertions, 0 deletions
diff --git a/src/haikumenu.c b/src/haikumenu.c index 5729bed4a9b..3f68eadfd93 100644 --- a/src/haikumenu.c +++ b/src/haikumenu.c | |||
| @@ -422,11 +422,13 @@ haiku_menu_show (struct frame *f, int x, int y, int menuflags, | |||
| 422 | BView_convert_to_screen (view, &x, &y); | 422 | BView_convert_to_screen (view, &x, &y); |
| 423 | unblock_input (); | 423 | unblock_input (); |
| 424 | 424 | ||
| 425 | unrequest_sigio (); | ||
| 425 | popup_activated_p++; | 426 | popup_activated_p++; |
| 426 | menu_item_selection = BMenu_run (menu, x, y, haiku_menu_show_help, | 427 | menu_item_selection = BMenu_run (menu, x, y, haiku_menu_show_help, |
| 427 | block_input, unblock_input, | 428 | block_input, unblock_input, |
| 428 | haiku_process_pending_signals_for_menu, NULL); | 429 | haiku_process_pending_signals_for_menu, NULL); |
| 429 | popup_activated_p--; | 430 | popup_activated_p--; |
| 431 | request_sigio (); | ||
| 430 | 432 | ||
| 431 | FRAME_DISPLAY_INFO (f)->grabbed = 0; | 433 | FRAME_DISPLAY_INFO (f)->grabbed = 0; |
| 432 | 434 | ||
diff --git a/src/haikuterm.c b/src/haikuterm.c index 9f8aceae642..d7247c99e08 100644 --- a/src/haikuterm.c +++ b/src/haikuterm.c | |||
| @@ -3202,6 +3202,11 @@ haiku_read_socket (struct terminal *terminal, struct input_event *hold_quit) | |||
| 3202 | FRAME_PIXEL_HEIGHT (f) = height; | 3202 | FRAME_PIXEL_HEIGHT (f) = height; |
| 3203 | 3203 | ||
| 3204 | haiku_clear_under_internal_border (f); | 3204 | haiku_clear_under_internal_border (f); |
| 3205 | |||
| 3206 | /* Flush the frame and flip buffers here. It is | ||
| 3207 | necessary for tooltips displayed inside menus, as | ||
| 3208 | redisplay cannot happen. */ | ||
| 3209 | haiku_flush (f); | ||
| 3205 | continue; | 3210 | continue; |
| 3206 | } | 3211 | } |
| 3207 | 3212 | ||
| @@ -4438,6 +4443,7 @@ haiku_clear_under_internal_border (struct frame *f) | |||
| 4438 | : INTERNAL_BORDER_FACE_ID)); | 4443 | : INTERNAL_BORDER_FACE_ID)); |
| 4439 | struct face *face = FACE_FROM_ID_OR_NULL (f, face_id); | 4444 | struct face *face = FACE_FROM_ID_OR_NULL (f, face_id); |
| 4440 | void *view = FRAME_HAIKU_VIEW (f); | 4445 | void *view = FRAME_HAIKU_VIEW (f); |
| 4446 | |||
| 4441 | block_input (); | 4447 | block_input (); |
| 4442 | BView_draw_lock (view, true, 0, 0, FRAME_PIXEL_WIDTH (f), | 4448 | BView_draw_lock (view, true, 0, 0, FRAME_PIXEL_WIDTH (f), |
| 4443 | FRAME_PIXEL_HEIGHT (f)); | 4449 | FRAME_PIXEL_HEIGHT (f)); |