aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPo Lu2022-07-06 12:23:19 +0000
committerPo Lu2022-07-06 12:24:20 +0000
commitb5cd9343aea2d7939209c35eef3247946df24dfa (patch)
treefedd0f8e27c17987988fc3d7f88597a90b8c99fc
parenta2e56a8d659d31466c248a38a954a1b165087781 (diff)
downloademacs-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.c2
-rw-r--r--src/haikuterm.c6
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));