notebook: avoid updating if no children

We were having a critical when a tab was searching and we closed the
window due to the view reporting it's not loading anymore when the
notebook already removed the slot.
This is due to the slot working independently to the notebook, and the
view reporting to stop loading on dispose, which is fine since the view
needs to report its new status to the window as well. However the window
also update the notebook when is the notebook that removes the slot
and therefore dispose the view.

To avoid that, check on the window if the notebook still contains
the slot or not, and update only in that case.
parent d616f6b2
......@@ -188,6 +188,24 @@ nautilus_notebook_init (NautilusNotebook *notebook)
#endif
}
gboolean
nautilus_notebook_contains_slot (NautilusNotebook *notebook,
NautilusWindowSlot *slot)
{
GList *children;
GList *l;
gboolean found = FALSE;
children = gtk_container_get_children (GTK_CONTAINER (notebook));
for (l = children; l != NULL && !found; l = l->next) {
found = l->data == slot;
}
g_list_free (children);
return found;
}
void
nautilus_notebook_sync_loading (NautilusNotebook *notebook,
NautilusWindowSlot *slot)
......
......@@ -79,6 +79,8 @@ gboolean nautilus_notebook_can_reorder_current_child_relative (NautilusNo
void nautilus_notebook_prev_page (NautilusNotebook *notebook);
void nautilus_notebook_next_page (NautilusNotebook *notebook);
gboolean nautilus_notebook_contains_slot (NautilusNotebook *notebook,
NautilusWindowSlot *slot);
G_END_DECLS
......
......@@ -795,7 +795,10 @@ nautilus_window_sync_allow_stop (NautilusWindow *window,
update_cursor (window);
}
nautilus_notebook_sync_loading (NAUTILUS_NOTEBOOK (window->priv->notebook), slot);
/* Avoid updating the notebook if we are calling on dispose or
* on removal of a notebook tab */
if (nautilus_notebook_contains_slot (NAUTILUS_NOTEBOOK (window->priv->notebook), slot))
nautilus_notebook_sync_loading (NAUTILUS_NOTEBOOK (window->priv->notebook), slot);
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment