On Sun, 21 Apr 2024 21:45:21 +0200 Stephen Berman wrote: > On Thu, 18 Apr 2024 15:37:58 +0200 Stephen Berman wrote: > >> On Thu, 18 Apr 2024 07:07:43 -0300 Mauro Aranda wrote: >> >>> Eli Zaretskii writes: >>> >>>>> Date: Mon, 8 Apr 2024 07:58:44 -0300 >>>>> Cc: 69942@debbugs.gnu.org >>>>> From: Mauro Aranda >>>>> >>>>> On 6/4/24 06:02, Eli Zaretskii wrote: >>>>>  >> From: Stephen Berman >>>>>  >> Cc: Eli Zaretskii , 69942@debbugs.gnu.org >>>>>  >> Date: Mon, 01 Apr 2024 17:21:27 +0200 >>>>>  >> >>>>>  >> On Mon, 25 Mar 2024 01:40:36 +0100 Stephen Berman >>>>> wrote: >>>>>  >> >>>>>  >>> Ok, I've gotten further with implementing disinguishing by faces >>>>>  >>> selected (chosen) and unselected radio buttons in radio-button-choice >>>>>  >>> widgets and check boxes in checklist widgets, see the attached patch. >>>>>  >>> Initial tests seem ok, but it definitely needs more testing. >>>>>  >> >>>>>  >> Any comments on this patch for using a widget-unselected face?  I have >>>>>  >> been detained from further testing this past week, but can now resume. >>>>>  > >>>>>  > Mauro, any further comments? >>>>> >>>>> Hi Eli and Stephen, >>>>> >>>>> Please forgive me, for the past 2 weeks I haven't been able to do any >>>>> computer stuff.  If it's OK, please give me until the weekend so I >>>>> can catch up with this and the other 2 bug reports by Stephen. >>>> >>>> Mauro, were you able to find time to look into this and the other 2 >>>> bugs? >>> >>> I have, just now.  The patch looks good to me.  It'll be great if >>> Stephen can add some documentation to the manual, so it stays updated. >>> If not, I can do that in a few days. >> >> Sure, I'll add documentation and post it here for approval before >> pushing the changes. > > I've encountered some problems with the patch. One is that it breaks > the display of all face attributes in the customize-face buffer. I've > determined the part of the patch that triggers this, though I haven't > yet figured out just why this bit of code breaks the display. Also, it > appears that the widget-unselected face does not completely replace > widget-inactive where it's intended to do so, but I need to do more > testing and debugging here to find out why. Until I've fixed these > issues the patch is not suitable for installing, so I'm also holding off > with the accompanying documentation. (But in preparation for the > documentation I looked more closely at the Widget manual and found > several typos and other issues, for which I opened bug#70502.) The breakage in displaying all face attributes in the customize-face buffer was caused by the invocation of `(widget-specify-selected child)' in widget-checklist-add-item in the cond-clause satisfying `(widget-inline-p type t)'. I still don't understand why it has this effect, and I have to admit that I don't understand what an inline widget is. But simply omitting the invocation of `(widget-specify-selected child)' at this point in the patch does avoid the customize-face breakage and I have not noticed any problems due to this omission. As for the problematic interaction between the widget-unselected and widget-inactive faces, this seems to have been due to my having copied most of the definition of widget-specify-unselected from that of widget-specify-inactive, and specifically, copying the overlay priority. In the attached patch, widget-specify-unselected now uses a lower overlay priority than the one used in widget-specify-inactive, and in my tests this yields the desired results: the labels of active checkboxes and radio-buttons have widget-unselected face but when these widgets are deactivated, the labels have widget-inactive face. Another change I've made in the attached patch is to have the default value of widget-unselected face inherit from widget-inactive instead of inheriting from shadow face, like widget-inactive does by default. This way, if a user customizes widget-inactive, that will also apply by default to widget-unselected, thus retaining the current default widget UI where the labels of checkboxes and radio-buttons have widget-inactive face. (Thus, the "desired results" in the preceding paragraph are only visible when widget-unselected face is customized to differ from widget-unselected face.) Finally, regarding documentation of widget-unselected face in the Widget manual, I think it would be helpful for the documentation to mention the use case that motivated introducing it (following Mauro's suggestion to use a face instead of a defcustom), namely, to visually distinguish the labels of unselected and inactive widgets. Here is what I suggest: @deffn Face widget-unselected Face used for unselected widgets. This face is also used on the text labels of radio-button and checkbox widgets. The default value inherits @code{widget-inactive} face. If you want to visually distinguish the labels of unselected active radio-button or checkbox widgets from the labels of unselected inactive widgets, customize this face to a non-default value. @end deffn Since the recent widget.texi changes that include documenting widget-inactive face have not yet been merged to master, I haven't included the propopsed documentaton of widget-unselected in the attached patch, but if approved, will of course add it after the merge. Steve Berman