[yelp] [yelp-application] Automatically update bookmark titles and icons
- From: Shaun McCance <shaunm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [yelp] [yelp-application] Automatically update bookmark titles and icons
- Date: Mon, 10 May 2010 19:54:14 +0000 (UTC)
commit 549fd7559a68a6fe924be21b2b2e5feaf0f9d72a
Author: Shaun McCance <shaunm gnome org>
Date: Mon May 10 14:35:55 2010 -0500
[yelp-application] Automatically update bookmark titles and icons
I'm doing this on the "loaded" callback, assuming we already have an icon
and a title. This assumption actually doesn't hold for HTML documents,
which reset the title property after the page is loaded. I fear doing
this in too many property notification callbacks, because updating the
bookmarks causes callbacks into all windows. Maybe add a timeout from
view_loaded instead.
src/yelp-application.c | 45 ++++++++++++++++++++++++++++++++++++++++++++-
src/yelp-application.h | 5 +++++
src/yelp-window.c | 17 ++++++++++++++---
3 files changed, 63 insertions(+), 4 deletions(-)
---
diff --git a/src/yelp-application.c b/src/yelp-application.c
index b34a88c..8f4573d 100644
--- a/src/yelp-application.c
+++ b/src/yelp-application.c
@@ -595,7 +595,50 @@ yelp_application_add_bookmark (YelpApplication *app,
g_variant_builder_add (&builder, "(sss)", page_id, icon, title);
value = g_variant_builder_end (&builder);
g_settings_set_value (settings, "bookmarks", value);
- g_variant_unref (value);
+ g_signal_emit (app, signals[BOOKMARKS_CHANGED], 0, doc_uri);
+ }
+ }
+}
+
+void
+yelp_application_update_bookmarks (YelpApplication *app,
+ const gchar *doc_uri,
+ const gchar *page_id,
+ const gchar *icon,
+ const gchar *title)
+{
+ GSettings *settings;
+
+ settings = application_get_doc_settings (app, doc_uri);
+
+ if (settings) {
+ GVariantBuilder builder;
+ GVariantIter *iter;
+ gchar *this_id, *this_icon, *this_title;
+ gboolean updated = FALSE;
+ g_settings_get (settings, "bookmarks", "a(sss)", &iter);
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(sss)"));
+ while (g_variant_iter_loop (iter, "(&s&s&s)", &this_id, &this_icon, &this_title)) {
+ if (g_str_equal (page_id, this_id)) {
+ if (icon && !g_str_equal (icon, this_icon)) {
+ this_icon = (gchar *) icon;
+ updated = TRUE;
+ }
+ if (title && !g_str_equal (title, this_title)) {
+ this_title = (gchar *) title;
+ updated = TRUE;
+ }
+ if (!updated)
+ break;
+ }
+ g_variant_builder_add (&builder, "(sss)", this_id, this_icon, this_title);
+ }
+ g_variant_iter_free (iter);
+
+ if (updated) {
+ GVariant *value;
+ value = g_variant_builder_end (&builder);
+ g_settings_set_value (settings, "bookmarks", value);
g_signal_emit (app, signals[BOOKMARKS_CHANGED], 0, doc_uri);
}
}
diff --git a/src/yelp-application.h b/src/yelp-application.h
index cda9969..5a3726c 100644
--- a/src/yelp-application.h
+++ b/src/yelp-application.h
@@ -63,6 +63,11 @@ void yelp_application_add_bookmark (YelpApplication *app,
const gchar *page_id,
const gchar *icon,
const gchar *title);
+void yelp_application_update_bookmarks (YelpApplication *app,
+ const gchar *doc_uri,
+ const gchar *page_id,
+ const gchar *icon,
+ const gchar *title);
GVariant * yelp_application_get_bookmarks (YelpApplication *app,
const gchar *doc_uri);
void yelp_application_install_package (YelpApplication *app,
diff --git a/src/yelp-window.c b/src/yelp-window.c
index b0eb5b6..20bc172 100644
--- a/src/yelp-window.c
+++ b/src/yelp-window.c
@@ -1289,7 +1289,7 @@ view_loaded (YelpView *view,
GtkTreeIter iter;
gint flags;
YelpUri *uri;
- gchar *doc_uri, *page_id;
+ gchar *doc_uri, *page_id, *icon, *title;
GtkTreeModel *completion;
YelpWindowPrivate *priv = GET_PRIV (window);
YelpDocument *document = yelp_view_get_document (view);
@@ -1303,14 +1303,25 @@ view_loaded (YelpView *view,
gtk_list_store_set (priv->history, &iter, HISTORY_COL_FLAGS, flags, -1);
}
- g_object_get (view, "yelp-uri", &uri, NULL);
+ g_object_get (view,
+ "yelp-uri", &uri,
+ "page-id", &page_id,
+ "page-icon", &icon,
+ "page-title", &title,
+ NULL);
doc_uri = yelp_uri_get_document_uri (uri);
- g_object_get (priv->view, "page-id", &page_id, NULL);
gtk_list_store_set (priv->history, &iter,
HISTORY_COL_DOC, doc_uri,
HISTORY_COL_PAGE, page_id,
-1);
+ yelp_application_update_bookmarks (priv->application,
+ doc_uri,
+ page_id,
+ icon,
+ title);
g_free (page_id);
+ g_free (icon);
+ g_free (title);
completion = (GtkTreeModel *) g_hash_table_lookup (completions, doc_uri);
if (completion == NULL) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]