* bug#72331: 29.4; Modifying horizontal-scroll-bar does not fully work (MacOS only) @ 2024-07-28 5:10 Jared Finder via Bug reports for GNU Emacs, the Swiss army knife of text editors 2024-08-04 8:33 ` Eli Zaretskii 0 siblings, 1 reply; 6+ messages in thread From: Jared Finder via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-07-28 5:10 UTC (permalink / raw) To: 72331 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)) ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#72331: 29.4; Modifying horizontal-scroll-bar does not fully work (MacOS only) 2024-07-28 5:10 bug#72331: 29.4; Modifying horizontal-scroll-bar does not fully work (MacOS only) Jared Finder via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-08-04 8:33 ` Eli Zaretskii 2024-08-05 13:43 ` Gerd Möllmann 0 siblings, 1 reply; 6+ messages in thread From: Eli Zaretskii @ 2024-08-04 8:33 UTC (permalink / raw) To: Jared Finder; +Cc: 72331 > 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@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? ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#72331: 29.4; Modifying horizontal-scroll-bar does not fully work (MacOS only) 2024-08-04 8:33 ` Eli Zaretskii @ 2024-08-05 13:43 ` Gerd Möllmann 2024-08-08 6:45 ` Gerd Möllmann 0 siblings, 1 reply; 6+ messages in thread From: Gerd Möllmann @ 2024-08-05 13:43 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Po Lu, Jared Finder, 72331 Eli Zaretskii <eliz@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@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). ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#72331: 29.4; Modifying horizontal-scroll-bar does not fully work (MacOS only) 2024-08-05 13:43 ` Gerd Möllmann @ 2024-08-08 6:45 ` Gerd Möllmann 2024-08-09 3:47 ` Jared Finder via Bug reports for GNU Emacs, the Swiss army knife of text editors 0 siblings, 1 reply; 6+ messages in thread From: Gerd Möllmann @ 2024-08-08 6:45 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Po Lu, Jared Finder, 72331 [-- Attachment #1: Type: text/plain, Size: 2653 bytes --] Gerd Möllmann <gerd.moellmann@gmail.com> writes: > Eli Zaretskii <eliz@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@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? [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-NS-Fix-scroll-bar-setting-code-bug-72331.patch --] [-- Type: text/x-patch, Size: 3132 bytes --] From 0388af932e0c013ad45597fffad3e990ae00d664 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerd=20M=C3=B6llmann?= <gerd@gnu.org> Date: Thu, 8 Aug 2024 08:19:56 +0200 Subject: [PATCH] NS: Fix scroll-bar setting code ()bug#72331) * src/nsterm.m (ns_set_vertical_scroll_bar): Use WINDOW_SCROLL_AREA_WIDTH instead of NS_SCROLL_BAR_WIDTH. (ns_set_horizontal_scroll_bar): Use WINDOW_SCROLL_AREA_HEIGHT instead of NS_SCROLL_BAR_HEIGHT. Clear area differently if vertical scroll bars are present. * src/nsterm.h (NS_SCROLL_BAR_WIDTH, NS_SCROLL_BAR_HEIGHT): Remove. --- src/nsterm.h | 16 ---------------- src/nsterm.m | 6 +++--- 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/src/nsterm.h b/src/nsterm.h index 844f2b2bc78..256a233558e 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -1070,22 +1070,6 @@ #define FRAME_TOOLBAR_HEIGHT(f) \ styleMask:[[FRAME_NS_VIEW (f) window] styleMask]]) \ - NSHeight([[[FRAME_NS_VIEW (f) window] contentView] frame]))) -/* 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) - /* Difference between char-column-calculated and actual SB widths. This is only a concern for rendering when SB on left. */ #define NS_SCROLL_BAR_ADJUST(w, f) \ diff --git a/src/nsterm.m b/src/nsterm.m index 594f7ba974b..4f2047fa3ef 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -5072,7 +5072,7 @@ Function modeled after x_draw_glyph_string_box (). window_box (window, ANY_AREA, 0, &window_y, 0, &window_height); top = window_y; height = window_height; - width = NS_SCROLL_BAR_WIDTH (f); + width = WINDOW_SCROLL_BAR_AREA_WIDTH (window); left = WINDOW_SCROLL_BAR_AREA_X (window); r = NSMakeRect (left, top, width, height); @@ -5166,7 +5166,7 @@ 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 = WINDOW_SCROLL_BAR_AREA_HEIGHT (window); top = WINDOW_SCROLL_BAR_AREA_Y (window); r = NSMakeRect (left, top, width, height); @@ -5204,7 +5204,7 @@ Function modeled after x_draw_glyph_string_box (). it fills with junk. */ if (!NILP (window->vertical_scroll_bar)) ns_clear_frame_area (f, WINDOW_SCROLL_BAR_AREA_X (window), top, - NS_SCROLL_BAR_HEIGHT (f), height); + WINDOW_SCROLL_BAR_AREA_WIDTH (window), height); if (update_p) [bar setPosition: position portion: portion whole: whole]; -- 2.46.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* bug#72331: 29.4; Modifying horizontal-scroll-bar does not fully work (MacOS only) 2024-08-08 6:45 ` Gerd Möllmann @ 2024-08-09 3:47 ` Jared Finder via Bug reports for GNU Emacs, the Swiss army knife of text editors 2024-08-09 5:23 ` Gerd Möllmann 0 siblings, 1 reply; 6+ messages in thread From: Jared Finder via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-08-09 3:47 UTC (permalink / raw) To: Gerd Möllmann; +Cc: Po Lu, Eli Zaretskii, 72331 On 2024-08-07 23:45, Gerd Möllmann wrote: > Gerd Möllmann <gerd.moellmann@gmail.com> writes: > >> Eli Zaretskii <eliz@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 ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#72331: 29.4; Modifying horizontal-scroll-bar does not fully work (MacOS only) 2024-08-09 3:47 ` Jared Finder via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-08-09 5:23 ` Gerd Möllmann 0 siblings, 0 replies; 6+ messages in thread From: Gerd Möllmann @ 2024-08-09 5:23 UTC (permalink / raw) To: Jared Finder; +Cc: Po Lu, Eli Zaretskii, 72331 Jared Finder <jared@finder.org> writes: > On 2024-08-07 23:45, Gerd Möllmann wrote: >> Gerd Möllmann <gerd.moellmann@gmail.com> writes: >> >>> Eli Zaretskii <eliz@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. ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-08-09 5:23 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-07-28 5:10 bug#72331: 29.4; Modifying horizontal-scroll-bar does not fully work (MacOS only) Jared Finder via Bug reports for GNU Emacs, the Swiss army knife of text editors 2024-08-04 8:33 ` Eli Zaretskii 2024-08-05 13:43 ` Gerd Möllmann 2024-08-08 6:45 ` Gerd Möllmann 2024-08-09 3:47 ` Jared Finder via Bug reports for GNU Emacs, the Swiss army knife of text editors 2024-08-09 5:23 ` Gerd Möllmann
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).