Subject: bug#75018: 30.0.93; Dired icon missing in tool-bar

From: john muhl <[email-masked]>
Date: Sun, 22 Dec 2024 13:45:02 -0600

Eli Zaretskii <[email-masked]> writes:

>> Date: Sun, 22 Dec 2024 09:32:23 -0600
>> From: "john muhl" <[email-masked]>
>> Cc: [email-masked]
>> 
>> On Sun, Dec 22, 2024, at 12:43 AM, Eli Zaretskii wrote:
>> >> From: john muhl <[email-masked]>
>> >> Date: Sat, 21 Dec 2024 18:19:57 -0600
>> >> 
>> >> The usual Dired icon is missing and instead shows up as a couple
>> >> of tiny triangles in the normal state and as a very generic file
>> >> icon on hover. Happens on emacs-30 and master and X11 and PGTK
>> >> builds. Lucid and Motif builds are unaffected.
>> >
>> > Where do the tool-bar icons come from in that build?  They are not
>> > from the Emacs's etc/images/ directory, AFAICT.
>> 
>> They are the stock GTK icons. On this system they are located in
>> /usr/share/icons/. The option x-gtk-stock-map is responsible for
>> the mapping between Emacs' etc/images/* and the system's
>> icons. The attached patch fixes it here.
>
> Can you explain the rationale for the patch and how it solves the
> problem?

Honestly I don’t understand how x-gtk-stock-map does its thing. I
was just trying to get an icon to appear.

My first idea was to remove mapping for etc/images/diropen hoping
it would fall back on the included image but that didn’t work. In
fact setting x-g-s-m to nil (PROBLEMS suggests this should cause
Emacs’ included icons to be used) causes all the icons to fail to
be found and end up looking the same way as the broken Dired icon.

>> > Can you post the Dired icon file from where your build takes them?
>> 
>> Unfortunately I can't find those particular icons among the ~7000
>> icons in the /usr/share/icons/ directory but they're probably in
>> there somewhere.
>
> If you run Emacs under GDB with a breakpoint in lookup_image, you
> should see all the tool-bar icons being loaded during startup.  You
> can use the following GDB commands for the breakpoint, to see when the
> icon you are interested in gets loaded:
>
>   pp spec
>
> This should show you the full absolute file name of the icon file
> Emacs is loading.
>
> The command "pp" is defined in src/.gdbinit, so if you don't start GDB
> from that directory, you will need to say
>
>   (gdb) source /path/to/emacs/src/.gdbinit
>
> before running Emacs, to be able to use this useful command.

With the breakpoint in place I see:

  (image :type xpm
         :file "/home/jm/tmp/emacs-30/etc/images/diropen.xpm"
         :scale default)

All the others icons similarly claim to be loaded from an XMP file
in the Emacs source directory. Of course those XMP files look
nothing like those that actually appear in the tool-bar. The icons
that are actually used are all somewhere under
/usr/share/icons/Adwaita/symbolic/.

>> > Also, is this problem new in the last pretest, or did previous
>> > pretests behave the same?
>> 
>> I tried 30.0.90 and 29.4 and they too are using the incorrect
>> icons. I suspect upgrading to Fedora 41 is what causes the
>> issue.
>
> Yes, that's usually the first suspect in such cases.
>
> Thanks.

Actually now that I’m paying attention I see missing icons all
over the place. This message-mode buffer is missing icons for
“File this draft message and exit” and “Preview”. Info mode is
missing “Goto previous node”, “Goto next node” and “Go up the info
tree”. A VC-log buffer is missing another handful...