GtkWindow: Tidy up after icon became a cairo surface
authorKjell Ahlstedt <kjellahlstedt@gmail.com>
Fri, 3 Nov 2017 19:05:28 +0000 (20:05 +0100)
committerKjell Ahlstedt <kjellahlstedt@gmail.com>
Fri, 3 Nov 2017 19:05:28 +0000 (20:05 +0100)
Use g_value_set/get_boxed() in gtk_window_get/set_property(), case PROP_ICON.
icon_from_list() shall always add a reference to the returned icon.
gtk_window_set_icon() must accept icon != NULL.

https://bugzilla.gnome.org/show_bug.cgi?id=789870

gtk/gtkwindow.c

index e79039926d88a88c8db4b33503984f0a321b0f52..574ac9f55451020109f75b16c5d63bf9f1cce4dd 100644 (file)
@@ -2008,7 +2008,7 @@ gtk_window_set_property (GObject      *object,
       break;
     case PROP_ICON:
       gtk_window_set_icon (window,
-                           g_value_get_object (value));
+                           g_value_get_boxed (value));
       break;
     case PROP_ICON_NAME:
       gtk_window_set_icon_name (window, g_value_get_string (value));
@@ -2118,7 +2118,7 @@ gtk_window_get_property (GObject      *object,
       g_value_set_boolean (value, priv->destroy_with_parent);
       break;
     case PROP_ICON:
-      g_value_set_object (value, gtk_window_get_icon (window));
+      g_value_set_boxed (value, gtk_window_get_icon (window));
       break;
     case PROP_ICON_NAME:
       g_value_set_string (value, gtk_window_get_icon_name (window));
@@ -4574,7 +4574,7 @@ icon_from_list (GtkWindow *window,
     }
 
   if (best == NULL && list != NULL)
-    best = (cairo_surface_t *)list->data;
+    best = cairo_surface_reference ((cairo_surface_t *)list->data);
 
   
   if (best)
@@ -4781,7 +4781,7 @@ gtk_window_set_icon (GtkWindow  *window,
   GList *list;
   
   g_return_if_fail (GTK_IS_WINDOW (window));
-  g_return_if_fail (icon == NULL);
+  g_return_if_fail (icon == NULL || cairo_surface_get_type (icon) == CAIRO_SURFACE_TYPE_IMAGE);
 
   list = NULL;