Subject: bug#64440: 30.0.50; [PATCH] Highlight on non toolkit menu bar items

From: Eli Zaretskii <[email-masked]>
Date: Mon, 11 Sep 2023 22:12:47 +0300

> From: Manuel Giraud <[email-masked]>
> Cc: [email-masked],  [email-masked],  [email-masked]
> Date: Mon, 11 Sep 2023 20:56:37 +0200
> 
> Eli Zaretskii <[email-masked]> writes:
> 
> [...]
> 
> > Thanks.  That's what I imagined we have there.  So I guess considering
> > that a string ends where is SCHARS end is reasonable.
> >
> > But note that the above means you could also detect where each item
> > ends by looking for the glyph whose string position is -1.  So maybe
> > add an assertion there that the glyph after the last character has its
> > position as -1, in case we could have some complications there with
> > double-width characters or something.
> 
> What do you think of this:
> 
> +  /* Convert to pixels bounds.  */
> +  row = MATRIX_ROW (w->current_matrix, *vpos);
> +  *x_start = 0;
> +  for (i = 0; i < *h_start; ++i)
> +    *x_start += row->glyphs[TEXT_AREA][i].pixel_width;
> +
> +  *x_end = *x_start;
> +  for (i = *h_start; CHARPOS (row->glyphs[TEXT_AREA][i]) != -1; ++i)
> +    *x_end += row->glyphs[TEXT_AREA][i].pixel_width;

That's OK, but I think we should also make sure 'i' never exceeds the
value row->used[TEXT_AREA] - 1.  This is only important for the last
item, but still.

And I would also add an assertion that row->reversed_p is false.  We
don't currently support R2L menu bars, but if we ever do, the above
loops should go backwards in such glyph rows.