]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix recalculation of `icon-title-format' after a frame is iconified
authorPo Lu <luangruo@yahoo.com>
Thu, 9 Jun 2022 13:48:19 +0000 (21:48 +0800)
committerPo Lu <luangruo@yahoo.com>
Thu, 9 Jun 2022 13:50:37 +0000 (21:50 +0800)
Previously it would only happen upon the next mode line
redisplay, meaning that just pressing C-z would not update the
implicit title, since C-z doesn't cause a redisplay.

* src/dispextern.h: Update prototypes.
* src/frame.h (SET_FRAME_ICONIFIED): De-slugify.  Call
`gui_consider_frame_title', since `icon-title-format' might be
different from the current frame title.
* src/xdisp.c (gui_consider_frame_title): Export (also in
dispextern.h).  (bug#55850)

src/dispextern.h
src/frame.h
src/xdisp.c

index 910f630a50c02cf5d6ffeb59d7eb5dfcd0c7522c..c7399ca2998a1769d63b17c33b00b018bf27fcc0 100644 (file)
@@ -3470,6 +3470,7 @@ extern void expose_frame (struct frame *, int, int, int, int);
 extern bool gui_intersect_rectangles (const Emacs_Rectangle *,
                                       const Emacs_Rectangle *,
                                       Emacs_Rectangle *);
+extern void gui_consider_frame_title (Lisp_Object);
 #endif /* HAVE_WINDOW_SYSTEM */
 
 extern void note_mouse_highlight (struct frame *, int, int);
index a164853e09deabf7934a99f2dd9ae59d96227da1..458b6257e49365bdb5d59133662369de1adf4f3a 100644 (file)
@@ -1293,8 +1293,28 @@ SET_FRAME_VISIBLE (struct frame *f, int v)
 }
 
 /* Set iconified status of frame F.  */
-#define SET_FRAME_ICONIFIED(f, i)                              \
-  (f)->iconified = (eassert (0 <= (i) && (i) <= 1), (i))
+INLINE void
+SET_FRAME_ICONIFIED (struct frame *f, int i)
+{
+#ifdef HAVE_WINDOW_SYSTEM
+  Lisp_Object frame;
+#endif
+
+  eassert (0 <= (i) && (i) <= 1);
+
+  f->iconified = i;
+
+#ifdef HAVE_WINDOW_SYSTEM
+  /* Iconifying a frame might cause the frame title to change if no
+     title was explicitly specified.  Force the frame title to be
+     recomputed.  */
+
+  XSETFRAME (frame, f);
+
+  if (FRAME_WINDOW_P (f))
+    gui_consider_frame_title (frame);
+#endif
+}
 
 extern Lisp_Object selected_frame;
 extern Lisp_Object old_selected_frame;
index 07324815d9005a9d189b3373657f4e768fc4d661..2245326b0d873278608221e1a20828de4964ad73 100644 (file)
@@ -13148,7 +13148,7 @@ store_mode_line_noprop (const char *string, int field_width, int precision)
    Vicon_title_format if FRAME is iconified, otherwise it is
    frame_title_format.  */
 
-static void
+void
 gui_consider_frame_title (Lisp_Object frame)
 {
   struct frame *f = XFRAME (frame);