summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2023-01-02 17:02:05 +0200
committerEli Zaretskii <eliz@gnu.org>2023-01-02 17:02:05 +0200
commitd26b523886ee52548648ca660fc2933eadf49a55 (patch)
treee0cfdf398692587094e50e04bcb98b5f02ebd581
parent3f7ea621b9008bc507048ee23466f3259b6b620d (diff)
downloademacs-d26b523886ee52548648ca660fc2933eadf49a55.tar.gz
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)
-rw-r--r--src/haikufns.c14
-rw-r--r--src/nsfns.m14
-rw-r--r--src/pgtkfns.c14
-rw-r--r--src/w32fns.c14
-rw-r--r--src/xfns.c14
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))