QGtk3Theme: fix QGtk3Interface::fileIcon
authorDebian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>
Sun, 22 Sep 2024 19:08:16 +0000 (22:08 +0300)
committerDmitry Shachnev <mitya57@debian.org>
Sun, 22 Sep 2024 19:08:16 +0000 (22:08 +0300)
commitc6aa2bbf40c3b437bafc55329d942de2b97aab91
tree82e3e582e1065c4237c316d82796e291016cb668
parentc4116176708c9ccce423c77b5c5a974027db247e
QGtk3Theme: fix QGtk3Interface::fileIcon

Origin: upstream, https://code.qt.io/cgit/qt/qtbase.git/commit/?id=277d77029d7fe8f4
Last-Update: 2024-08-02

By failing to set the G_FILE_ATTRIBUTE_STANDARD_ICON attribute, the
"icon" returned by g_file_info_get_icon was always null and a
GLib-GIO-CRITICAL warning was output to the console (at least since glib
2.76.0)[1].

After adding the necessary attribute, the code was crashing, because now
a valid icon was returned, however the icon should not be freed[2],
which is why I removed the "g_object_unref(icon)".

Now it was no longer crashing, but the size of the icons was off. It was
passing GTK_ICON_SIZE_BUTTON (4) to gtk_icon_theme_lookup_by_gicon where
a size in pixels was expected. I chose 16 because that's the pixel size
associated with GTK_ICON_SIZE_BUTTON[3].

Finally I noticed the returned icons had the wrong color. It seems that
a GdkPixbuf uses RGBA8888 format[4]. Adding an explicit conversion to
ARGB32 made the icons look correct for me.

[1] https://gitlab.gnome.org/GNOME/glib/-/commit/ed8e86a7d41a0900d8fa57edc64264d04cf8135b
[2] https://docs.gtk.org/gio/method.FileInfo.get_icon.html
[3] https://docs.gtk.org/gtk3/enum.IconSize.html#button
[4] https://docs.gtk.org/gdk-pixbuf/class.Pixbuf.html#image-data

Gbp-Pq: Name fix_qgtk3interface_fileicon.patch
src/plugins/platformthemes/gtk3/qgtk3interface.cpp