]> git.eshelyaron.com Git - emacs.git/commitdiff
Add some menu bar help code on GNUstep
authorPo Lu <luangruo@yahoo.com>
Sat, 22 Jan 2022 13:51:46 +0000 (21:51 +0800)
committerPo Lu <luangruo@yahoo.com>
Sat, 22 Jan 2022 13:51:46 +0000 (21:51 +0800)
* src/nsmenu.m ([EmacsMenu menu:willHighlightItem:]): Implement
help event generation for GNUstep.

src/nsmenu.m

index cad0ff6fe17d70a4bfa3778ded9949bbd6698288..5df391bcbe1ed2fb9801661a35aaa36670d880c4 100644 (file)
@@ -758,6 +758,32 @@ prettify_key (const char *key)
       : Qnil;
 }
 
+#ifdef NS_IMPL_GNUSTEP
+/* The code below doesn't work on Mac OS X, because it runs a nested
+   Carbon-related event loop to track menu bar movement.
+
+   But it works fine aside from that, so it will work on GNUstep if
+   they start to call `willHighlightItem'.  */
+- (void) menu: (NSMenu *) menu willHighlightItem: (NSMenuItem *) item
+{
+  NSInteger idx = [item tag];
+  struct frame *f = SELECTED_FRAME ();
+  Lisp_Object vec = f->menu_bar_vector;
+  Lisp_Object help, frame;
+
+  if (idx >= ASIZE (vec))
+    return;
+
+  XSETFRAME (frame, f);
+  help = AREF (vec, idx + MENU_ITEMS_ITEM_HELP);
+
+  if (STRINGP (help) || NILP (help))
+    kbd_buffer_store_help_event (frame, help);
+
+  raise (SIGIO);
+}
+#endif
+
 #ifdef NS_IMPL_GNUSTEP
 - (void) close
 {
@@ -809,10 +835,6 @@ prettify_key (const char *key)
 {
   return NSZeroRect;
 }
-
-- (void)menu:(NSMenu *)menu willHighlightItem:(NSMenuItem *)item
-{
-}
 #endif
 
 @end  /* EmacsMenu */