diff options
| author | Martin Rudalics | 2025-02-10 10:36:38 +0100 |
|---|---|---|
| committer | Martin Rudalics | 2025-02-10 10:36:38 +0100 |
| commit | 4d1ceac9f9332f74ac2ab300eb2a629ea742b1dc (patch) | |
| tree | 2dc013150344d3b846d4d902387090ea166a7b73 /src | |
| parent | 302274b18625b04d1f52fe4c1e52dbcd2cd5124b (diff) | |
| download | emacs-4d1ceac9f9332f74ac2ab300eb2a629ea742b1dc.tar.gz emacs-4d1ceac9f9332f74ac2ab300eb2a629ea742b1dc.zip | |
Fix handling of visibility on tty frames (Bug#76031)
* src/frame.h (FRAME_REDISPLAY_P): Remove. Use the new function
frame_redisplay_p instead. Extern frame_redisplay_p.
* src/frame.c (frame_redisplay_p): New function to replace
FRAME_REDISPLAY_P macro.
(make_terminal_frame): Don't tinker with frame visibility and
don't make the new frame the terminal's top frame.
(do_switch_frame): Make sure frame switched to and any of its
ancestors are visible. Don't reset the visibility of other
frames.
(other_frames): Do not assume tty frames are by default visible.
(Fmake_frame_invisible): When making the selected tty frame
invisible, explicitly select the next visible frame.
* src/dispnew.c (Fredraw_display): Use frame_redisplay_p instead
of FRAME_REDISPLAY_P.
* src/xdisp.c (clear_garbaged_frames, echo_area_display)
(prepare_menu_bars, redisplay_internal, display_and_set_cursor)
(gui_clear_cursor): Use frame_redisplay_p instead of
FRAME_REDISPLAY_P.
* src/keyboard.c (tty_read_avail_input): When storing an event
and the selected frame is a child frame whose root is its
terminal's top frame, set the frame_or_window slot to the child
frame since otherwise the next switch frame event will select
the top frame instead.
Diffstat (limited to 'src')
| -rw-r--r-- | src/dispnew.c | 2 | ||||
| -rw-r--r-- | src/frame.c | 118 | ||||
| -rw-r--r-- | src/frame.h | 15 | ||||
| -rw-r--r-- | src/keyboard.c | 11 | ||||
| -rw-r--r-- | src/xdisp.c | 28 | ||||
| -rw-r--r-- | src/xterm.h | 2 |
6 files changed, 103 insertions, 73 deletions
diff --git a/src/dispnew.c b/src/dispnew.c index 5f5575d484b..a952f7623c0 100644 --- a/src/dispnew.c +++ b/src/dispnew.c | |||
| @@ -3240,7 +3240,7 @@ DEFUN ("redraw-display", Fredraw_display, Sredraw_display, 0, 0, "", | |||
| 3240 | Lisp_Object tail, frame; | 3240 | Lisp_Object tail, frame; |
| 3241 | 3241 | ||
| 3242 | FOR_EACH_FRAME (tail, frame) | 3242 | FOR_EACH_FRAME (tail, frame) |
| 3243 | if (FRAME_REDISPLAY_P (XFRAME (frame))) | 3243 | if (frame_redisplay_p (XFRAME (frame))) |
| 3244 | redraw_frame (XFRAME (frame)); | 3244 | redraw_frame (XFRAME (frame)); |
| 3245 | 3245 | ||
| 3246 | return Qnil; | 3246 | return Qnil; |
diff --git a/src/frame.c b/src/frame.c index 6e125b9561c..2ccdec6fc41 100644 --- a/src/frame.c +++ b/src/frame.c | |||
| @@ -338,6 +338,51 @@ predicates which report frame's specific UI-related capabilities. */) | |||
| 338 | return type; | 338 | return type; |
| 339 | } | 339 | } |
| 340 | 340 | ||
| 341 | /** Return true if F can be redisplayed, that is if F is visible and, if | ||
| 342 | F is a tty frame, all its ancestors are visible too. */ | ||
| 343 | bool | ||
| 344 | frame_redisplay_p (struct frame *f) | ||
| 345 | { | ||
| 346 | if (is_tty_frame (f)) | ||
| 347 | { | ||
| 348 | struct frame *p = FRAME_PARENT_FRAME (f); | ||
| 349 | struct frame *q = NULL; | ||
| 350 | |||
| 351 | while (p) | ||
| 352 | { | ||
| 353 | if (!p->visible) | ||
| 354 | /* A tty child frame cannot be redisplayed if one of its | ||
| 355 | ancestors is invisible. */ | ||
| 356 | return false; | ||
| 357 | else | ||
| 358 | { | ||
| 359 | q = p; | ||
| 360 | p = FRAME_PARENT_FRAME (p); | ||
| 361 | } | ||
| 362 | } | ||
| 363 | |||
| 364 | struct tty_display_info *tty = FRAME_TTY (f); | ||
| 365 | struct frame *r = XFRAME (tty->top_frame); | ||
| 366 | |||
| 367 | /* A tty child frame can be redisplayed iff its root is the top | ||
| 368 | frame of its terminal. Any other tty frame can be redisplayed | ||
| 369 | iff it is the top frame of its terminal itself which must be | ||
| 370 | always visible. */ | ||
| 371 | return (q ? q == r : f == r); | ||
| 372 | } | ||
| 373 | else | ||
| 374 | #ifndef HAVE_X_WINDOWS | ||
| 375 | return FRAME_VISIBLE_P (f); | ||
| 376 | #else | ||
| 377 | /* Under X, frames can continue to be displayed to the user by the | ||
| 378 | compositing manager even if they are invisible, so this also | ||
| 379 | checks whether or not the frame is reported visible by the X | ||
| 380 | server. */ | ||
| 381 | return (FRAME_VISIBLE_P (f) | ||
| 382 | || (FRAME_X_P (f) && FRAME_X_VISIBLE (f))); | ||
| 383 | #endif | ||
| 384 | } | ||
| 385 | |||
| 341 | /* Placeholder used by temacs -nw before window.el is loaded. */ | 386 | /* Placeholder used by temacs -nw before window.el is loaded. */ |
| 342 | DEFUN ("frame-windows-min-size", Fframe_windows_min_size, | 387 | DEFUN ("frame-windows-min-size", Fframe_windows_min_size, |
| 343 | Sframe_windows_min_size, 4, 4, 0, | 388 | Sframe_windows_min_size, 4, 4, 0, |
| @@ -1407,18 +1452,6 @@ make_terminal_frame (struct terminal *terminal, Lisp_Object parent, | |||
| 1407 | FRAME_TEXT_HEIGHT (f) = FRAME_TEXT_HEIGHT (f) - FRAME_MENU_BAR_HEIGHT (f) | 1452 | FRAME_TEXT_HEIGHT (f) = FRAME_TEXT_HEIGHT (f) - FRAME_MENU_BAR_HEIGHT (f) |
| 1408 | - FRAME_TAB_BAR_HEIGHT (f); | 1453 | - FRAME_TAB_BAR_HEIGHT (f); |
| 1409 | 1454 | ||
| 1410 | /* Mark current topmost frame obscured if we make a new root frame. | ||
| 1411 | Child frames don't completely obscure other frames. */ | ||
| 1412 | if (NILP (parent) && FRAMEP (FRAME_TTY (f)->top_frame)) | ||
| 1413 | { | ||
| 1414 | struct frame *top = XFRAME (FRAME_TTY (f)->top_frame); | ||
| 1415 | struct frame *root = root_frame (top); | ||
| 1416 | if (FRAME_LIVE_P (root)) | ||
| 1417 | SET_FRAME_VISIBLE (root, false); | ||
| 1418 | } | ||
| 1419 | |||
| 1420 | /* Set the top frame to the newly created frame. */ | ||
| 1421 | FRAME_TTY (f)->top_frame = frame; | ||
| 1422 | return f; | 1455 | return f; |
| 1423 | } | 1456 | } |
| 1424 | 1457 | ||
| @@ -1772,28 +1805,27 @@ do_switch_frame (Lisp_Object frame, int track, int for_deletion, Lisp_Object nor | |||
| 1772 | struct tty_display_info *tty = FRAME_TTY (f); | 1805 | struct tty_display_info *tty = FRAME_TTY (f); |
| 1773 | Lisp_Object top_frame = tty->top_frame; | 1806 | Lisp_Object top_frame = tty->top_frame; |
| 1774 | 1807 | ||
| 1775 | /* Switching to a frame on a different root frame is special. The | 1808 | /* When FRAME's root frame is not its terminal's top frame, make |
| 1776 | old root frame has to be marked invisible, and the new root | 1809 | that root frame the new top frame of FRAME's terminal. */ |
| 1777 | frame has to be made visible. */ | 1810 | if (root_frame (f) != XFRAME (top_frame)) |
| 1778 | if (!EQ (frame, top_frame) | ||
| 1779 | && (!FRAMEP (top_frame) | ||
| 1780 | || root_frame (f) != root_frame (XFRAME (top_frame)))) | ||
| 1781 | { | 1811 | { |
| 1782 | struct frame *new_root = root_frame (f); | 1812 | struct frame *p = FRAME_PARENT_FRAME (f); |
| 1783 | SET_FRAME_VISIBLE (new_root, true); | 1813 | |
| 1784 | SET_FRAME_VISIBLE (f, true); | 1814 | XSETFRAME (top_frame, root_frame (f)); |
| 1815 | tty->top_frame = top_frame; | ||
| 1785 | 1816 | ||
| 1786 | /* Mark previously displayed root frame as no longer | 1817 | while (p) |
| 1787 | visible. */ | ||
| 1788 | if (FRAMEP (top_frame)) | ||
| 1789 | { | 1818 | { |
| 1790 | struct frame *top = XFRAME (top_frame); | 1819 | /* If FRAME is a child frame, make its ancsetors visible |
| 1791 | struct frame *old_root = root_frame (top); | 1820 | and garbage them ... */ |
| 1792 | if (old_root != new_root) | 1821 | SET_FRAME_VISIBLE (p, true); |
| 1793 | SET_FRAME_VISIBLE (old_root, false); | 1822 | SET_FRAME_GARBAGED (p); |
| 1823 | p = FRAME_PARENT_FRAME (p); | ||
| 1794 | } | 1824 | } |
| 1795 | 1825 | ||
| 1796 | tty->top_frame = frame; | 1826 | /* ... and FRAME itself too. */ |
| 1827 | SET_FRAME_VISIBLE (f, true); | ||
| 1828 | SET_FRAME_GARBAGED (f); | ||
| 1797 | 1829 | ||
| 1798 | /* FIXME: Why is it correct to set FrameCols/Rows here? */ | 1830 | /* FIXME: Why is it correct to set FrameCols/Rows here? */ |
| 1799 | if (!FRAME_PARENT_FRAME (f)) | 1831 | if (!FRAME_PARENT_FRAME (f)) |
| @@ -1808,10 +1840,8 @@ do_switch_frame (Lisp_Object frame, int track, int for_deletion, Lisp_Object nor | |||
| 1808 | } | 1840 | } |
| 1809 | } | 1841 | } |
| 1810 | else | 1842 | else |
| 1811 | { | 1843 | /* Should be covered by the condition above. */ |
| 1812 | SET_FRAME_VISIBLE (f, true); | 1844 | SET_FRAME_VISIBLE (f, true); |
| 1813 | tty->top_frame = frame; | ||
| 1814 | } | ||
| 1815 | } | 1845 | } |
| 1816 | 1846 | ||
| 1817 | sf->select_mini_window_flag = MINI_WINDOW_P (XWINDOW (sf->selected_window)); | 1847 | sf->select_mini_window_flag = MINI_WINDOW_P (XWINDOW (sf->selected_window)); |
| @@ -2229,8 +2259,8 @@ DEFUN ("last-nonminibuffer-frame", Flast_nonminibuf_frame, | |||
| 2229 | * other_frames: | 2259 | * other_frames: |
| 2230 | * | 2260 | * |
| 2231 | * Return true if there exists at least one visible or iconified frame | 2261 | * Return true if there exists at least one visible or iconified frame |
| 2232 | * but F. Tooltip frames do not qualify as candidates. Return false | 2262 | * but F. Tooltip and child frames do not qualify as candidates. |
| 2233 | * if no such frame exists. | 2263 | * Return false if no such frame exists. |
| 2234 | * | 2264 | * |
| 2235 | * INVISIBLE true means we are called from make_frame_invisible where | 2265 | * INVISIBLE true means we are called from make_frame_invisible where |
| 2236 | * such a frame must be visible or iconified. INVISIBLE nil means we | 2266 | * such a frame must be visible or iconified. INVISIBLE nil means we |
| @@ -2322,7 +2352,6 @@ other_frames (struct frame *f, bool invisible, bool force) | |||
| 2322 | /* For invisibility and normal deletions, at least one | 2352 | /* For invisibility and normal deletions, at least one |
| 2323 | visible or iconified frame must remain (Bug#26682). */ | 2353 | visible or iconified frame must remain (Bug#26682). */ |
| 2324 | && (FRAME_VISIBLE_P (f1) | 2354 | && (FRAME_VISIBLE_P (f1) |
| 2325 | || is_tty_frame (f1) | ||
| 2326 | || FRAME_ICONIFIED_P (f1) | 2355 | || FRAME_ICONIFIED_P (f1) |
| 2327 | || (!invisible | 2356 | || (!invisible |
| 2328 | && (force | 2357 | && (force |
| @@ -3234,11 +3263,18 @@ displayed in the terminal. */) | |||
| 3234 | if (FRAME_WINDOW_P (f) && FRAME_TERMINAL (f)->frame_visible_invisible_hook) | 3263 | if (FRAME_WINDOW_P (f) && FRAME_TERMINAL (f)->frame_visible_invisible_hook) |
| 3235 | FRAME_TERMINAL (f)->frame_visible_invisible_hook (f, false); | 3264 | FRAME_TERMINAL (f)->frame_visible_invisible_hook (f, false); |
| 3236 | 3265 | ||
| 3237 | /* The ELisp manual says that this "usually" makes child frames | 3266 | if (is_tty_frame (f) && EQ (frame, selected_frame)) |
| 3238 | invisible, too, but without saying when not. Since users can't | 3267 | /* On a tty if FRAME is the selected frame, we have to select another |
| 3239 | rely on this, it's not implemented. */ | 3268 | frame instead. If FRAME is a child frame, use the first visible |
| 3240 | if (is_tty_frame (f)) | 3269 | ancestor as returned by 'mru_rooted_frame'. If FRAME is a root |
| 3241 | SET_FRAME_VISIBLE (f, false); | 3270 | frame, use the frame returned by 'next-frame' which must exist since |
| 3271 | otherwise other_frames above would have lied. */ | ||
| 3272 | Fselect_frame (FRAME_PARENT_FRAME (f) | ||
| 3273 | ? mru_rooted_frame (f) | ||
| 3274 | : next_frame (frame, make_fixnum (0)), | ||
| 3275 | Qnil); | ||
| 3276 | |||
| 3277 | SET_FRAME_VISIBLE (f, false); | ||
| 3242 | 3278 | ||
| 3243 | /* Make menu bar update for the Buffers and Frames menus. */ | 3279 | /* Make menu bar update for the Buffers and Frames menus. */ |
| 3244 | windows_or_buffers_changed = 16; | 3280 | windows_or_buffers_changed = 16; |
diff --git a/src/frame.h b/src/frame.h index fea8baa7332..c9cc65e597d 100644 --- a/src/frame.h +++ b/src/frame.h | |||
| @@ -1152,20 +1152,6 @@ default_pixels_per_inch_y (void) | |||
| 1152 | /* True if frame F is currently visible. */ | 1152 | /* True if frame F is currently visible. */ |
| 1153 | #define FRAME_VISIBLE_P(f) (f)->visible | 1153 | #define FRAME_VISIBLE_P(f) (f)->visible |
| 1154 | 1154 | ||
| 1155 | /* True if frame F should be redisplayed. This is normally the same | ||
| 1156 | as FRAME_VISIBLE_P (f). Under X, frames can continue to be | ||
| 1157 | displayed to the user by the compositing manager even if they are | ||
| 1158 | invisible, so this also checks whether or not the frame is reported | ||
| 1159 | visible by the X server. */ | ||
| 1160 | |||
| 1161 | #ifndef HAVE_X_WINDOWS | ||
| 1162 | #define FRAME_REDISPLAY_P(f) FRAME_VISIBLE_P (f) | ||
| 1163 | #else | ||
| 1164 | #define FRAME_REDISPLAY_P(f) (FRAME_VISIBLE_P (f) \ | ||
| 1165 | || (FRAME_X_P (f) \ | ||
| 1166 | && FRAME_X_VISIBLE (f))) | ||
| 1167 | #endif | ||
| 1168 | |||
| 1169 | /* True if frame F is currently iconified. */ | 1155 | /* True if frame F is currently iconified. */ |
| 1170 | #define FRAME_ICONIFIED_P(f) (f)->iconified | 1156 | #define FRAME_ICONIFIED_P(f) (f)->iconified |
| 1171 | 1157 | ||
| @@ -1473,6 +1459,7 @@ extern struct frame *decode_live_frame (Lisp_Object); | |||
| 1473 | extern struct frame *decode_any_frame (Lisp_Object); | 1459 | extern struct frame *decode_any_frame (Lisp_Object); |
| 1474 | extern struct frame *make_initial_frame (void); | 1460 | extern struct frame *make_initial_frame (void); |
| 1475 | extern struct frame *make_frame (bool); | 1461 | extern struct frame *make_frame (bool); |
| 1462 | extern bool frame_redisplay_p (struct frame *); | ||
| 1476 | extern int tty_child_pos_param (struct frame *, Lisp_Object, | 1463 | extern int tty_child_pos_param (struct frame *, Lisp_Object, |
| 1477 | Lisp_Object, int); | 1464 | Lisp_Object, int); |
| 1478 | extern int tty_child_size_param (struct frame *, Lisp_Object, | 1465 | extern int tty_child_size_param (struct frame *, Lisp_Object, |
diff --git a/src/keyboard.c b/src/keyboard.c index ac143af83f4..b22814d702d 100644 --- a/src/keyboard.c +++ b/src/keyboard.c | |||
| @@ -8133,8 +8133,15 @@ tty_read_avail_input (struct terminal *terminal, | |||
| 8133 | buf.code = cbuf[i]; | 8133 | buf.code = cbuf[i]; |
| 8134 | /* Set the frame corresponding to the active tty. Note that the | 8134 | /* Set the frame corresponding to the active tty. Note that the |
| 8135 | value of selected_frame is not reliable here, redisplay tends | 8135 | value of selected_frame is not reliable here, redisplay tends |
| 8136 | to temporarily change it. */ | 8136 | to temporarily change it. However, if the selected frame is a |
| 8137 | buf.frame_or_window = tty->top_frame; | 8137 | child frame, don't do that since it will cause switch frame |
| 8138 | events to switch to the root frame instead. */ | ||
| 8139 | if (FRAME_PARENT_FRAME (XFRAME (selected_frame)) | ||
| 8140 | && (root_frame (XFRAME (selected_frame)) | ||
| 8141 | == XFRAME (tty->top_frame))) | ||
| 8142 | buf.frame_or_window = selected_frame; | ||
| 8143 | else | ||
| 8144 | buf.frame_or_window = tty->top_frame; | ||
| 8138 | buf.arg = Qnil; | 8145 | buf.arg = Qnil; |
| 8139 | 8146 | ||
| 8140 | kbd_buffer_store_event (&buf); | 8147 | kbd_buffer_store_event (&buf); |
diff --git a/src/xdisp.c b/src/xdisp.c index 804a19e048f..c9bcafe57fd 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -13453,7 +13453,7 @@ clear_garbaged_frames (void) | |||
| 13453 | { | 13453 | { |
| 13454 | struct frame *f = XFRAME (frame); | 13454 | struct frame *f = XFRAME (frame); |
| 13455 | 13455 | ||
| 13456 | if (FRAME_REDISPLAY_P (f) && FRAME_GARBAGED_P (f)) | 13456 | if (frame_redisplay_p (f) && FRAME_GARBAGED_P (f)) |
| 13457 | { | 13457 | { |
| 13458 | if (f->resized_p | 13458 | if (f->resized_p |
| 13459 | /* It makes no sense to redraw a non-selected TTY | 13459 | /* It makes no sense to redraw a non-selected TTY |
| @@ -13507,7 +13507,7 @@ echo_area_display (bool update_frame_p) | |||
| 13507 | 13507 | ||
| 13508 | /* Don't display if frame is invisible or not yet initialized or | 13508 | /* Don't display if frame is invisible or not yet initialized or |
| 13509 | if redisplay is inhibited. */ | 13509 | if redisplay is inhibited. */ |
| 13510 | if (!FRAME_REDISPLAY_P (f) || !f->glyphs_initialized_p | 13510 | if (!frame_redisplay_p (f) || !f->glyphs_initialized_p |
| 13511 | || !NILP (Vinhibit_redisplay)) | 13511 | || !NILP (Vinhibit_redisplay)) |
| 13512 | return; | 13512 | return; |
| 13513 | 13513 | ||
| @@ -14048,7 +14048,7 @@ prepare_menu_bars (void) | |||
| 14048 | TTY frames to be completely redrawn, when there | 14048 | TTY frames to be completely redrawn, when there |
| 14049 | are more than one of them, even though nothing | 14049 | are more than one of them, even though nothing |
| 14050 | should be changed on display. */ | 14050 | should be changed on display. */ |
| 14051 | || (FRAME_REDISPLAY_P (f) && FRAME_WINDOW_P (f)))) | 14051 | || (frame_redisplay_p (f) && FRAME_WINDOW_P (f)))) |
| 14052 | gui_consider_frame_title (frame); | 14052 | gui_consider_frame_title (frame); |
| 14053 | } | 14053 | } |
| 14054 | } | 14054 | } |
| @@ -17062,8 +17062,8 @@ redisplay_internal (void) | |||
| 17062 | { | 17062 | { |
| 17063 | struct frame *f = XFRAME (frame); | 17063 | struct frame *f = XFRAME (frame); |
| 17064 | 17064 | ||
| 17065 | /* FRAME_REDISPLAY_P true basically means the frame is visible. */ | 17065 | /* frame_redisplay_p true basically means the frame is visible. */ |
| 17066 | if (FRAME_REDISPLAY_P (f)) | 17066 | if (frame_redisplay_p (f)) |
| 17067 | { | 17067 | { |
| 17068 | ++number_of_visible_frames; | 17068 | ++number_of_visible_frames; |
| 17069 | /* Adjust matrices for visible frames only. */ | 17069 | /* Adjust matrices for visible frames only. */ |
| @@ -17206,7 +17206,7 @@ redisplay_internal (void) | |||
| 17206 | && !w->update_mode_line | 17206 | && !w->update_mode_line |
| 17207 | && !current_buffer->clip_changed | 17207 | && !current_buffer->clip_changed |
| 17208 | && !current_buffer->prevent_redisplay_optimizations_p | 17208 | && !current_buffer->prevent_redisplay_optimizations_p |
| 17209 | && FRAME_REDISPLAY_P (XFRAME (w->frame)) | 17209 | && frame_redisplay_p (XFRAME (w->frame)) |
| 17210 | && !XFRAME (w->frame)->cursor_type_changed | 17210 | && !XFRAME (w->frame)->cursor_type_changed |
| 17211 | && !XFRAME (w->frame)->face_change | 17211 | && !XFRAME (w->frame)->face_change |
| 17212 | /* Make sure recorded data applies to current buffer, etc. */ | 17212 | /* Make sure recorded data applies to current buffer, etc. */ |
| @@ -17467,7 +17467,7 @@ redisplay_internal (void) | |||
| 17467 | if (is_tty_frame (f)) | 17467 | if (is_tty_frame (f)) |
| 17468 | { | 17468 | { |
| 17469 | /* Ignore all invisble tty frames, children or root. */ | 17469 | /* Ignore all invisble tty frames, children or root. */ |
| 17470 | if (!FRAME_VISIBLE_P (root_frame (f))) | 17470 | if (!frame_redisplay_p (f)) |
| 17471 | continue; | 17471 | continue; |
| 17472 | 17472 | ||
| 17473 | /* Remember tty root frames which we've seen. */ | 17473 | /* Remember tty root frames which we've seen. */ |
| @@ -17498,7 +17498,7 @@ redisplay_internal (void) | |||
| 17498 | if (gcscrollbars && FRAME_TERMINAL (f)->condemn_scroll_bars_hook) | 17498 | if (gcscrollbars && FRAME_TERMINAL (f)->condemn_scroll_bars_hook) |
| 17499 | FRAME_TERMINAL (f)->condemn_scroll_bars_hook (f); | 17499 | FRAME_TERMINAL (f)->condemn_scroll_bars_hook (f); |
| 17500 | 17500 | ||
| 17501 | if (FRAME_REDISPLAY_P (f)) | 17501 | if (frame_redisplay_p (f)) |
| 17502 | { | 17502 | { |
| 17503 | /* Don't allow freeing images and faces for this | 17503 | /* Don't allow freeing images and faces for this |
| 17504 | frame as long as the frame's update wasn't | 17504 | frame as long as the frame's update wasn't |
| @@ -17524,7 +17524,7 @@ redisplay_internal (void) | |||
| 17524 | if (gcscrollbars && FRAME_TERMINAL (f)->judge_scroll_bars_hook) | 17524 | if (gcscrollbars && FRAME_TERMINAL (f)->judge_scroll_bars_hook) |
| 17525 | FRAME_TERMINAL (f)->judge_scroll_bars_hook (f); | 17525 | FRAME_TERMINAL (f)->judge_scroll_bars_hook (f); |
| 17526 | 17526 | ||
| 17527 | if (FRAME_REDISPLAY_P (f)) | 17527 | if (frame_redisplay_p (f)) |
| 17528 | { | 17528 | { |
| 17529 | /* If fonts changed on visible frame, display again. */ | 17529 | /* If fonts changed on visible frame, display again. */ |
| 17530 | if (f->fonts_changed) | 17530 | if (f->fonts_changed) |
| @@ -17630,7 +17630,7 @@ redisplay_internal (void) | |||
| 17630 | } | 17630 | } |
| 17631 | } | 17631 | } |
| 17632 | } | 17632 | } |
| 17633 | else if (FRAME_REDISPLAY_P (sf)) | 17633 | else if (frame_redisplay_p (sf)) |
| 17634 | { | 17634 | { |
| 17635 | sf->inhibit_clear_image_cache = true; | 17635 | sf->inhibit_clear_image_cache = true; |
| 17636 | displayed_buffer = XBUFFER (XWINDOW (selected_window)->contents); | 17636 | displayed_buffer = XBUFFER (XWINDOW (selected_window)->contents); |
| @@ -17681,7 +17681,7 @@ redisplay_internal (void) | |||
| 17681 | unrequest_sigio (); | 17681 | unrequest_sigio (); |
| 17682 | STOP_POLLING; | 17682 | STOP_POLLING; |
| 17683 | 17683 | ||
| 17684 | if (FRAME_REDISPLAY_P (sf)) | 17684 | if (frame_redisplay_p (sf)) |
| 17685 | { | 17685 | { |
| 17686 | if (hscroll_retries <= MAX_HSCROLL_RETRIES | 17686 | if (hscroll_retries <= MAX_HSCROLL_RETRIES |
| 17687 | && hscroll_windows (selected_window)) | 17687 | && hscroll_windows (selected_window)) |
| @@ -17763,7 +17763,7 @@ redisplay_internal (void) | |||
| 17763 | 17763 | ||
| 17764 | FOR_EACH_FRAME (tail, frame) | 17764 | FOR_EACH_FRAME (tail, frame) |
| 17765 | { | 17765 | { |
| 17766 | if (FRAME_REDISPLAY_P (XFRAME (frame))) | 17766 | if (frame_redisplay_p (XFRAME (frame))) |
| 17767 | new_count++; | 17767 | new_count++; |
| 17768 | } | 17768 | } |
| 17769 | 17769 | ||
| @@ -34268,7 +34268,7 @@ display_and_set_cursor (struct window *w, bool on, | |||
| 34268 | windows and frames; in the latter case, the frame or window may | 34268 | windows and frames; in the latter case, the frame or window may |
| 34269 | be in the midst of changing its size, and x and y may be off the | 34269 | be in the midst of changing its size, and x and y may be off the |
| 34270 | window. */ | 34270 | window. */ |
| 34271 | if (! FRAME_REDISPLAY_P (f) | 34271 | if (! frame_redisplay_p (f) |
| 34272 | || vpos >= w->current_matrix->nrows | 34272 | || vpos >= w->current_matrix->nrows |
| 34273 | || hpos >= w->current_matrix->matrix_w) | 34273 | || hpos >= w->current_matrix->matrix_w) |
| 34274 | return; | 34274 | return; |
| @@ -34436,7 +34436,7 @@ gui_update_cursor (struct frame *f, bool on_p) | |||
| 34436 | void | 34436 | void |
| 34437 | gui_clear_cursor (struct window *w) | 34437 | gui_clear_cursor (struct window *w) |
| 34438 | { | 34438 | { |
| 34439 | if (FRAME_REDISPLAY_P (XFRAME (w->frame)) && w->phys_cursor_on_p) | 34439 | if (frame_redisplay_p (XFRAME (w->frame)) && w->phys_cursor_on_p) |
| 34440 | update_window_cursor (w, false); | 34440 | update_window_cursor (w, false); |
| 34441 | } | 34441 | } |
| 34442 | 34442 | ||
diff --git a/src/xterm.h b/src/xterm.h index 7c2fadbf094..57e37a1a8f5 100644 --- a/src/xterm.h +++ b/src/xterm.h | |||
| @@ -1494,7 +1494,7 @@ extern void x_mark_frame_dirty (struct frame *f); | |||
| 1494 | #define FRAME_X_VISUAL_INFO(f) (&FRAME_DISPLAY_INFO (f)->visual_info) | 1494 | #define FRAME_X_VISUAL_INFO(f) (&FRAME_DISPLAY_INFO (f)->visual_info) |
| 1495 | 1495 | ||
| 1496 | /* Whether or not the frame is visible. Do not test this alone. | 1496 | /* Whether or not the frame is visible. Do not test this alone. |
| 1497 | Instead, use FRAME_REDISPLAY_P. */ | 1497 | Instead, use frame_redisplay_p. */ |
| 1498 | #define FRAME_X_VISIBLE(f) (FRAME_X_OUTPUT (f)->visibility_state \ | 1498 | #define FRAME_X_VISIBLE(f) (FRAME_X_OUTPUT (f)->visibility_state \ |
| 1499 | != VisibilityFullyObscured) | 1499 | != VisibilityFullyObscured) |
| 1500 | 1500 | ||