]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix infinite looping around Haiku menus
authorPo Lu <luangruo@yahoo.com>
Wed, 6 Jul 2022 12:23:19 +0000 (12:23 +0000)
committerPo Lu <luangruo@yahoo.com>
Wed, 6 Jul 2022 12:24:20 +0000 (12:24 +0000)
* src/haikumenu.c (haiku_menu_show): Block SIGIO around menu
event loop.
* src/haikuterm.c (haiku_read_socket): Flush tooltip frames
after resize.

src/haikumenu.c
src/haikuterm.c

index 5729bed4a9b9009071b1b29d4e0cb7ceeae317d0..3f68eadfd93ae89a1218ba1d5a1aa98852cd15bd 100644 (file)
@@ -422,11 +422,13 @@ haiku_menu_show (struct frame *f, int x, int y, int menuflags,
   BView_convert_to_screen (view, &x, &y);
   unblock_input ();
 
+  unrequest_sigio ();
   popup_activated_p++;
   menu_item_selection = BMenu_run (menu, x, y,  haiku_menu_show_help,
                                   block_input, unblock_input,
                                   haiku_process_pending_signals_for_menu, NULL);
   popup_activated_p--;
+  request_sigio ();
 
   FRAME_DISPLAY_INFO (f)->grabbed = 0;
 
index 9f8aceae642052dab264b3c88b15d5f8bff0ad2f..d7247c99e0875acd0f8b34bf117e39e96a3b8988 100644 (file)
@@ -3202,6 +3202,11 @@ haiku_read_socket (struct terminal *terminal, struct input_event *hold_quit)
                FRAME_PIXEL_HEIGHT (f) = height;
 
                haiku_clear_under_internal_border (f);
+
+               /* Flush the frame and flip buffers here.  It is
+                  necessary for tooltips displayed inside menus, as
+                  redisplay cannot happen.  */
+               haiku_flush (f);
                continue;
              }
 
@@ -4438,6 +4443,7 @@ haiku_clear_under_internal_border (struct frame *f)
            : INTERNAL_BORDER_FACE_ID));
       struct face *face = FACE_FROM_ID_OR_NULL (f, face_id);
       void *view = FRAME_HAIKU_VIEW (f);
+
       block_input ();
       BView_draw_lock (view, true, 0, 0, FRAME_PIXEL_WIDTH (f),
                       FRAME_PIXEL_HEIGHT (f));