diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-09-17 18:06:30 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-09-17 18:06:30 +0000 |
commit | aad6b2d279fe31d3e69e285a687cd91e55ff8430 (patch) | |
tree | 02fa8197225349102c92746a70c2ad9ab2709f08 | |
parent | 76d31ff04bf5005c1405a18c1b5733c01d256786 (diff) | |
parent | cf3830704bb7b5760c0e28fc251e442772a9cb3f (diff) | |
download | gtk+-aad6b2d279fe31d3e69e285a687cd91e55ff8430.tar.gz |
Merge branch 'wip/otte/for-master' into 'master'
icontheme: Fix variable mixup leading to crashes
Closes #4269
See merge request GNOME/gtk!3967
-rw-r--r-- | gtk/gtkicontheme.c | 28 | ||||
-rw-r--r-- | testsuite/reftests/meson.build | 4 | ||||
-rw-r--r-- | testsuite/reftests/pixbuf-icon.ref.ui | 13 | ||||
-rw-r--r-- | testsuite/reftests/pixbuf-icon.ui | 16 | ||||
-rw-r--r-- | testsuite/reftests/texture-icon.ref.ui | 13 | ||||
-rw-r--r-- | testsuite/reftests/texture-icon.ui | 16 |
6 files changed, 76 insertions, 14 deletions
diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c index 1c2d83125c..154c9d8794 100644 --- a/gtk/gtkicontheme.c +++ b/gtk/gtkicontheme.c @@ -4109,7 +4109,7 @@ gtk_icon_theme_lookup_by_gicon (GtkIconTheme *self, GtkTextDirection direction, GtkIconLookupFlags flags) { - GtkIconPaintable *icon = NULL; + GtkIconPaintable *paintable = NULL; g_return_val_if_fail (GTK_IS_ICON_THEME (self), NULL); g_return_val_if_fail (G_IS_ICON (gicon), NULL); @@ -4123,42 +4123,42 @@ gtk_icon_theme_lookup_by_gicon (GtkIconTheme *self, if (GDK_IS_TEXTURE (gicon)) { - icon = icon_paintable_new (NULL, size, scale); - icon->texture = g_object_ref (GDK_TEXTURE (icon)); + paintable = icon_paintable_new (NULL, size, scale); + paintable->texture = g_object_ref (GDK_TEXTURE (gicon)); } else if (GDK_IS_PIXBUF (gicon)) { - icon = icon_paintable_new (NULL, size, scale); - icon->texture = gdk_texture_new_for_pixbuf (GDK_PIXBUF (icon)); + paintable = icon_paintable_new (NULL, size, scale); + paintable->texture = gdk_texture_new_for_pixbuf (GDK_PIXBUF (gicon)); } else if (G_IS_FILE_ICON (gicon)) { GFile *file = g_file_icon_get_file (G_FILE_ICON (gicon)); - icon = gtk_icon_paintable_new_for_file (file, size, scale); + paintable = gtk_icon_paintable_new_for_file (file, size, scale); } else if (G_IS_LOADABLE_ICON (gicon)) { - icon = icon_paintable_new (NULL, size, scale); - icon->loadable = G_LOADABLE_ICON (g_object_ref (gicon)); - icon->is_svg = FALSE; + paintable = icon_paintable_new (NULL, size, scale); + paintable->loadable = G_LOADABLE_ICON (g_object_ref (gicon)); + paintable->is_svg = FALSE; } else if (G_IS_THEMED_ICON (gicon)) { const char **names; names = (const char **) g_themed_icon_get_names (G_THEMED_ICON (gicon)); - icon = gtk_icon_theme_lookup_icon (self, names[0], &names[1], size, scale, direction, flags); + paintable = gtk_icon_theme_lookup_icon (self, names[0], &names[1], size, scale, direction, flags); } else { g_debug ("Unhandled GIcon type %s", G_OBJECT_TYPE_NAME (gicon)); - icon = icon_paintable_new ("image-missing", size, scale); - icon->filename = g_strdup (IMAGE_MISSING_RESOURCE_PATH); - icon->is_resource = TRUE; + paintable = icon_paintable_new ("image-missing", size, scale); + paintable->filename = g_strdup (IMAGE_MISSING_RESOURCE_PATH); + paintable->is_resource = TRUE; } - return icon; + return paintable; } /** diff --git a/testsuite/reftests/meson.build b/testsuite/reftests/meson.build index a7c295137e..5e4d5d08d7 100644 --- a/testsuite/reftests/meson.build +++ b/testsuite/reftests/meson.build @@ -370,6 +370,8 @@ testdata = [ 'partial-rounded-border.ui', 'picture-load-invalid-file.ui', 'picture-load-invalid-file.ref.ui', + 'pixbuf-icon.ref.ui', + 'pixbuf-icon.ui', 'pseudoclass-on-box.css', 'pseudoclass-on-box.ref.ui', 'pseudoclass-on-box.ui', @@ -423,6 +425,8 @@ testdata = [ 'symbolic-icon-translucent-color.css', 'symbolic-icon-translucent-color.ref.ui', 'symbolic-icon-translucent-color.ui', + 'texture-icon.ref.ui', + 'texture-icon.ui', 'textview-border-windows.css', 'textview-border-windows.ref.ui', 'textview-border-windows.ui', diff --git a/testsuite/reftests/pixbuf-icon.ref.ui b/testsuite/reftests/pixbuf-icon.ref.ui new file mode 100644 index 0000000000..5120db1573 --- /dev/null +++ b/testsuite/reftests/pixbuf-icon.ref.ui @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<interface> + <object class="GtkWindow" id="window1"> + <property name="width_request">10</property> + <property name="height_request">10</property> + <property name="decorated">0</property> + <child> + <object class="GtkImage"> + <property name="paintable">resource:///org/gtk/libgtk/icons/16x16/status/image-missing.png</property> + </object> + </child> + </object> +</interface> diff --git a/testsuite/reftests/pixbuf-icon.ui b/testsuite/reftests/pixbuf-icon.ui new file mode 100644 index 0000000000..86938256f8 --- /dev/null +++ b/testsuite/reftests/pixbuf-icon.ui @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<interface> + <object class="GtkCellRendererPixbuf" id="just-creating-a-pixbuf"> + <property name="pixbuf-expander-open">resource:///org/gtk/libgtk/icons/16x16/status/image-missing.png</property> + </object> + <object class="GtkWindow" id="window1"> + <property name="width_request">10</property> + <property name="height_request">10</property> + <property name="decorated">0</property> + <child> + <object class="GtkImage"> + <property name="gicon" bind-source="just-creating-a-pixbuf" bind-property="pixbuf-expander-open" bind-flags="sync-create"/> + </object> + </child> + </object> +</interface> diff --git a/testsuite/reftests/texture-icon.ref.ui b/testsuite/reftests/texture-icon.ref.ui new file mode 100644 index 0000000000..5120db1573 --- /dev/null +++ b/testsuite/reftests/texture-icon.ref.ui @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<interface> + <object class="GtkWindow" id="window1"> + <property name="width_request">10</property> + <property name="height_request">10</property> + <property name="decorated">0</property> + <child> + <object class="GtkImage"> + <property name="paintable">resource:///org/gtk/libgtk/icons/16x16/status/image-missing.png</property> + </object> + </child> + </object> +</interface> diff --git a/testsuite/reftests/texture-icon.ui b/testsuite/reftests/texture-icon.ui new file mode 100644 index 0000000000..99c6b9609f --- /dev/null +++ b/testsuite/reftests/texture-icon.ui @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<interface> + <object class="GtkImage" id="just-creating-a-texture"> + <property name="paintable">resource:///org/gtk/libgtk/icons/16x16/status/image-missing.png</property> + </object> + <object class="GtkWindow" id="window1"> + <property name="width_request">10</property> + <property name="height_request">10</property> + <property name="decorated">0</property> + <child> + <object class="GtkImage"> + <property name="gicon" bind-source="just-creating-a-texture" bind-property="paintable" bind-flags="sync-create"/> + </object> + </child> + </object> +</interface> |