summaryrefslogtreecommitdiff
path: root/gtk/gtkwindow.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkwindow.c')
-rw-r--r--gtk/gtkwindow.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index a61ca77414..58448226de 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -1020,11 +1020,14 @@ gtk_window_set_modal (GtkWindow *window,
/**
* gtk_window_list_toplevels:
*
- * Returns a list of all existing toplevel windows. Each widget
- * in the list has a reference added to it; to free the
- * list, first unref each widget in the list, then free the list.
+ * Returns a list of all existing toplevel windows. The widgets
+ * in the list are not individually referenced. If you want
+ * to iterate through the list and perform actions involving
+ * callbacks that might destroy the widgets, you MUST call
+ * g_list_foreach (result, (GFunc)g_object_ref, NULL) first, and
+ * then unref all the widgets afterwards.
*
- * Return value: list of referenced toplevel widgets
+ * Return value: list of toplevel widgets
**/
GList*
gtk_window_list_toplevels (void)
@@ -1033,7 +1036,7 @@ gtk_window_list_toplevels (void)
GSList *slist;
for (slist = toplevel_list; slist; slist = slist->next)
- list = g_list_prepend (list, gtk_widget_ref (slist->data));
+ list = g_list_prepend (list, slist->data);
return list;
}
@@ -2286,6 +2289,7 @@ gtk_window_read_rcfiles (GtkWidget *widget,
_gtk_icon_set_invalidate_caches ();
toplevels = gtk_window_list_toplevels ();
+ g_list_foreach (toplevels, (GFunc)g_object_ref, NULL);
for (list = toplevels; list; list = list->next)
{