Fixed bug when destroying child widgets.

This commit is contained in:
Erick Pérez Castellanos
2012-08-23 09:43:57 -04:00
parent a9da2aa552
commit 009e65cdd3
2 changed files with 26 additions and 7 deletions
+15 -6
View File
@@ -759,15 +759,21 @@ gcal_month_view_remove (GtkContainer *container,
child = (GcalViewChild*) l->data; child = (GcalViewChild*) l->data;
if (child->widget == widget) if (child->widget == widget)
{ {
gboolean was_visible;
was_visible = gtk_widget_get_visible (widget);
gtk_widget_unparent (widget);
priv->days[i] = g_list_remove (priv->days[i], child); priv->days[i] = g_list_remove (priv->days[i], child);
g_free (child); g_free (child);
i = 36; if (was_visible)
break; gtk_widget_queue_resize (GTK_WIDGET (container));
return;
} }
} }
} }
gtk_widget_unparent (widget);
} }
static void static void
@@ -784,11 +790,15 @@ gcal_month_view_forall (GtkContainer *container,
for (i = 0; i < 35; i++) for (i = 0; i < 35; i++)
{ {
for (l = priv->days[i]; l != NULL; l = l->next) l = priv->days[i];
while (l)
{ {
GcalViewChild *child; GcalViewChild *child;
child = (GcalViewChild*) l->data; child = (GcalViewChild*) l->data;
l = l->next;
(* callback) (child->widget, callback_data); (* callback) (child->widget, callback_data);
} }
} }
@@ -1346,8 +1356,7 @@ gcal_month_view_remove_by_uuid (GcalView *view,
if (g_strcmp0 (uuid, widget_uuid) == 0) if (g_strcmp0 (uuid, widget_uuid) == 0)
{ {
gtk_widget_destroy (child->widget); gtk_widget_destroy (child->widget);
i = 36; return;
break;
} }
} }
} }
+11 -1
View File
@@ -900,6 +900,7 @@ gcal_week_view_remove (GtkContainer *container,
GList *l; GList *l;
icaltimetype *date; icaltimetype *date;
gint day; gint day;
gboolean was_visible;
g_return_if_fail (GCAL_IS_WEEK_VIEW (container)); g_return_if_fail (GCAL_IS_WEEK_VIEW (container));
g_return_if_fail (gtk_widget_get_parent (widget) == GTK_WIDGET (container)); g_return_if_fail (gtk_widget_get_parent (widget) == GTK_WIDGET (container));
@@ -921,8 +922,13 @@ gcal_week_view_remove (GtkContainer *container,
} }
} }
was_visible = gtk_widget_get_visible (widget);
gtk_widget_unparent (widget); gtk_widget_unparent (widget);
if (was_visible)
gtk_widget_queue_resize (GTK_WIDGET (container));
g_free (date); g_free (date);
} }
@@ -940,11 +946,15 @@ gcal_week_view_forall (GtkContainer *container,
for (i = 0; i < 7; i++) for (i = 0; i < 7; i++)
{ {
for (l = priv->days[i]; l != NULL; l = l->next) l = priv->days[i];
while (l)
{ {
GcalViewChild *child; GcalViewChild *child;
child = (GcalViewChild*) l->data; child = (GcalViewChild*) l->data;
l = l->next;
(* callback) (child->widget, callback_data); (* callback) (child->widget, callback_data);
} }
} }