[epiphany] ephy-history-service: add urls-visited signal
- From: Claudio Saavedra <csaavedra src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany] ephy-history-service: add urls-visited signal
- Date: Mon, 10 Sep 2012 05:14:53 +0000 (UTC)
commit 399c91bc8724e0ca26370d7552b841c0669be87d
Author: Claudio Saavedra <csaavedra igalia com>
Date: Fri Sep 7 10:13:24 2012 +0300
ephy-history-service: add urls-visited signal
This signal is emitted in bulks and is intended for clients that are
not interested in every single URL that is visited but only to know
that visits have happened.
https://bugzilla.gnome.org/show_bug.cgi?id=683550
lib/history/ephy-history-service-private.h | 1 +
lib/history/ephy-history-service.c | 53 ++++++++++++++++++++++++++++
2 files changed, 54 insertions(+), 0 deletions(-)
---
diff --git a/lib/history/ephy-history-service-private.h b/lib/history/ephy-history-service-private.h
index 4235e9d..7fb96bd 100644
--- a/lib/history/ephy-history-service-private.h
+++ b/lib/history/ephy-history-service-private.h
@@ -29,6 +29,7 @@ struct _EphyHistoryServicePrivate {
GAsyncQueue *queue;
gboolean scheduled_to_quit;
gboolean scheduled_to_commit;
+ int queue_urls_visited_id;
};
void ephy_history_service_schedule_commit (EphyHistoryService *self);
diff --git a/lib/history/ephy-history-service.c b/lib/history/ephy-history-service.c
index 3d7a2fd..bfbe348 100644
--- a/lib/history/ephy-history-service.c
+++ b/lib/history/ephy-history-service.c
@@ -50,6 +50,7 @@ typedef enum {
enum {
VISIT_URL,
+ URLS_VISITED,
CLEARED,
URL_TITLE_CHANGED,
URL_DELETED,
@@ -130,6 +131,36 @@ ephy_history_service_finalize (GObject *self)
G_OBJECT_CLASS (ephy_history_service_parent_class)->finalize (self);
}
+static void
+ephy_history_service_dispose (GObject *self)
+{
+ EphyHistoryServicePrivate *priv = EPHY_HISTORY_SERVICE (self)->priv;
+
+ if (priv->queue_urls_visited_id) {
+ g_source_remove (priv->queue_urls_visited_id);
+ priv->queue_urls_visited_id = 0;
+ }
+}
+
+static gboolean
+emit_urls_visited (EphyHistoryService *self)
+{
+ g_signal_emit (self, signals[URLS_VISITED], 0);
+ self->priv->queue_urls_visited_id = 0;
+
+ return FALSE;
+}
+
+static void
+ephy_history_service_queue_urls_visited (EphyHistoryService *self)
+{
+ if (self->priv->queue_urls_visited_id)
+ return;
+
+ self->priv->queue_urls_visited_id =
+ g_idle_add_full (G_PRIORITY_LOW, (GSourceFunc)emit_urls_visited, self, NULL);
+}
+
static gboolean
impl_visit_url (EphyHistoryService *self, const char *url, EphyHistoryPageVisitType visit_type)
{
@@ -142,6 +173,8 @@ impl_visit_url (EphyHistoryService *self, const char *url, EphyHistoryPageVisitT
visit, NULL, NULL, NULL);
ephy_history_page_visit_free (visit);
+ ephy_history_service_queue_urls_visited (self);
+
return FALSE;
}
@@ -151,6 +184,7 @@ ephy_history_service_class_init (EphyHistoryServiceClass *klass)
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
gobject_class->finalize = ephy_history_service_finalize;
+ gobject_class->dispose = ephy_history_service_dispose;
gobject_class->get_property = ephy_history_service_get_property;
gobject_class->set_property = ephy_history_service_set_property;
@@ -168,6 +202,25 @@ ephy_history_service_class_init (EphyHistoryServiceClass *klass)
G_TYPE_STRING | G_SIGNAL_TYPE_STATIC_SCOPE,
EPHY_TYPE_HISTORY_PAGE_VISIT_TYPE);
+/**
+ * EphyHistoryService::urls-visited:
+ * @service: the #EphyHistoryService that received the signal
+ *
+ * The ::urls-visited signal is emitted after one or more visits to
+ * URLS have taken place. This signal is intended for use-cases when
+ * precise information of the actual URLS visited is not important and
+ * there is only interest in the fact that there have been changes in
+ * the history. For more precise information, you can use ::visit-url
+ **/
+ signals[URLS_VISITED] =
+ g_signal_new ("urls-visited",
+ G_OBJECT_CLASS_TYPE (gobject_class),
+ G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
signals[CLEARED] =
g_signal_new ("cleared",
G_OBJECT_CLASS_TYPE (gobject_class),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]