Skip to content
Snippets Groups Projects
Commit 4676ea3d authored by Felix Riemann's avatar Felix Riemann
Browse files

Merge branch 'Ordissimo/eog-draw-thumbnails'

See !76
parents fe3f68d7 cba7fe58
Branches
Tags
No related merge requests found
......@@ -39,6 +39,13 @@ struct _EogListStorePrivate {
G_DEFINE_TYPE_WITH_PRIVATE (EogListStore, eog_list_store, GTK_TYPE_LIST_STORE);
enum {
SIGNAL_DRAW_THUMBNAIL,
SIGNAL_LAST
};
static gint signals[SIGNAL_LAST];
static void
foreach_monitors_free (gpointer data)
{
......@@ -85,6 +92,15 @@ eog_list_store_class_init (EogListStoreClass *klass)
object_class->dispose = eog_list_store_dispose;
object_class->finalize = eog_list_store_finalize;
signals[SIGNAL_DRAW_THUMBNAIL] =
g_signal_new ("draw-thumbnail",
EOG_TYPE_LIST_STORE,
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (EogListStoreClass, draw_thumbnail),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
}
/*
......@@ -289,6 +305,8 @@ eog_job_thumbnail_cb (EogJobThumbnail *job, gpointer data)
}
g_object_unref (file);
g_signal_emit (store, signals[SIGNAL_DRAW_THUMBNAIL], 0);
}
static void
......
......@@ -64,6 +64,8 @@ struct _EogListStore {
struct _EogListStoreClass {
GtkListStoreClass parent_class;
void (* draw_thumbnail) (EogListStore *store);
/* Padding for future expansion */
void (* _eog_reserved1) (void);
void (* _eog_reserved2) (void);
......
......@@ -82,6 +82,7 @@ struct _EogThumbViewPrivate {
gint n_images;
gulong image_add_id;
gulong image_removed_id;
gulong image_thumbnail_id;
gboolean indices_changed;
};
......@@ -179,6 +180,11 @@ eog_thumb_view_dispose (GObject *object)
priv->image_removed_id = 0;
}
if (model && priv->image_thumbnail_id) {
g_signal_handler_disconnect (model, priv->image_thumbnail_id);
priv->image_thumbnail_id = 0;
}
G_OBJECT_CLASS (eog_thumb_view_parent_class)->dispose (object);
}
......@@ -645,6 +651,7 @@ eog_thumb_view_init (EogThumbView *thumbview)
thumbview->priv->visible_range_changed_id = 0;
thumbview->priv->image_add_id = 0;
thumbview->priv->image_removed_id = 0;
thumbview->priv->image_thumbnail_id = 0;
}
/**
......@@ -703,6 +710,29 @@ eog_thumb_view_row_deleted_cb (GtkTreeModel *tree_model,
eog_thumb_view_update_columns (view);
}
static void
eog_thumb_view_row_changed_cb (GtkTreeModel *model,
GtkTreePath *path,
GtkTreeIter *iter,
gpointer data)
{
guint signal_id;
signal_id = GPOINTER_TO_UINT (data);
/* PREVENT GtkIconView "row-changed" handler to be reached, as it will
* perform a full invalidate and relayout of all items, See bug:
* https://bugzilla.gnome.org/show_bug.cgi?id=691448#c9 */
g_signal_stop_emission (model, signal_id, 0);
}
static void
eog_thumb_view_draw_thumbnail_cb (EogListStore *store,
EogThumbView *view)
{
gtk_widget_queue_draw (GTK_WIDGET(view));
return;
}
/**
* eog_thumb_view_set_model:
* @thumbview: A #EogThumbView.
......@@ -736,8 +766,18 @@ eog_thumb_view_set_model (EogThumbView *thumbview, EogListStore *store)
priv->image_removed_id);
}
if (priv->image_thumbnail_id != 0) {
g_signal_handler_disconnect (existing,
priv->image_thumbnail_id);
}
}
guint signal_id = g_signal_lookup ("row-changed", GTK_TYPE_TREE_MODEL);
g_signal_connect (GTK_TREE_MODEL (store), "row-changed",
G_CALLBACK (eog_thumb_view_row_changed_cb),
GUINT_TO_POINTER (signal_id));
priv->image_add_id = g_signal_connect (G_OBJECT (store), "row-inserted",
G_CALLBACK (eog_thumb_view_row_inserted_cb),
thumbview);
......@@ -745,6 +785,10 @@ eog_thumb_view_set_model (EogThumbView *thumbview, EogListStore *store)
"row-deleted",
G_CALLBACK (eog_thumb_view_row_deleted_cb),
thumbview);
priv->image_thumbnail_id = g_signal_connect (G_OBJECT (store),
"draw-thumbnail",
G_CALLBACK (eog_thumb_view_draw_thumbnail_cb),
thumbview);
thumbview->priv->start_thumb = thumbview->priv->end_thumb = 0;
thumbview->priv->n_images = eog_list_store_length (store);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment