--- a/src/nsterm.m 2018-05-13 16:45:39.000000000 +1200 +++ b/src/nsterm.m 2018-05-13 16:44:31.000000000 +1200 @@ -4299,14 +4299,22 @@ NSEvent *theEvent = [NSApp currentEvent]; struct frame *emacsframe = SELECTED_FRAME (); - [menu cancelTracking]; - menu_will_open_state = MENU_PENDING; - emacs_event->kind = MENU_BAR_ACTIVATE_EVENT; - EV_TRAILER (theEvent); - - CGEventRef ourEvent = CGEventCreate (NULL); - menu_mouse_point = CGEventGetLocation (ourEvent); - CFRelease (ourEvent); + /*On macOS, the following can cause an event loop when the + Spotlight for Help search field is populated. Avoid this by + not postponing mouse drag and non-user-generated mouse down + events. (bug#31371).*/ + if (([theEvent type] == NSEventTypeLeftMouseDown) + && [theEvent eventNumber]) + { + [menu cancelTracking]; + menu_will_open_state = MENU_PENDING; + emacs_event->kind = MENU_BAR_ACTIVATE_EVENT; + EV_TRAILER (theEvent); + + CGEventRef ourEvent = CGEventCreate (NULL); + menu_mouse_point = CGEventGetLocation (ourEvent); + CFRelease (ourEvent); + } } else if (menu_will_open_state == MENU_OPENING) {