Subject: Re: bug#50424: 27.2; Tab bar button mouse face not clearing entirely

From: Eli Zaretskii <[email-masked]>
Date: Wed, 08 Sep 2021 09:05:50 +0300

> Date: Wed, 8 Sep 2021 00:13:15 +0100
> From: Alan Third <[email-masked]>
> Cc: Po Lu <[email-masked]>, Juri Linkov <[email-masked]>,
> 	[email-masked]
> 
> On Tue, Sep 07, 2021 at 01:41:38PM +0300, Eli Zaretskii wrote:
> > 
> > I hope the information here will allow Juri and people who really
> > understand the meaning of an image margin and relief (Alan?) fix the
> > rest of the problem.
> 
> AFAIK the margin and relief are entirely handled by the term code and
> don't really have anything to do with the image itself. I expect
> that's why this is an OS specific problem.

The code to deal with that is identical in xterm.c and w32term.c.

Can you perhaps help us understand the purpose and semantics of the
delicate dance in the xdisp.c code I posted regarding images on the
tool-bar buttons?  AFAIU, the xterm/w32term code was written to
reflect that, and the tab-bar code is simply a copy of the tool-bar
code, except that the image spec is defined entirely in Lisp, instead
of being dynamically redefined on the fly by the C code in the display
engine.  So we need to understand the meaning of the margins and the
relief settings and their relation to the button being "selected" as
well as to the value of auto-raise-tool-bar-buttons, in order to do in
Lisp the same thing.  Because xterm/w32term rely on this logic to
clear the area when the mouse pointer moves off the button.

> This actually looks slightly like a bug we have with normal images on
> the NS port, where if an image is replaced with a slightly smaller one
> part of the original image *may* not be cleared. I've never managed to
> work out why it happens.

It's similar, yes.  But in the case in point the code which clears the
area is working well for tool-bar buttons, and we don't change the
image dimensions for the tab bar buttons.

Thanks.