From d26b523886ee52548648ca660fc2933eadf49a55 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 2 Jan 2023 17:02:05 +0200 Subject: [PATCH] Fix shrinking of the tab-bar * src/haikufns.c (haiku_change_tab_bar_height): * src/pgtkfns.c (pgtk_change_tab_bar_height): * src/nsfns.m (ns_change_tab_bar_height): * src/w32fns.c (w32_change_tab_bar_height): * src/xfns.c (x_change_tab_bar_height): Don't let the number of tab-bar lines degenerate to zero due to integer division. (Bug#60210) --- src/haikufns.c | 14 +++++++------- src/nsfns.m | 14 +++++++------- src/pgtkfns.c | 14 +++++++------- src/w32fns.c | 14 +++++++------- src/xfns.c | 14 +++++++------- 5 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/haikufns.c b/src/haikufns.c index 59332346dab..b591c143900 100644 --- a/src/haikufns.c +++ b/src/haikufns.c @@ -175,19 +175,17 @@ haiku_change_tool_bar_height (struct frame *f, int height) void haiku_change_tab_bar_height (struct frame *f, int height) { - int unit, old_height, lines; - Lisp_Object fullscreen; - - unit = FRAME_LINE_HEIGHT (f); - old_height = FRAME_TAB_BAR_HEIGHT (f); - fullscreen = get_frame_param (f, Qfullscreen); + int unit = FRAME_LINE_HEIGHT (f); + int old_height = FRAME_TAB_BAR_HEIGHT (f); /* This differs from the tool bar code in that the tab bar height is not rounded up. Otherwise, if redisplay_tab_bar decides to grow the tab bar by even 1 pixel, FRAME_TAB_BAR_LINES will be changed, leading to the tab bar height being incorrectly set upon the next call to x_set_font. (bug#59285) */ - lines = height / unit; + int lines = height / unit; + if (lines == 0 && height != 0) + lines = 1; /* Make sure we redisplay all windows in this frame. */ fset_redisplay (f); @@ -208,6 +206,8 @@ haiku_change_tab_bar_height (struct frame *f, int height) if (!f->tab_bar_resized) { + Lisp_Object fullscreen = get_frame_param (f, Qfullscreen); + /* As long as tab_bar_resized is false, effectively try to change F's native height. */ if (NILP (fullscreen) || EQ (fullscreen, Qfullwidth)) diff --git a/src/nsfns.m b/src/nsfns.m index 8c78657db50..8804a7df7cf 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -632,19 +632,17 @@ ns_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) void ns_change_tab_bar_height (struct frame *f, int height) { - int unit, old_height, lines; - Lisp_Object fullscreen; - - unit = FRAME_LINE_HEIGHT (f); - old_height = FRAME_TAB_BAR_HEIGHT (f); - fullscreen = get_frame_param (f, Qfullscreen); + int unit = FRAME_LINE_HEIGHT (f); + int old_height = FRAME_TAB_BAR_HEIGHT (f); /* This differs from the tool bar code in that the tab bar height is not rounded up. Otherwise, if redisplay_tab_bar decides to grow the tab bar by even 1 pixel, FRAME_TAB_BAR_LINES will be changed, leading to the tab bar height being incorrectly set upon the next call to x_set_font. (bug#59285) */ - lines = height / unit; + int lines = height / unit; + if (lines == 0 && height != 0) + lines = 1; /* Make sure we redisplay all windows in this frame. */ fset_redisplay (f); @@ -665,6 +663,8 @@ ns_change_tab_bar_height (struct frame *f, int height) if (!f->tab_bar_resized) { + Lisp_Object fullscreen = get_frame_param (f, Qfullscreen); + /* As long as tab_bar_resized is false, effectively try to change F's native height. */ if (NILP (fullscreen) || EQ (fullscreen, Qfullwidth)) diff --git a/src/pgtkfns.c b/src/pgtkfns.c index 57591d2693c..6b3a0459d36 100644 --- a/src/pgtkfns.c +++ b/src/pgtkfns.c @@ -473,19 +473,17 @@ pgtk_set_tab_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) void pgtk_change_tab_bar_height (struct frame *f, int height) { - int unit, old_height, lines; - Lisp_Object fullscreen; - - unit = FRAME_LINE_HEIGHT (f); - old_height = FRAME_TAB_BAR_HEIGHT (f); - fullscreen = get_frame_param (f, Qfullscreen); + int unit = FRAME_LINE_HEIGHT (f); + int old_height = FRAME_TAB_BAR_HEIGHT (f); /* This differs from the tool bar code in that the tab bar height is not rounded up. Otherwise, if redisplay_tab_bar decides to grow the tab bar by even 1 pixel, FRAME_TAB_BAR_LINES will be changed, leading to the tab bar height being incorrectly set upon the next call to x_set_font. (bug#59285) */ - lines = height / unit; + int lines = height / unit; + if (lines == 0 && height != 0) + lines = 1; /* Make sure we redisplay all windows in this frame. */ fset_redisplay (f); @@ -506,6 +504,8 @@ pgtk_change_tab_bar_height (struct frame *f, int height) if (!f->tab_bar_resized) { + Lisp_Object fullscreen = get_frame_param (f, Qfullscreen); + /* As long as tab_bar_resized is false, effectively try to change F's native height. */ if (NILP (fullscreen) || EQ (fullscreen, Qfullwidth)) diff --git a/src/w32fns.c b/src/w32fns.c index 9d02e680fe8..192d3ddf27a 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -1717,19 +1717,17 @@ w32_set_tab_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) void w32_change_tab_bar_height (struct frame *f, int height) { - int unit, old_height, lines; - Lisp_Object fullscreen; - - unit = FRAME_LINE_HEIGHT (f); - old_height = FRAME_TAB_BAR_HEIGHT (f); - fullscreen = get_frame_param (f, Qfullscreen); + int unit = FRAME_LINE_HEIGHT (f); + int old_height = FRAME_TAB_BAR_HEIGHT (f); /* This differs from the tool bar code in that the tab bar height is not rounded up. Otherwise, if redisplay_tab_bar decides to grow the tab bar by even 1 pixel, FRAME_TAB_BAR_LINES will be changed, leading to the tab bar height being incorrectly set upon the next call to x_set_font. (bug#59285) */ - lines = height / unit; + int lines = height / unit; + if (lines == 0 && height != 0) + lines = 1; /* Make sure we redisplay all windows in this frame. */ fset_redisplay (f); @@ -1758,6 +1756,8 @@ w32_change_tab_bar_height (struct frame *f, int height) if (!f->tab_bar_resized) { + Lisp_Object fullscreen = get_frame_param (f, Qfullscreen); + /* As long as tab_bar_resized is false, effectively try to change F's native height. */ if (NILP (fullscreen) || EQ (fullscreen, Qfullwidth)) diff --git a/src/xfns.c b/src/xfns.c index a1984f9e8f8..528ae61ca32 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -1758,19 +1758,17 @@ x_set_tab_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) void x_change_tab_bar_height (struct frame *f, int height) { - int unit, old_height, lines; - Lisp_Object fullscreen; - - unit = FRAME_LINE_HEIGHT (f); - old_height = FRAME_TAB_BAR_HEIGHT (f); - fullscreen = get_frame_param (f, Qfullscreen); + int unit = FRAME_LINE_HEIGHT (f); + int old_height = FRAME_TAB_BAR_HEIGHT (f); /* This differs from the tool bar code in that the tab bar height is not rounded up. Otherwise, if redisplay_tab_bar decides to grow the tab bar by even 1 pixel, FRAME_TAB_BAR_LINES will be changed, leading to the tab bar height being incorrectly set upon the next call to x_set_font. (bug#59285) */ - lines = height / unit; + int lines = height / unit; + if (lines == 0 && height != 0) + lines = 1; /* Make sure we redisplay all windows in this frame. */ fset_redisplay (f); @@ -1791,6 +1789,8 @@ x_change_tab_bar_height (struct frame *f, int height) if (!f->tab_bar_resized) { + Lisp_Object fullscreen = get_frame_param (f, Qfullscreen); + /* As long as tab_bar_resized is false, effectively try to change F's native height. */ if (NILP (fullscreen) || EQ (fullscreen, Qfullwidth)) -- 2.39.2