[nautilus] notebook: avoid updating if no children
- From: Carlos Soriano Sánchez <csoriano src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus] notebook: avoid updating if no children
- Date: Thu, 3 Mar 2016 12:16:52 +0000 (UTC)
commit 0d37c7bb0b84da772d20a4e7fca94dd8dd2139fa
Author: Carlos Soriano <csoriano gnome org>
Date: Thu Mar 3 13:13:25 2016 +0100
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.
src/nautilus-notebook.c | 18 ++++++++++++++++++
src/nautilus-notebook.h | 2 ++
src/nautilus-window.c | 5 ++++-
3 files changed, 24 insertions(+), 1 deletions(-)
---
diff --git a/src/nautilus-notebook.c b/src/nautilus-notebook.c
index 7d6ca52..db66d90 100644
--- a/src/nautilus-notebook.c
+++ b/src/nautilus-notebook.c
@@ -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)
diff --git a/src/nautilus-notebook.h b/src/nautilus-notebook.h
index eade6f2..d810686 100644
--- a/src/nautilus-notebook.h
+++ b/src/nautilus-notebook.h
@@ -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
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index e1753f6..4c91709 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -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);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]