GNU bug report logs - #63187
30.0.50; Tail of longer lines painted after end of nearby lines on macOS

Previous Next

Package: emacs;

Reported by: Aaron Jensen <aaronjensen <at> gmail.com>

Date: Sun, 30 Apr 2023 10:11:01 UTC

Severity: normal

Found in version 30.0.50

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Aaron Jensen <aaronjensen <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: luangruo <at> yahoo.com, alan <at> idiocy.org, 63187 <at> debbugs.gnu.org
Subject: bug#63187: 30.0.50; Tail of longer lines painted after end of nearby lines on macOS
Date: Mon, 1 May 2023 10:06:51 -0400
On Mon, May 1, 2023 at 9:55 AM Aaron Jensen <aaronjensen <at> gmail.com> wrote:
>
> On Mon, May 1, 2023 at 9:51 AM Eli Zaretskii <eliz <at> gnu.org> wrote:
> >
> > > From: Aaron Jensen <aaronjensen <at> gmail.com>
> > > Date: Mon, 1 May 2023 09:47:50 -0400
> > > Cc: Po Lu <luangruo <at> yahoo.com>, Alan Third <alan <at> idiocy.org>, 63187 <at> debbugs.gnu.org
> > >
> > >   {
> > >     NSRect srcRect = NSMakeRect (x, from_y, width, height);
> > >     NSPoint dest = NSMakePoint (x, to_y);
> > >     EmacsView *view = FRAME_NS_VIEW (f);
> > >
> > >     [view copyRect:srcRect to:dest];
> > > #ifdef NS_IMPL_COCOA
> > >     [view setNeedsDisplayInRect:srcRect];
> > > #endif
> > >   }
> > >
> > > Why is the source being marked for redisplay? I would expect the
> > > destination to be marked as such, or am I missing something?
> >
> > IMO, both should be marked for redisplay.  Or maybe I don't understand
> > the significance of marking a rectangle for redisplay.
>
> For reference, this is in `ns_scroll_run'. Only the destination is
> changed, right? I imagine the source would be effectively marked when
> it's copied into, so marking the source in this code would be
> redundant, unless I'm missing something?

Also, the previous version of `ns_flush_display' was this:

static void
ns_flush_display (struct frame *f)
/* Force the frame to redisplay.  If areas have previously been marked
   dirty by setNeedsDisplayInRect (in ns_clip_to_rect), then this will call
   draw_rect: which will "expose" those areas.  */
{
  block_input ();
  [FRAME_NS_VIEW (f) displayIfNeeded];
  unblock_input ();
}

The displayIfNeeded has been removed and is now ultimately replaced
with stuff I don't understand. After looking at this code, I'm now
wondering if my problem has to do with the fact that I use child
frames for things like completions. I have recollection of the
painting artifacts appearing under areas that child frames are
temporarily covering. Is it possible that somehow those areas aren't
being properly repainted/marked for repainting?




This bug report was last modified 1 year and 364 days ago.

Previous Next


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