aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPo Lu2022-01-26 01:20:48 +0000
committerPo Lu2022-01-26 01:20:48 +0000
commitbca68550844da7849ab33616345525918e82f3c8 (patch)
tree36f25c960aa972e68053a38914f781b530f83c28 /src
parent19c6fb16746718d94b9e316503c5779de88e2e2d (diff)
downloademacs-bca68550844da7849ab33616345525918e82f3c8.tar.gz
emacs-bca68550844da7849ab33616345525918e82f3c8.zip
Make `haiku-menu-bar-open' faster
* src/haikumenu.c (Fhaiku_menu_bar_open): Get draw lock before updating the menu bar. * src/haikuterm.c (haiku_read_socket): Don't update menu bar if b->no_lock.
Diffstat (limited to 'src')
-rw-r--r--src/haikumenu.c13
-rw-r--r--src/haikuterm.c28
2 files changed, 27 insertions, 14 deletions
diff --git a/src/haikumenu.c b/src/haikumenu.c
index 3fee5831608..b73baf72e05 100644
--- a/src/haikumenu.c
+++ b/src/haikumenu.c
@@ -644,17 +644,20 @@ the position of the last non-menu event instead. */)
644 struct frame *f = decode_window_system_frame (frame); 644 struct frame *f = decode_window_system_frame (frame);
645 645
646 if (FRAME_EXTERNAL_MENU_BAR (f)) 646 if (FRAME_EXTERNAL_MENU_BAR (f))
647 set_frame_menubar (f, 1); 647 {
648 block_input ();
649 BView_draw_lock (FRAME_HAIKU_VIEW (f));
650 set_frame_menubar (f, 1);
651 BMenuBar_start_tracking (FRAME_HAIKU_MENU_BAR (f));
652 BView_draw_unlock (FRAME_HAIKU_VIEW (f));
653 unblock_input ();
654 }
648 else 655 else
649 { 656 {
650 return call2 (Qpopup_menu, call0 (Qmouse_menu_bar_map), 657 return call2 (Qpopup_menu, call0 (Qmouse_menu_bar_map),
651 last_nonmenu_event); 658 last_nonmenu_event);
652 } 659 }
653 660
654 block_input ();
655 BMenuBar_start_tracking (FRAME_HAIKU_MENU_BAR (f));
656 unblock_input ();
657
658 return Qnil; 661 return Qnil;
659} 662}
660 663
diff --git a/src/haikuterm.c b/src/haikuterm.c
index c8cc02a2988..e7d596cec3d 100644
--- a/src/haikuterm.c
+++ b/src/haikuterm.c
@@ -3178,15 +3178,25 @@ haiku_read_socket (struct terminal *terminal, struct input_event *hold_quit)
3178 3178
3179 if (type == MENU_BAR_OPEN) 3179 if (type == MENU_BAR_OPEN)
3180 { 3180 {
3181 BView_draw_lock (FRAME_HAIKU_VIEW (f)); 3181 /* b->no_lock means that MenusBeginning was called
3182 /* This shouldn't be here, but nsmenu does it, so 3182 from the main thread, which means tracking was
3183 it should probably be safe. */ 3183 started manually, and we have already updated the
3184 int was_waiting_for_input_p = waiting_for_input; 3184 menu bar. */
3185 if (waiting_for_input) 3185 if (!b->no_lock)
3186 waiting_for_input = 0; 3186 {
3187 set_frame_menubar (f, 1); 3187 BView_draw_lock (FRAME_HAIKU_VIEW (f));
3188 waiting_for_input = was_waiting_for_input_p; 3188 /* This shouldn't be here, but nsmenu does it, so
3189 BView_draw_unlock (FRAME_HAIKU_VIEW (f)); 3189 it should probably be safe. */
3190 int was_waiting_for_input_p = waiting_for_input;
3191 if (waiting_for_input)
3192 waiting_for_input = 0;
3193 set_frame_menubar (f, 1);
3194 waiting_for_input = was_waiting_for_input_p;
3195 BView_draw_unlock (FRAME_HAIKU_VIEW (f));
3196 }
3197
3198 /* But set the flag anyway, because the menu will end
3199 from the window thread. */
3190 FRAME_OUTPUT_DATA (f)->menu_bar_open_p = 1; 3200 FRAME_OUTPUT_DATA (f)->menu_bar_open_p = 1;
3191 popup_activated_p += 1; 3201 popup_activated_p += 1;
3192 3202