Fixed bug when destroying child widgets.
This commit is contained in:
+15
-6
@@ -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
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user