GNU bug report logs - #72331
29.4; Modifying horizontal-scroll-bar does not fully work (MacOS only)

Previous Next

Package: emacs;

Reported by: Jared Finder <jared <at> finder.org>

Date: Sun, 28 Jul 2024 05:11:02 UTC

Severity: normal

Found in version 29.4

Fixed in version 30.1

Done: Gerd Möllmann <gerd.moellmann <at> gmail.com>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 72331 in the body.
You can then email your comments to 72331 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#72331; Package emacs. (Sun, 28 Jul 2024 05:11:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Jared Finder <jared <at> finder.org>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Sun, 28 Jul 2024 05:11:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Jared Finder <jared <at> finder.org>
To: bug-gnu-emacs <at> gnu.org
Subject: 29.4; Modifying horizontal-scroll-bar does not fully work (MacOS 
 only)
Date: Sat, 27 Jul 2024 22:10:06 -0700
Directly modifying the variable horizontal-scroll-bar on MacOS doesn't
show a scroll bar unless the frame also has the horizontal-scroll-bars
frame  parameter set.  This only happens on MacOS, on Linux and Windows
everything behaves as I would expect.

To reproduce, define the following function:

(defun bug-report-toggle-buffer-horizontal-scroll-bar ()
  "Like `toggle-scroll-bar', but for just the current buffer.
And for horizontal scroll bars.  I guess it's acutally very
different."
  (interactive)
  (setq horizontal-scroll-bar (if horizontal-scroll-bar nil 'bottom))
  (set-window-buffer (selected-window) (current-buffer)))

Then run M-x bug-report-toggle-buffer-horizontal-scroll-bar repeatedly
and observe that on MacOS space gets reserved for the horizontal scroll
bar but no scroll bar is rendered.  Finally, run M-x
horizontal-scroll-bar-mode and observe that now the horizontal scroll
bar is properly shown and hidden.

I also tested this on master and observed the same behavior.

In GNU Emacs 29.4 (build 1, aarch64-apple-darwin21.6.0, NS
 appkit-2113.60 Version 12.6.6 (Build 21G646)) of 2024-07-24 built on
 armbob.lan
Windowing system distributor 'Apple', version 10.3.2487
System Description:  macOS 14.5

Configured using:
 'configure --with-ns '--enable-locallisppath=/Library/Application
 Support/Emacs/${version}/site-lisp:/Library/Application
 Support/Emacs/site-lisp' --with-modules 'CFLAGS=-DFD_SETSIZE=10000
 -DDARWIN_UNLIMITED_SELECT' --with-x-toolkit=no'

Configured features:
ACL GLIB GMP GNUTLS JPEG JSON LIBXML2 MODULES NOTIFY KQUEUE NS PDUMPER
PNG RSVG SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER ZLIB

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: ELisp/l

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr vc-git diff-mode easy-mmode vc-dispatcher
cl-extra cl-print byte-opt gv bytecomp byte-compile thingatpt help-fns
radix-tree help-mode dabbrev emacsbug message mailcap yank-media puny
dired dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg
rfc6068 epg-config gnus-util text-property-search time-date subr-x
mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils
mailheader cl-loaddefs cl-lib sendmail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils rmc iso-transl tooltip cconv eldoc paren
electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
term/ns-win ns-win ucs-normalize mule-util term/common-win tool-bar dnd
fontset image regexp-opt fringe tabulated-list replace newcomment
text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow
isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax
font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads kqueue cocoa ns multi-tty
make-network-process emacs)

Memory information:
((conses 16 60165 20431)
 (symbols 48 6527 0)
 (strings 32 20561 2286)
 (string-bytes 1 561629)
 (vectors 16 13714)
 (vector-slots 8 194672 14038)
 (floats 8 33 135)
 (intervals 56 399 17)
 (buffers 984 14))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#72331; Package emacs. (Sun, 04 Aug 2024 08:35:02 GMT) Full text and rfc822 format available.

Message #8 received at 72331 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Jared Finder <jared <at> finder.org>
Cc: 72331 <at> debbugs.gnu.org
Subject: Re: bug#72331: 29.4;
 Modifying horizontal-scroll-bar does not fully work (MacOS  only)
Date: Sun, 04 Aug 2024 11:33:34 +0300
> Date: Sat, 27 Jul 2024 22:10:06 -0700
> From:  Jared Finder via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
> 
> Directly modifying the variable horizontal-scroll-bar on MacOS doesn't
> show a scroll bar unless the frame also has the horizontal-scroll-bars
> frame  parameter set.  This only happens on MacOS, on Linux and Windows
> everything behaves as I would expect.
> 
> To reproduce, define the following function:
> 
> (defun bug-report-toggle-buffer-horizontal-scroll-bar ()
>    "Like `toggle-scroll-bar', but for just the current buffer.
> And for horizontal scroll bars.  I guess it's acutally very
> different."
>    (interactive)
>    (setq horizontal-scroll-bar (if horizontal-scroll-bar nil 'bottom))
>    (set-window-buffer (selected-window) (current-buffer)))
> 
> Then run M-x bug-report-toggle-buffer-horizontal-scroll-bar repeatedly
> and observe that on MacOS space gets reserved for the horizontal scroll
> bar but no scroll bar is rendered.  Finally, run M-x
> horizontal-scroll-bar-mode and observe that now the horizontal scroll
> bar is properly shown and hidden.
> 
> I also tested this on master and observed the same behavior.

Thanks.

Could some macOS user please look into this?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#72331; Package emacs. (Mon, 05 Aug 2024 13:45:02 GMT) Full text and rfc822 format available.

Message #11 received at 72331 <at> debbugs.gnu.org (full text, mbox):

From: Gerd Möllmann <gerd.moellmann <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: Po Lu <luangruo <at> yahoo.com>, Jared Finder <jared <at> finder.org>,
 72331 <at> debbugs.gnu.org
Subject: Re: bug#72331: 29.4; Modifying horizontal-scroll-bar does not fully
 work (MacOS  only)
Date: Mon, 05 Aug 2024 15:43:21 +0200
Eli Zaretskii <eliz <at> gnu.org> writes:

>> Date: Sat, 27 Jul 2024 22:10:06 -0700
>> From:  Jared Finder via "Bug reports for GNU Emacs,
>>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>> 
>> Directly modifying the variable horizontal-scroll-bar on MacOS doesn't
>> show a scroll bar unless the frame also has the horizontal-scroll-bars
>> frame  parameter set.  This only happens on MacOS, on Linux and Windows
>> everything behaves as I would expect.
>> 
>> To reproduce, define the following function:
>> 
>> (defun bug-report-toggle-buffer-horizontal-scroll-bar ()
>>    "Like `toggle-scroll-bar', but for just the current buffer.
>> And for horizontal scroll bars.  I guess it's acutally very
>> different."
>>    (interactive)
>>    (setq horizontal-scroll-bar (if horizontal-scroll-bar nil 'bottom))
>>    (set-window-buffer (selected-window) (current-buffer)))
>> 
>> Then run M-x bug-report-toggle-buffer-horizontal-scroll-bar repeatedly
>> and observe that on MacOS space gets reserved for the horizontal scroll
>> bar but no scroll bar is rendered.  Finally, run M-x
>> horizontal-scroll-bar-mode and observe that now the horizontal scroll
>> bar is properly shown and hidden.
>> 
>> I also tested this on master and observed the same behavior.
>
> Thanks.
>
> Could some macOS user please look into this?

Same for vertical-scroll-bar, BTW. From reading the code and setting a
breakpoint in ns_set_horizontal_scroll_bar, I'd say it's the definition
of these macros in nsterm.h:

  /* Compute pixel size for vertical scroll bars.  */
  #define NS_SCROLL_BAR_WIDTH(f)						\
    (FRAME_HAS_VERTICAL_SCROLL_BARS (f)					\
     ? rint (FRAME_CONFIG_SCROLL_BAR_WIDTH (f) > 0			\
             ? FRAME_CONFIG_SCROLL_BAR_WIDTH (f)				\
             : (FRAME_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f)))	\
     : 0)

  /* Compute pixel size for horizontal scroll bars.  */
  #define NS_SCROLL_BAR_HEIGHT(f)						\
    (FRAME_HAS_HORIZONTAL_SCROLL_BARS (f)					\
     ? rint (FRAME_CONFIG_SCROLL_BAR_HEIGHT (f) > 0			\
             ? FRAME_CONFIG_SCROLL_BAR_HEIGHT (f)				\
             : (FRAME_SCROLL_BAR_LINES (f) * FRAME_LINE_HEIGHT (f)))	\
     : 0)

Both check FRAME_HAS_H/V_SCROLL_BARS which in this case results in width
or height being 0, which is a bit small.

A change like the one below makes the horizontal scroll bar visible with
Jared's test function.

1 file changed, 4 insertions(+), 1 deletion(-)
src/nsterm.m | 5 ++++-

modified   src/nsterm.m
@@ -5167,7 +5167,10 @@ Function modeled after x_draw_glyph_string_box ().
   window_box (window, ANY_AREA, &window_x, 0, &window_width, 0);
   left = window_x;
   width = window_width;
-  height = NS_SCROLL_BAR_HEIGHT (f);
+  //  height = NS_SCROLL_BAR_HEIGHT (f);
+  height = rint (FRAME_CONFIG_SCROLL_BAR_HEIGHT (f) > 0
+		 ? FRAME_CONFIG_SCROLL_BAR_HEIGHT (f)
+		 : (FRAME_SCROLL_BAR_LINES (f) * FRAME_LINE_HEIGHT (f)));
   top = WINDOW_SCROLL_BAR_AREA_Y (window);
 
   r = NSMakeRect (left, top, width, height);

If that's the right thing (plus a corresponding change for vertical
scroll bars) I don't know without studying the code and docs, and what
other platforms do.

Maybe Po Lu can help (CC'd).




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#72331; Package emacs. (Thu, 08 Aug 2024 06:48:01 GMT) Full text and rfc822 format available.

Message #14 received at 72331 <at> debbugs.gnu.org (full text, mbox):

From: Gerd Möllmann <gerd.moellmann <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: Po Lu <luangruo <at> yahoo.com>, Jared Finder <jared <at> finder.org>,
 72331 <at> debbugs.gnu.org
Subject: Re: bug#72331: 29.4; Modifying horizontal-scroll-bar does not fully
 work (MacOS  only)
Date: Thu, 08 Aug 2024 08:45:31 +0200
[Message part 1 (text/plain, inline)]
Gerd Möllmann <gerd.moellmann <at> gmail.com> writes:

> Eli Zaretskii <eliz <at> gnu.org> writes:
>
>>> Date: Sat, 27 Jul 2024 22:10:06 -0700
>>> From:  Jared Finder via "Bug reports for GNU Emacs,
>>>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>>> 
>>> Directly modifying the variable horizontal-scroll-bar on MacOS doesn't
>>> show a scroll bar unless the frame also has the horizontal-scroll-bars
>>> frame  parameter set.  This only happens on MacOS, on Linux and Windows
>>> everything behaves as I would expect.
>>> 
>>> To reproduce, define the following function:
>>> 
>>> (defun bug-report-toggle-buffer-horizontal-scroll-bar ()
>>>    "Like `toggle-scroll-bar', but for just the current buffer.
>>> And for horizontal scroll bars.  I guess it's acutally very
>>> different."
>>>    (interactive)
>>>    (setq horizontal-scroll-bar (if horizontal-scroll-bar nil 'bottom))
>>>    (set-window-buffer (selected-window) (current-buffer)))
>>> 
>>> Then run M-x bug-report-toggle-buffer-horizontal-scroll-bar repeatedly
>>> and observe that on MacOS space gets reserved for the horizontal scroll
>>> bar but no scroll bar is rendered.  Finally, run M-x
>>> horizontal-scroll-bar-mode and observe that now the horizontal scroll
>>> bar is properly shown and hidden.
>>> 
>>> I also tested this on master and observed the same behavior.
>>
>> Thanks.
>>
>> Could some macOS user please look into this?
>
> Same for vertical-scroll-bar, BTW. From reading the code and setting a
> breakpoint in ns_set_horizontal_scroll_bar, I'd say it's the definition
> of these macros in nsterm.h:
>
>   /* Compute pixel size for vertical scroll bars.  */
>   #define NS_SCROLL_BAR_WIDTH(f)						\
>     (FRAME_HAS_VERTICAL_SCROLL_BARS (f)					\
>      ? rint (FRAME_CONFIG_SCROLL_BAR_WIDTH (f) > 0			\
>              ? FRAME_CONFIG_SCROLL_BAR_WIDTH (f)				\
>              : (FRAME_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f)))	\
>      : 0)
>
>   /* Compute pixel size for horizontal scroll bars.  */
>   #define NS_SCROLL_BAR_HEIGHT(f)						\
>     (FRAME_HAS_HORIZONTAL_SCROLL_BARS (f)					\
>      ? rint (FRAME_CONFIG_SCROLL_BAR_HEIGHT (f) > 0			\
>              ? FRAME_CONFIG_SCROLL_BAR_HEIGHT (f)				\
>              : (FRAME_SCROLL_BAR_LINES (f) * FRAME_LINE_HEIGHT (f)))	\
>      : 0)
>
> Both check FRAME_HAS_H/V_SCROLL_BARS which in this case results in width
> or height being 0, which is a bit small.
>
> A change like the one below makes the horizontal scroll bar visible with
> Jared's test function.

I think the fix is the attached patch. Jared, could you please try it?

[0001-NS-Fix-scroll-bar-setting-code-bug-72331.patch (text/x-patch, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#72331; Package emacs. (Fri, 09 Aug 2024 03:48:02 GMT) Full text and rfc822 format available.

Message #17 received at 72331 <at> debbugs.gnu.org (full text, mbox):

From: Jared Finder <jared <at> finder.org>
To: Gerd Möllmann <gerd.moellmann <at> gmail.com>
Cc: Po Lu <luangruo <at> yahoo.com>, Eli Zaretskii <eliz <at> gnu.org>,
 72331 <at> debbugs.gnu.org
Subject: Re: bug#72331: 29.4; Modifying horizontal-scroll-bar does not fully
 work (MacOS  only)
Date: Thu, 08 Aug 2024 20:47:05 -0700
On 2024-08-07 23:45, Gerd Möllmann wrote:
> Gerd Möllmann <gerd.moellmann <at> gmail.com> writes:
> 
>> Eli Zaretskii <eliz <at> gnu.org> writes:
> 
> I think the fix is the attached patch. Jared, could you please try it?

The patch fully worked for me, both in the test case I provided and my 
real use case.

Thanks!

  -- MJF




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#72331; Package emacs. (Fri, 09 Aug 2024 05:25:01 GMT) Full text and rfc822 format available.

Message #20 received at 72331 <at> debbugs.gnu.org (full text, mbox):

From: Gerd Möllmann <gerd.moellmann <at> gmail.com>
To: Jared Finder <jared <at> finder.org>
Cc: Po Lu <luangruo <at> yahoo.com>, Eli Zaretskii <eliz <at> gnu.org>,
 72331 <at> debbugs.gnu.org
Subject: Re: bug#72331: 29.4; Modifying horizontal-scroll-bar does not fully
 work (MacOS  only)
Date: Fri, 09 Aug 2024 07:23:18 +0200
Jared Finder <jared <at> finder.org> writes:

> On 2024-08-07 23:45, Gerd Möllmann wrote:
>> Gerd Möllmann <gerd.moellmann <at> gmail.com> writes:
>> 
>>> Eli Zaretskii <eliz <at> gnu.org> writes:
>> I think the fix is the attached patch. Jared, could you please try
>> it?
>
> The patch fully worked for me, both in the test case I provided and my
> real use case.
>
> Thanks!
>
>   -- MJF

Thanks for testing! Pushed to emacs-30, and closing.




bug marked as fixed in version 30.1, send any further explanations to 72331 <at> debbugs.gnu.org and Jared Finder <jared <at> finder.org> Request was from Gerd Möllmann <gerd.moellmann <at> gmail.com> to control <at> debbugs.gnu.org. (Fri, 09 Aug 2024 05:26:02 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sat, 07 Sep 2024 11:24:08 GMT) Full text and rfc822 format available.

This bug report was last modified 285 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.