summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew <aconz2@gmail.com>2021-04-19 22:39:26 -0500
committerAndrew <aconz2@gmail.com>2021-04-20 19:09:21 -0500
commitf91525140b7be1b6f0f0e8af5df160edbcb41f6d (patch)
treec159e5ec9f7890f61bef0827e1465e01f0b201bd
parent106a55d43eb3686bb0054136267274e0ef9338dd (diff)
downloadeog-f91525140b7be1b6f0f0e8af5df160edbcb41f6d.tar.gz
Add field `indices_changed`
When files are created or deleted, we can no longer rely on the previous index range of start_thumb to end_thumb to be correct. This flag gets set on creates and deletes and cleared when thumbs are updated. This is to address a crash caused by a rapid number of deletions which left us in a state where end_thumb < start_thumb. Fixes #189
-rw-r--r--src/eog-thumb-view.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/eog-thumb-view.c b/src/eog-thumb-view.c
index d75a084c..41bea76b 100644
--- a/src/eog-thumb-view.c
+++ b/src/eog-thumb-view.c
@@ -82,6 +82,8 @@ struct _EogThumbViewPrivate {
gint n_images;
gulong image_add_id;
gulong image_removed_id;
+
+ gboolean indices_changed;
};
G_DEFINE_TYPE_WITH_CODE (EogThumbView, eog_thumb_view, GTK_TYPE_ICON_VIEW,
@@ -137,6 +139,7 @@ eog_thumb_view_constructed (GObject *object)
thumbview->priv->start_thumb = 0;
thumbview->priv->end_thumb = 0;
thumbview->priv->menu = NULL;
+ thumbview->priv->indices_changed = FALSE;
g_signal_connect (G_OBJECT (thumbview), "parent-set",
G_CALLBACK (thumbview_on_parent_set_cb), NULL);
@@ -288,7 +291,8 @@ eog_thumb_view_update_visible_range (EogThumbView *thumbview,
old_start_thumb= priv->start_thumb;
old_end_thumb = priv->end_thumb;
- if (start_thumb == old_start_thumb &&
+ if (!priv->indices_changed &&
+ start_thumb == old_start_thumb &&
end_thumb == old_end_thumb) {
return;
}
@@ -303,6 +307,7 @@ eog_thumb_view_update_visible_range (EogThumbView *thumbview,
priv->start_thumb = start_thumb;
priv->end_thumb = end_thumb;
+ priv->indices_changed = FALSE;
}
static gboolean
@@ -681,6 +686,7 @@ eog_thumb_view_row_inserted_cb (GtkTreeModel *tree_model,
{
EogThumbViewPrivate *priv = view->priv;
+ priv->indices_changed = TRUE;
priv->n_images++;
eog_thumb_view_update_columns (view);
}
@@ -692,7 +698,7 @@ eog_thumb_view_row_deleted_cb (GtkTreeModel *tree_model,
{
EogThumbViewPrivate *priv = view->priv;
- priv->end_thumb--;
+ priv->indices_changed = TRUE;
priv->n_images--;
eog_thumb_view_update_columns (view);
}