unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Alan Third <alan@idiocy.org>
To: Lars Ingebrigtsen <larsi@gnus.org>
Cc: 54623@debbugs.gnu.org, Angelo Graziosi <angelo.g0@libero.it>
Subject: bug#54623: No scroll bars on macOS builds
Date: Wed, 30 Mar 2022 22:52:59 +0100	[thread overview]
Message-ID: <YkTROyslrLy0TUtd@idiocy.org> (raw)
In-Reply-To: <875ynxapxv.fsf@gnus.org>

[-- Attachment #1: Type: text/plain, Size: 754 bytes --]

On Tue, Mar 29, 2022 at 02:44:28PM +0200, Lars Ingebrigtsen wrote:
> Angelo Graziosi <angelo.g0@libero.it> writes:
> 
> > Emacs builds on macOS 10.13.6 do not show scroll bars even if both
> > vertical and horizontal ones are enabled. The attached screenshot
> > refers to 'Emacs -Q'.
> 
> I can't reproduce this on Macos 12.1.

I can't reproduce it on 10.14 either. I suspect it's some subtle
difference in layer handling between 10.13 and 10.14+.

> > The first build in which scroll bars are gone or hidden looks
> >
> > 2)
> > commit: a4d2c88cdee90a3e4863a62c4ff69896d0c1a347
> > Alan Third 2021-07-31 11:13:05 +0100
> > Simplify macOS drawing code
> 
> Perhaps Alan has some comments; added to the CCs.

Maybe the attached will help.
-- 
Alan Third

[-- Attachment #2: 0001-Fix-scrollbars-on-macOS-10.13-and-below-bug-54623.patch --]
[-- Type: text/x-diff, Size: 3436 bytes --]

From aef95a32f2260fdadbbd0903b5d3bb0b1220a9db Mon Sep 17 00:00:00 2001
From: Alan Third <alan@idiocy.org>
Date: Wed, 30 Mar 2022 22:40:03 +0100
Subject: [PATCH] Fix scrollbars on macOS 10.13 and below (bug#54623)

* src/nsterm.h (NSAppKitVersionNumber10_14): Required for
makeBackingLayer version check.
* src/nsterm.m (USING_EMACSLAYER): Check whether we're using layers
and whether the layer is an EmacsLayer class.
([EmacsView makeBackingLayer]): Only use EmacsLayer on macOS 10.14 and above.
([EmacsView lockFocus]):
([EmacsView unlockFocus]):
([EmacsView windowDidChangeBackingProperties:]):
([EmacsView copyRect:to:]): Replace check for wantsLayer with
USING_EMACSLAYER.
---
 src/nsterm.h |  4 ++++
 src/nsterm.m | 26 +++++++++++++++++---------
 2 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/src/nsterm.h b/src/nsterm.h
index f027646123..ea92d8e893 100644
--- a/src/nsterm.h
+++ b/src/nsterm.h
@@ -1239,6 +1239,10 @@ #define NSAppKitVersionNumber10_7 1138
 #ifndef NSAppKitVersionNumber10_10
 #define NSAppKitVersionNumber10_10 1343
 #endif
+
+#ifndef NSAppKitVersionNumber10_14
+#define NSAppKitVersionNumber10_14 1671
+#endif
 #endif /* NS_IMPL_COCOA */
 
 
diff --git a/src/nsterm.m b/src/nsterm.m
index fd56094c28..b9ae512011 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -5954,6 +5954,9 @@ - (BOOL)fulfillService: (NSString *)name withArg: (NSString *)arg
 
 @implementation EmacsView
 
+#define USING_EMACSLAYER \
+  ([self wantsLayer] && [[self layer] isKindOfClass:[EmacsLayer class]])
+
 /* Needed to inform when window closed from lisp.  */
 - (void) setWindowClosing: (BOOL)closing
 {
@@ -7864,12 +7867,17 @@ - (instancetype)toggleToolbar: (id)sender
 #ifdef NS_IMPL_COCOA
 - (CALayer *)makeBackingLayer;
 {
-  EmacsLayer *l = [[EmacsLayer alloc]
-                    initWithColorSpace:[[[self window] colorSpace] CGColorSpace]];
-  [l setDelegate:(id)self];
-  [l setContentsScale:[[self window] backingScaleFactor]];
+  if (NSAppKitVersionNumber >= NSAppKitVersionNumber10_14)
+    {
+      EmacsLayer *l = [[EmacsLayer alloc]
+                        initWithColorSpace:[[[self window] colorSpace] CGColorSpace]];
+      [l setDelegate:(id)self];
+      [l setContentsScale:[[self window] backingScaleFactor]];
+
+      return l;
+    }
 
-  return l;
+  return [super makeBackingLayer];
 }
 
 
@@ -7877,7 +7885,7 @@ - (void)lockFocus
 {
   NSTRACE ("[EmacsView lockFocus]");
 
-  if ([self wantsLayer])
+  if (USING_EMACSLAYER)
     {
       CGContextRef context = [(EmacsLayer*)[self layer] getContext];
 
@@ -7897,7 +7905,7 @@ - (void)unlockFocus
 {
   NSTRACE ("[EmacsView unlockFocus]");
 
-  if ([self wantsLayer])
+  if (USING_EMACSLAYER)
     {
       [NSGraphicsContext setCurrentContext:nil];
       [self setNeedsDisplay:YES];
@@ -7917,7 +7925,7 @@ - (void)windowDidChangeBackingProperties:(NSNotification *)notification
 {
   NSTRACE ("EmacsView windowDidChangeBackingProperties:]");
 
-  if ([self wantsLayer])
+  if (USING_EMACSLAYER)
     {
       NSRect frame = [self frame];
       EmacsLayer *layer = (EmacsLayer *)[self layer];
@@ -7942,7 +7950,7 @@ - (void)copyRect:(NSRect)srcRect to:(NSPoint)dest
                                NSHeight (srcRect));
 
 #ifdef NS_IMPL_COCOA
-  if ([self wantsLayer])
+  if (USING_EMACSLAYER)
     {
       double scale = [[self window] backingScaleFactor];
       CGContextRef context = [(EmacsLayer *)[self layer] getContext];
-- 
2.35.1


  parent reply	other threads:[~2022-03-30 21:52 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-29 11:50 bug#54623: No scroll bars on macOS builds Angelo Graziosi
2022-03-29 12:44 ` Lars Ingebrigtsen
2022-03-29 19:53   ` Angelo Graziosi
2022-03-30  0:39     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-03-31 11:56     ` Lars Ingebrigtsen
2022-03-31 20:06       ` Alan Third
2022-03-31 22:31         ` Angelo Graziosi
2022-03-30 21:52   ` Alan Third [this message]
2022-03-31 10:45     ` Angelo Graziosi
2022-03-31 16:43       ` Alan Third
2022-03-31 22:27         ` Angelo Graziosi
2022-04-01 20:59           ` Alan Third
2022-04-01 22:37             ` Angelo Graziosi
2022-04-02  8:07               ` Alan Third
2022-04-02  9:42                 ` Angelo Graziosi
2022-04-02 11:00                   ` Angelo Graziosi
2022-04-03 13:36                     ` Alan Third
2022-04-03 20:00                       ` Angelo Graziosi
2022-04-04 20:30                         ` Angelo Graziosi
2022-04-08 21:47                           ` Alan Third
2022-04-09 10:20                             ` Angelo Graziosi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YkTROyslrLy0TUtd@idiocy.org \
    --to=alan@idiocy.org \
    --cc=54623@debbugs.gnu.org \
    --cc=angelo.g0@libero.it \
    --cc=larsi@gnus.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).