]> git.eshelyaron.com Git - emacs.git/commitdiff
Clean up X Windows tooltip code
authorPo Lu <luangruo@yahoo.com>
Sun, 1 May 2022 01:15:52 +0000 (09:15 +0800)
committerPo Lu <luangruo@yahoo.com>
Sun, 1 May 2022 01:15:52 +0000 (09:15 +0800)
* src/xfns.c (x_hide_tip): Remove "bloodcurdling hack".
* src/xterm.c (handle_one_xevent): Add a better version here
instead.  The code is unlikely to be hit as well, since tooltip
frames are typically deleted, not just hidden.

src/xfns.c
src/xterm.c

index 06a0d4728cfac606b6eab98660c877c3af4f96b9..27bca5523cc69cefdbd76c1b6e1a545c1f7c2a5a 100644 (file)
@@ -8243,29 +8243,6 @@ x_hide_tip (bool delete)
              else
                x_make_frame_invisible (XFRAME (tip_frame));
 
-#ifdef USE_LUCID
-             /* Bloodcurdling hack alert: The Lucid menu bar widget's
-                redisplay procedure is not called when a tip frame over
-                menu items is unmapped.  Redisplay the menu manually...  */
-             {
-               Widget w;
-               struct frame *f = SELECTED_FRAME ();
-
-               if (FRAME_X_P (f) && FRAME_LIVE_P (f))
-                 {
-                   w = f->output_data.x->menubar_widget;
-
-                   if (!DoesSaveUnders (FRAME_DISPLAY_INFO (f)->screen)
-                       && w != NULL)
-                     {
-                       block_input ();
-                       xlwmenu_redisplay (w);
-                       unblock_input ();
-                     }
-                 }
-             }
-#endif /* USE_LUCID */
-
              was_open = Qt;
            }
          else
index ea86b7f8033e79a48779ea1db4e84945ff986987..4baaaf9ee8d50202d6cd6ec781518db8ed093eb9 100644 (file)
@@ -14797,6 +14797,34 @@ handle_one_xevent (struct x_display_info *dpyinfo,
         {
          bool visible = FRAME_VISIBLE_P (f);
 
+#ifdef USE_LUCID
+         /* Bloodcurdling hack alert: The Lucid menu bar widget's
+            redisplay procedure is not called when a tip frame over
+            menu items is unmapped.  Redisplay the menu manually...  */
+         if (FRAME_TOOLTIP_P (f) && popup_activated ())
+           {
+             Widget w;
+             Lisp_Object tail, frame;
+             struct frame *f1;
+
+             FOR_EACH_FRAME (tail, frame)
+               {
+                 if (!FRAME_X_P (XFRAME (frame)))
+                   continue;
+
+                 f1 = XFRAME (frame);
+
+                 if (FRAME_LIVE_P (f1))
+                   {
+                     w = FRAME_X_OUTPUT (f1)->menubar_widget;
+
+                     if (w && !DoesSaveUnders (FRAME_DISPLAY_INFO (f1)->screen))
+                       xlwmenu_redisplay (w);
+                   }
+               }
+           }
+#endif /* USE_LUCID */
+
          /* While a frame is unmapped, display generation is
              disabled; you don't want to spend time updating a
              display that won't ever be seen.  */