diff options
author | Shaun McCance <shaunm@src.gnome.org> | 2004-01-12 00:00:44 +0000 |
---|---|---|
committer | Shaun McCance <shaunm@src.gnome.org> | 2004-01-12 00:00:44 +0000 |
commit | e62cb3cbef10db994d35eb337baa3ce2bf38ae65 (patch) | |
tree | 7a1abb736c33fb54786fa6cab7530b894205ebb0 | |
parent | 063e2b0944943d092578b7338c05572ae1da4abf (diff) | |
download | yelp-e62cb3cbef10db994d35eb337baa3ce2bf38ae65.tar.gz |
- ... in which I change YelpURI around. Again.
* src/test-pager.c:
* src/yelp-base.c:
* src/yelp-db-pager.c:
* src/yelp-db-pager.h:
* src/yelp-history.c:
* src/yelp-history.h:
* src/yelp-html-gtkhtml2.c:
* src/yelp-html.h:
* src/yelp-pager.c:
* src/yelp-pager.h:
* src/yelp-toc-pager.c:
* src/yelp-uri.c:
* src/yelp-uri.h:
* src/yelp-window.c:
* src/yelp-window.h:
- ... in which I change YelpURI around. Again.
-rw-r--r-- | ChangeLog | 19 | ||||
-rw-r--r-- | src/test-pager.c | 7 | ||||
-rw-r--r-- | src/yelp-base.c | 9 | ||||
-rw-r--r-- | src/yelp-db-pager.c | 27 | ||||
-rw-r--r-- | src/yelp-db-pager.h | 2 | ||||
-rw-r--r-- | src/yelp-history.c | 68 | ||||
-rw-r--r-- | src/yelp-history.h | 10 | ||||
-rw-r--r-- | src/yelp-html-gtkhtml2.c | 26 | ||||
-rw-r--r-- | src/yelp-html.h | 4 | ||||
-rw-r--r-- | src/yelp-pager.c | 22 | ||||
-rw-r--r-- | src/yelp-pager.h | 10 | ||||
-rw-r--r-- | src/yelp-toc-pager.c | 20 | ||||
-rw-r--r-- | src/yelp-uri.c | 162 | ||||
-rw-r--r-- | src/yelp-uri.h | 32 | ||||
-rw-r--r-- | src/yelp-window.c | 85 | ||||
-rw-r--r-- | src/yelp-window.h | 4 |
16 files changed, 297 insertions, 210 deletions
@@ -1,3 +1,22 @@ +2004-01-11 Shaun McCance <shaunm@gnome.org> + + * src/test-pager.c: + * src/yelp-base.c: + * src/yelp-db-pager.c: + * src/yelp-db-pager.h: + * src/yelp-history.c: + * src/yelp-history.h: + * src/yelp-html-gtkhtml2.c: + * src/yelp-html.h: + * src/yelp-pager.c: + * src/yelp-pager.h: + * src/yelp-toc-pager.c: + * src/yelp-uri.c: + * src/yelp-uri.h: + * src/yelp-window.c: + * src/yelp-window.h: + - ... in which I change YelpURI around. Again. + 2004-01-10 Shaun McCance <shaunm@gnome.org> * src/.cvsignore: Added test-man-parser to .cvsignore diff --git a/src/test-pager.c b/src/test-pager.c index b52019b9..a6270708 100644 --- a/src/test-pager.c +++ b/src/test-pager.c @@ -42,8 +42,8 @@ static void pager_error_cb (YelpPager *pager); gint main (gint argc, gchar **argv) { - GnomeVFSURI *uri; - YelpPager *pager; + YelpURI *uri; + YelpPager *pager; if (argc < 2) { return 1; @@ -54,9 +54,8 @@ main (gint argc, gchar **argv) GNOME_PROGRAM_STANDARD_PROPERTIES, NULL); gnome_vfs_init (); - - yelp_theme_init (); yelp_toc_pager_init (); + yelp_theme_init (); uri = yelp_uri_new (argv[1]); diff --git a/src/yelp-base.c b/src/yelp-base.c index 39e0c017..ad495cad 100644 --- a/src/yelp-base.c +++ b/src/yelp-base.c @@ -72,7 +72,7 @@ impl_Yelp_getWindows (PortableServer_Servant servant, GNOME_Yelp_WindowList *list; gint len, i; GSList *node; - GnomeVFSURI *uri; + YelpURI *uri; base = YELP_BASE (bonobo_object (servant)); priv = base->priv; @@ -89,7 +89,8 @@ impl_Yelp_getWindows (PortableServer_Servant servant, gchar *str_uri; uri = yelp_window_get_current_uri (YELP_WINDOW (node->data)); - str_uri = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_NONE); + str_uri = gnome_vfs_uri_to_string (uri->uri, + GNOME_VFS_URI_HIDE_NONE); list->_buffer[i] = CORBA_string_dup (str_uri); g_free (str_uri); } @@ -179,7 +180,7 @@ GtkWidget * yelp_base_new_window (YelpBase *base, const gchar *str_uri) { YelpBasePriv *priv; - GnomeVFSURI *uri; + YelpURI *uri; GtkWidget *window; g_return_val_if_fail (YELP_IS_BASE (base), NULL); @@ -205,7 +206,7 @@ yelp_base_new_window (YelpBase *base, const gchar *str_uri) uri = yelp_uri_new (str_uri); else { uri = yelp_pager_get_uri (YELP_PAGER (yelp_toc_pager_get ())); - gnome_vfs_uri_ref (uri); + yelp_uri_ref (uri); } yelp_window_open_uri (YELP_WINDOW (window), uri); diff --git a/src/yelp-db-pager.c b/src/yelp-db-pager.c index cdd15003..136297ee 100644 --- a/src/yelp-db-pager.c +++ b/src/yelp-db-pager.c @@ -81,7 +81,7 @@ void db_pager_finish (YelpPager *pager); gboolean db_pager_process (YelpPager *pager); gchar * db_pager_resolve_uri (YelpPager *pager, - GnomeVFSURI *uri); + YelpURI *uri); const GtkTreeModel * db_pager_get_sections (YelpPager *pager); static void walker_walk_xml (DBWalker *walker); @@ -178,7 +178,7 @@ db_pager_dispose (GObject *object) /******************************************************************************/ YelpPager * -yelp_db_pager_new (GnomeVFSURI *uri) +yelp_db_pager_new (YelpURI *uri) { YelpDBPager *pager; @@ -197,11 +197,11 @@ yelp_db_pager_new (GnomeVFSURI *uri) gboolean db_pager_process (YelpPager *pager) { - GnomeVFSURI *uri = yelp_pager_get_uri (pager); - gchar *path; - DBWalker *walker; - xmlChar *id; - GError *error = NULL; + YelpURI *uri = yelp_pager_get_uri (pager); + gchar *path; + DBWalker *walker; + xmlChar *id; + GError *error = NULL; xmlDocPtr doc; xmlParserCtxtPtr ctxt; @@ -219,7 +219,7 @@ db_pager_process (YelpPager *pager) g_return_val_if_fail (pager != NULL, FALSE); g_return_val_if_fail (YELP_IS_DB_PAGER (pager), FALSE); - path = gnome_vfs_uri_to_string (uri, + path = gnome_vfs_uri_to_string (uri->uri, GNOME_VFS_URI_HIDE_USER_NAME | GNOME_VFS_URI_HIDE_PASSWORD | GNOME_VFS_URI_HIDE_HOST_NAME | @@ -242,7 +242,8 @@ db_pager_process (YelpPager *pager) XML_PARSE_NONET ); if (doc == NULL) { - gchar *str_uri = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_NONE); + gchar *str_uri = gnome_vfs_uri_to_string (uri->uri, + GNOME_VFS_URI_HIDE_NONE); yelp_set_error (&error, YELP_ERROR_NO_DOC); yelp_pager_error (pager, error); @@ -273,8 +274,8 @@ db_pager_process (YelpPager *pager) while (gtk_events_pending ()) gtk_main_iteration (); - doc_name = gnome_vfs_uri_extract_short_name (uri); - doc_path = gnome_vfs_uri_extract_dirname (uri); + doc_name = gnome_vfs_uri_extract_short_name (uri->uri); + doc_path = gnome_vfs_uri_extract_dirname (uri->uri); p_doc_name = g_strconcat("\"", doc_name, "\"", NULL); p_doc_path = g_strconcat("\"file://", doc_path, "/\"", NULL); @@ -358,7 +359,7 @@ db_pager_finish (YelpPager *pager) } gchar * -db_pager_resolve_uri (YelpPager *pager, GnomeVFSURI *uri) +db_pager_resolve_uri (YelpPager *pager, YelpURI *uri) { YelpDBPager *db_pager; const gchar *frag_id; @@ -369,7 +370,7 @@ db_pager_resolve_uri (YelpPager *pager, GnomeVFSURI *uri) db_pager = YELP_DB_PAGER (pager); - frag_id = gnome_vfs_uri_get_fragment_identifier (uri); + frag_id = gnome_vfs_uri_get_fragment_identifier (uri->uri); if (frag_id) page_id = g_hash_table_lookup (db_pager->priv->frags_hash, diff --git a/src/yelp-db-pager.h b/src/yelp-db-pager.h index 47588cf5..000fd0fe 100644 --- a/src/yelp-db-pager.h +++ b/src/yelp-db-pager.h @@ -49,6 +49,6 @@ struct _YelpDBPagerClass { }; GType yelp_db_pager_get_type (void); -YelpPager * yelp_db_pager_new (GnomeVFSURI *uri); +YelpPager * yelp_db_pager_new (YelpURI *uri); #endif /* __YELP_DB_PAGER_H__ */ diff --git a/src/yelp-history.c b/src/yelp-history.c index 34ae4bd5..127304c0 100644 --- a/src/yelp-history.c +++ b/src/yelp-history.c @@ -1,4 +1,4 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ /* * Copyright (C) 2001-2002 Mikael Hallendal <micke@imendio.com> * @@ -151,9 +151,8 @@ history_free_history_list (GList *history_list) { GList *node; - for (node = history_list; node; node = node->next) { - gnome_vfs_uri_unref ((GnomeVFSURI *) node->data); - } + for (node = history_list; node; node = node->next) + yelp_uri_unref ((YelpURI *) node->data); g_list_free (history_list); } @@ -186,45 +185,46 @@ history_maybe_emit (YelpHistory *history) } void -yelp_history_goto (YelpHistory *history, GnomeVFSURI *uri) +yelp_history_goto (YelpHistory *history, YelpURI *uri) { - YelpHistoryPriv *priv; - GList *forward_list; + YelpHistoryPriv *priv; + GList *forward_list; - g_return_if_fail (history != NULL); - g_return_if_fail (YELP_IS_HISTORY (history)); + g_return_if_fail (history != NULL); + g_return_if_fail (YELP_IS_HISTORY (history)); - priv = history->priv; + priv = history->priv; - if (priv->current && priv->current->data && - gnome_vfs_uri_equal (priv->current->data, uri)) { - GnomeVFSURI *cur_uri = (GnomeVFSURI *) priv->current->data; - const gchar *cur_frag, *frag; + if (priv->current && priv->current->data) { + YelpURI *cur_uri = (YelpURI *) priv->current->data; + if (gnome_vfs_uri_equal(cur_uri->uri, uri->uri)) { + const gchar *cur_frag, *frag; - cur_frag = gnome_vfs_uri_get_fragment_identifier (cur_uri); - frag = gnome_vfs_uri_get_fragment_identifier (uri); + cur_frag = gnome_vfs_uri_get_fragment_identifier (cur_uri->uri); + frag = gnome_vfs_uri_get_fragment_identifier (uri->uri); - if ((!cur_frag && !frag) - || (cur_frag && frag && !strcmp (cur_frag, frag))) - return; + if ((!cur_frag && !frag) + || (cur_frag && frag && !strcmp (cur_frag, frag))) + return; } + } - if (yelp_history_exist_forward (history)) { - forward_list = priv->current->next; - priv->current->next = NULL; + if (yelp_history_exist_forward (history)) { + forward_list = priv->current->next; + priv->current->next = NULL; - history_free_history_list (forward_list); - } + history_free_history_list (forward_list); + } - priv->history_list = g_list_append (priv->history_list, - gnome_vfs_uri_ref (uri)); + priv->history_list = g_list_append (priv->history_list, + yelp_uri_ref (uri)); - priv->current = g_list_last (priv->history_list); + priv->current = g_list_last (priv->history_list); - history_maybe_emit (history); + history_maybe_emit (history); } -GnomeVFSURI * +YelpURI * yelp_history_go_forward (YelpHistory *history) { YelpHistoryPriv *priv; @@ -239,13 +239,13 @@ yelp_history_go_forward (YelpHistory *history) history_maybe_emit (history); - return (GnomeVFSURI *) priv->current->data; + return (YelpURI *) priv->current->data; } return NULL; } -GnomeVFSURI * +YelpURI * yelp_history_go_back (YelpHistory *history) { YelpHistoryPriv *priv; @@ -260,13 +260,13 @@ yelp_history_go_back (YelpHistory *history) history_maybe_emit (history); - return (GnomeVFSURI *) priv->current->data; + return (YelpURI *) priv->current->data; } return NULL; } -GnomeVFSURI * +YelpURI * yelp_history_get_current (YelpHistory *history) { YelpHistoryPriv *priv; @@ -280,7 +280,7 @@ yelp_history_get_current (YelpHistory *history) return NULL; } - return (GnomeVFSURI *) priv->current->data; + return (YelpURI *) priv->current->data; } gboolean diff --git a/src/yelp-history.h b/src/yelp-history.h index 004065ad..55f16334 100644 --- a/src/yelp-history.h +++ b/src/yelp-history.h @@ -1,4 +1,4 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ /* * Copyright (C) 2001-2002 Mikael Hallendal <micke@imendio.com> * @@ -58,13 +58,13 @@ GType yelp_history_get_type (void); YelpHistory * yelp_history_new (void); void yelp_history_goto (YelpHistory *history, - GnomeVFSURI *uri); + YelpURI *uri); -GnomeVFSURI * yelp_history_go_forward (YelpHistory *history); +YelpURI * yelp_history_go_forward (YelpHistory *history); -GnomeVFSURI * yelp_history_go_back (YelpHistory *history); +YelpURI * yelp_history_go_back (YelpHistory *history); -GnomeVFSURI * yelp_history_get_current (YelpHistory *history); +YelpURI * yelp_history_get_current (YelpHistory *history); gboolean yelp_history_exist_forward (YelpHistory *history); gboolean yelp_history_exist_back (YelpHistory *history); diff --git a/src/yelp-html-gtkhtml2.c b/src/yelp-html-gtkhtml2.c index 10834439..e7b23707 100644 --- a/src/yelp-html-gtkhtml2.c +++ b/src/yelp-html-gtkhtml2.c @@ -51,7 +51,7 @@ struct _YelpHtmlPriv { HtmlView *view; HtmlDocument *doc; - GnomeVFSURI *base_uri; + YelpURI *base_uri; DomNodeIterator *find_iter; gint find_offset; @@ -203,7 +203,7 @@ html_url_requested_cb (HtmlDocument *doc, GnomeVFSResult result; gchar buffer[BUFFER_SIZE]; GnomeVFSFileSize read_len; - GnomeVFSURI *absolute_uri; + YelpURI *absolute_uri; gchar *absolute_uri_str; html = YELP_HTML (data); @@ -216,21 +216,21 @@ html_url_requested_cb (HtmlDocument *doc, d(g_print ("URL REQUESTED: %s\n", url)); - absolute_uri = gnome_vfs_uri_resolve_relative (priv->base_uri, url); - absolute_uri_str = gnome_vfs_uri_to_string (absolute_uri, + absolute_uri = yelp_uri_resolve_relative (priv->base_uri, url); + absolute_uri_str = gnome_vfs_uri_to_string (absolute_uri->uri, GNOME_VFS_URI_HIDE_NONE); result = gnome_vfs_open (&handle, absolute_uri_str, GNOME_VFS_OPEN_READ); if (result != GNOME_VFS_OK) { g_warning ("Failed to open: %s", absolute_uri_str); - gnome_vfs_uri_unref (absolute_uri); + yelp_uri_unref (absolute_uri); g_free (absolute_uri_str); return; } - gnome_vfs_uri_unref (absolute_uri); + yelp_uri_unref (absolute_uri); g_free (absolute_uri_str); while (gnome_vfs_read (handle, buffer, BUFFER_SIZE, &read_len) == @@ -256,7 +256,7 @@ html_link_clicked_cb (HtmlDocument *doc, const gchar *url, YelpHtml *html) { YelpHtmlPriv *priv; gboolean handled; - GnomeVFSURI *uri; + YelpURI *uri; const gchar *fragment; YelpURIType res_type; const gchar *uri_path, *base_uri_path; @@ -278,11 +278,11 @@ html_link_clicked_cb (HtmlDocument *doc, const gchar *url, YelpHtml *html) */ res_type = yelp_uri_get_resource_type (uri); if (res_type == YELP_URI_TYPE_HTML || res_type == YELP_URI_TYPE_MAN) { - uri_path = gnome_vfs_uri_get_path (uri); - base_uri_path = gnome_vfs_uri_get_path (priv->base_uri); + uri_path = gnome_vfs_uri_get_path (uri->uri); + base_uri_path = gnome_vfs_uri_get_path (priv->base_uri->uri); if (!strcmp (uri_path, base_uri_path)) { - fragment = gnome_vfs_uri_get_fragment_identifier (uri); + fragment = gnome_vfs_uri_get_fragment_identifier (uri->uri); if (fragment) { html_view_jump_to_anchor (HTML_VIEW (html->priv->view), fragment); @@ -331,7 +331,7 @@ yelp_html_new (void) } void -yelp_html_set_base_uri (YelpHtml *html, GnomeVFSURI *uri) +yelp_html_set_base_uri (YelpHtml *html, YelpURI *uri) { YelpHtmlPriv *priv; @@ -340,9 +340,9 @@ yelp_html_set_base_uri (YelpHtml *html, GnomeVFSURI *uri) priv = html->priv; if (priv->base_uri) - gnome_vfs_uri_unref (priv->base_uri); + yelp_uri_unref (priv->base_uri); - gnome_vfs_uri_ref (uri); + yelp_uri_ref (uri); priv->base_uri = uri; } diff --git a/src/yelp-html.h b/src/yelp-html.h index 1eda27a2..0744710f 100644 --- a/src/yelp-html.h +++ b/src/yelp-html.h @@ -48,7 +48,7 @@ struct _YelpHtmlClass { /* Signals */ void (*uri_selected) (YelpHtml *view, - GnomeVFSURI *uri, + YelpURI *uri, gboolean handled); void (*title_changed) (YelpHtml *view, const gchar *new_title); @@ -58,7 +58,7 @@ GType yelp_html_get_type (void); YelpHtml * yelp_html_new (void); void yelp_html_set_base_uri (YelpHtml *html, - GnomeVFSURI *uri); + YelpURI *uri); void yelp_html_clear (YelpHtml *html); void yelp_html_write (YelpHtml *html, const gchar *data, diff --git a/src/yelp-pager.c b/src/yelp-pager.c index 0a0684dc..6ead3a3e 100644 --- a/src/yelp-pager.c +++ b/src/yelp-pager.c @@ -36,7 +36,7 @@ #define d(x) struct _YelpPagerPriv { - GnomeVFSURI *uri; + YelpURI *uri; YelpPagerState state; @@ -202,12 +202,12 @@ pager_set_property (GObject *object, switch (prop_id) { case PROP_URI: if (pager->priv->uri) - gnome_vfs_uri_unref (pager->priv->uri); + yelp_uri_unref (pager->priv->uri); - pager->priv->uri = (GnomeVFSURI *) g_value_get_pointer (value); + pager->priv->uri = (YelpURI *) g_value_get_pointer (value); if (pager->priv->uri) - gnome_vfs_uri_ref (pager->priv->uri); + yelp_uri_ref (pager->priv->uri); break; default: @@ -225,7 +225,7 @@ pager_get_property (GObject *object, switch (prop_id) { case PROP_URI: - g_value_set_object (value, pager->priv->uri); + g_value_set_pointer (value, pager->priv->uri); break; default: break; @@ -237,7 +237,7 @@ pager_dispose (GObject *object) { YelpPager *pager = YELP_PAGER (object); - g_object_unref (pager->priv->uri); + yelp_uri_unref (pager->priv->uri); if (pager->priv->error) g_error_free (pager->priv->error); @@ -291,7 +291,7 @@ yelp_pager_cancel (YelpPager *pager) YELP_PAGER_GET_CLASS (pager)->cancel (pager); } -GnomeVFSURI * +YelpURI * yelp_pager_get_uri (YelpPager *pager) { g_return_val_if_fail (pager != NULL, FALSE); @@ -365,7 +365,7 @@ yelp_pager_get_sections (YelpPager *pager) } gchar * -yelp_pager_resolve_uri (YelpPager *pager, GnomeVFSURI *uri) +yelp_pager_resolve_uri (YelpPager *pager, YelpURI *uri) { gchar *frag_id = NULL; @@ -375,7 +375,7 @@ yelp_pager_resolve_uri (YelpPager *pager, GnomeVFSURI *uri) } gboolean -yelp_pager_uri_is_page (YelpPager *pager, gchar *page_id, GnomeVFSURI *uri) +yelp_pager_uri_is_page (YelpPager *pager, gchar *page_id, YelpURI *uri) { gchar *frag_id = NULL; gboolean equal; @@ -400,7 +400,7 @@ yelp_pager_uri_is_page (YelpPager *pager, gchar *page_id, GnomeVFSURI *uri) } const YelpPage * -yelp_pager_lookup_page (YelpPager *pager, GnomeVFSURI *uri) +yelp_pager_lookup_page (YelpPager *pager, YelpURI *uri) { gchar *page_id = NULL; YelpPage *page; @@ -411,7 +411,7 @@ yelp_pager_lookup_page (YelpPager *pager, GnomeVFSURI *uri) page_id = (gchar *) (YELP_PAGER_GET_CLASS (pager)->resolve_uri (pager, uri)); if (!page_id) - page_id = g_strdup (gnome_vfs_uri_get_fragment_identifier (uri)); + page_id = g_strdup (gnome_vfs_uri_get_fragment_identifier (uri->uri)); page = (YelpPage *) yelp_pager_get_page (pager, page_id); diff --git a/src/yelp-pager.h b/src/yelp-pager.h index 74f34b40..f96ccb8b 100644 --- a/src/yelp-pager.h +++ b/src/yelp-pager.h @@ -66,7 +66,7 @@ struct _YelpPagerClass { /* Virtual Functions */ gboolean (*process) (YelpPager *pager); gchar * (*resolve_uri) (YelpPager *pager, - GnomeVFSURI *uri); + YelpURI *uri); const GtkTreeModel * (*get_sections) (YelpPager *pager); }; @@ -85,7 +85,7 @@ GType yelp_pager_get_type (void); gboolean yelp_pager_start (YelpPager *pager); void yelp_pager_cancel (YelpPager *pager); -GnomeVFSURI * yelp_pager_get_uri (YelpPager *pager); +YelpURI * yelp_pager_get_uri (YelpPager *pager); YelpPagerState yelp_pager_get_state (YelpPager *pager); void yelp_pager_clear_state (YelpPager *pager); @@ -99,12 +99,12 @@ void yelp_pager_error (YelpPager *pager, const GtkTreeModel * yelp_pager_get_sections (YelpPager *pager); gchar * yelp_pager_resolve_uri (YelpPager *pager, - GnomeVFSURI *uri); + YelpURI *uri); gboolean yelp_pager_uri_is_page (YelpPager *pager, gchar *page_id, - GnomeVFSURI *uri); + YelpURI *uri); const YelpPage * yelp_pager_lookup_page (YelpPager *pager, - GnomeVFSURI *uri); + YelpURI *uri); const YelpPage * yelp_pager_get_page (YelpPager *pager, gchar *id); void yelp_pager_add_page (YelpPager *pager, diff --git a/src/yelp-toc-pager.c b/src/yelp-toc-pager.c index 1d66065f..61fa3484 100644 --- a/src/yelp-toc-pager.c +++ b/src/yelp-toc-pager.c @@ -124,7 +124,7 @@ static void toc_pager_dispose (GObject *gobject); gboolean toc_pager_process (YelpPager *pager); void toc_pager_cancel (YelpPager *pager); gchar * toc_pager_resolve_uri (YelpPager *pager, - GnomeVFSURI *uri); + YelpURI *uri); const GtkTreeModel * toc_pager_get_sections (YelpPager *pager); static gboolean toc_process_pending (YelpTocPager *pager); @@ -233,9 +233,9 @@ toc_pager_dispose (GObject *object) void yelp_toc_pager_init (void) { - GnomeVFSURI *uri; + YelpURI *uri; - uri = gnome_vfs_uri_new (DATADIR "/yelp/toc.xml"); + uri = yelp_uri_new ("toc:"); toc_pager = (YelpTocPager *) g_object_new (YELP_TYPE_TOC_PAGER, "uri", uri, NULL); @@ -252,12 +252,14 @@ yelp_toc_pager_get (void) void yelp_toc_pager_pause (YelpTocPager *pager) { + g_return_if_fail (pager != NULL); pager->priv->pause_count = pager->priv->pause_count + 1; } void yelp_toc_pager_unpause (YelpTocPager *pager) { + g_return_if_fail (pager != NULL); pager->priv->pause_count = pager->priv->pause_count - 1; if (pager->priv->pause_count < 0) { @@ -323,9 +325,9 @@ toc_pager_cancel (YelpPager *pager) } gchar * -toc_pager_resolve_uri (YelpPager *pager, GnomeVFSURI *uri) +toc_pager_resolve_uri (YelpPager *pager, YelpURI *uri) { - const gchar *frag = gnome_vfs_uri_get_fragment_identifier (uri); + const gchar *frag = gnome_vfs_uri_get_fragment_identifier (uri->uri); if (!frag) return g_strdup ("index"); @@ -797,7 +799,7 @@ toc_process_idx_pending (YelpTocPager *pager) { GSList *first; YelpMetafile *meta; - GnomeVFSURI *uri; + YelpURI *uri; gchar *path; xmlDocPtr doc; @@ -809,7 +811,7 @@ toc_process_idx_pending (YelpTocPager *pager) meta = first->data; uri = yelp_uri_new (omf->file); - path = gnome_vfs_uri_to_string (uri, + path = gnome_vfs_uri_to_string (uri->uri, GNOME_VFS_URI_HIDE_USER_NAME | GNOME_VFS_URI_HIDE_PASSWORD | GNOME_VFS_URI_HIDE_HOST_NAME | @@ -826,7 +828,7 @@ toc_process_idx_pending (YelpTocPager *pager) */ g_free (path); - gnome_vfs_uri_unref (uri); + yelp_uri_unref (uri); g_slist_free_1 (first); if (!priv->idx_pending) { @@ -879,7 +881,7 @@ menu_write_menu (YelpMenu *menu, YelpMenu *cur_menu = (YelpMenu *) cur->_private; if (cur_menu && (cur_menu->has_submenus || cur_menu->metafiles)) g_string_append_printf (gstr, - "<li><a href='#%s'>%s</a></li>\n", + "<li><a href='toc:%s'>%s</a></li>\n", cur_menu->id, cur_menu->title); } diff --git a/src/yelp-uri.c b/src/yelp-uri.c index 83ce046e..e46fa56a 100644 --- a/src/yelp-uri.c +++ b/src/yelp-uri.c @@ -29,99 +29,155 @@ #include <libgnome/gnome-program.h> #include "yelp-error.h" -#include "yelp-toc-pager.h" #include "yelp-uri.h" #define d(x) -static GnomeVFSURI * uri_parse_ghelp_uri (const gchar *uri_str); +static void uri_set_resource_type (YelpURI *uri); +static gboolean uri_parse_uri (YelpURI *uri); +static void uri_parse_toc_uri (YelpURI *uri); +static void uri_parse_ghelp_uri (YelpURI *uri); static gchar * uri_locate_file (gchar *path, gchar *file); static gchar * uri_locate_file_lang (gchar *path, gchar *file, gchar *lang); -GnomeVFSURI * +YelpURI * yelp_uri_new (const gchar *uri_str) { - GnomeVFSURI *uri; + YelpURI *uri = g_new0 (YelpURI, 1); - if (!strncmp (uri_str, "ghelp:", 6)) { - uri = uri_parse_ghelp_uri (uri_str); - } - else { - uri = gnome_vfs_uri_new (uri_str); + uri->refcount = 1; + uri->src_uri = g_strdup (uri_str); + + if (!uri_parse_uri (uri)) { + uri->uri = gnome_vfs_uri_new (uri_str); + uri_set_resource_type (uri); } return uri; } -GnomeVFSURI * -yelp_uri_resolve_relative (GnomeVFSURI *base, const gchar *uri_str) +YelpURI * +yelp_uri_resolve_relative (YelpURI *base, const gchar *uri_str) { - GnomeVFSURI *uri; + YelpURI *uri = g_new0 (YelpURI, 1); - if (!strncmp (uri_str, "ghelp:", 6)) { - uri = uri_parse_ghelp_uri (uri_str); - } - else { - uri = gnome_vfs_uri_resolve_relative (base, uri_str); + uri->refcount = 1; + uri->src_uri = g_strdup (uri_str); + + if (!uri_parse_uri (uri)) { + uri->uri = gnome_vfs_uri_resolve_relative (base->uri, uri_str); + uri_set_resource_type (uri); } return uri; } YelpURIType -yelp_uri_get_resource_type (GnomeVFSURI *uri) +yelp_uri_get_resource_type (YelpURI *uri) +{ + g_return_val_if_fail (uri != NULL, YELP_URI_TYPE_ERROR); + + return uri->resource_type; +} + +static void +uri_set_resource_type (YelpURI *uri) { gchar *uri_str; gchar *mime_type; - GnomeVFSURI *toc_uri; - gchar *toc_uri_str; - YelpURIType type = YELP_URI_TYPE_EXTERNAL; - g_return_val_if_fail (uri != NULL, YELP_URI_TYPE_ERROR); - - if (strcmp (gnome_vfs_uri_get_scheme (uri), "file")) - return YELP_URI_TYPE_EXTERNAL; + g_return_if_fail (uri != NULL); - uri_str = gnome_vfs_uri_to_string (uri, - GNOME_VFS_URI_HIDE_FRAGMENT_IDENTIFIER); - if (!uri_str) { - return YELP_URI_TYPE_ERROR; + if (strcmp (gnome_vfs_uri_get_scheme (uri->uri), "file")) { + uri->resource_type = YELP_URI_TYPE_EXTERNAL; + return; } - toc_uri = yelp_pager_get_uri (YELP_PAGER (yelp_toc_pager_get ())); - toc_uri_str = gnome_vfs_uri_to_string (toc_uri, - GNOME_VFS_URI_HIDE_FRAGMENT_IDENTIFIER); - if (toc_uri_str && !strcmp (uri_str, toc_uri_str)) { - g_free (uri_str); - g_free (toc_uri_str); - return YELP_URI_TYPE_TOC; - } + uri_str = gnome_vfs_uri_to_string (uri->uri, + GNOME_VFS_URI_HIDE_FRAGMENT_IDENTIFIER); + g_return_if_fail (uri_str != NULL); mime_type = gnome_vfs_get_mime_type (uri_str); if (!mime_type) { g_free (uri_str); - return YELP_URI_TYPE_ERROR; + return; } if (!strcmp (mime_type, "text/xml")) - type = YELP_URI_TYPE_DOCBOOK_XML; + uri->resource_type = YELP_URI_TYPE_DOCBOOK_XML; else if (!strcmp (mime_type, "text/sgml")) - type = YELP_URI_TYPE_DOCBOOK_SGML; + uri->resource_type = YELP_URI_TYPE_DOCBOOK_SGML; else if (!strcmp (mime_type, "text/html")) - type = YELP_URI_TYPE_HTML; + uri->resource_type = YELP_URI_TYPE_HTML; g_free (mime_type); g_free (uri_str); +} + +YelpURI * +yelp_uri_ref (YelpURI *uri) +{ + g_return_val_if_fail (uri != NULL, NULL); - return type; + uri->refcount++; + + return uri; } +void +yelp_uri_unref (YelpURI *uri) +{ + g_return_if_fail (uri != NULL); + + if (--uri->refcount < 1) { + gnome_vfs_uri_unref (uri->uri); + + if (uri->src_uri) + g_free (uri->src_uri); -static GnomeVFSURI * -uri_parse_ghelp_uri (const gchar *uri_str) + g_free (uri); + } +} + +static gboolean +uri_parse_uri (YelpURI *uri) +{ + if (!strncmp (uri->src_uri, "ghelp:", 6)) { + uri_parse_ghelp_uri (uri); + return TRUE; + } + else if (!strncmp (uri->src_uri, "toc:", 4)) { + uri_parse_toc_uri (uri); + return TRUE; + } + else + return FALSE; +} + +static void +uri_parse_toc_uri (YelpURI *uri) +{ + gchar *c, *str; + + c = strchr (uri->src_uri, ':'); + + if (c && *c != '\0' && *(++c) != '\0') + str = g_strconcat (DATADIR, "/yelp/toc.xml#", c, NULL); + else + str = g_strconcat (DATADIR, "/yelp/toc.xml", NULL); + + uri->uri = gnome_vfs_uri_new (str); + uri->resource_type = YELP_URI_TYPE_TOC; + + g_free (str); + return; +} + +static void +uri_parse_ghelp_uri (YelpURI *uri) { GSList *locations = NULL; GSList *node; @@ -129,11 +185,10 @@ uri_parse_ghelp_uri (const gchar *uri_str) gchar *doc_id = NULL; gchar *file_name = NULL; gchar *link_id = NULL; - GnomeVFSURI *uri = NULL; GnomeProgram *program = gnome_program_get (); - if ((path = strchr(uri_str, ':'))) + if ((path = strchr(uri->src_uri, ':'))) path++; else goto done; @@ -144,10 +199,11 @@ uri_parse_ghelp_uri (const gchar *uri_str) if ((c = strchr (str, '?'))) *c = '#'; - uri = gnome_vfs_uri_new (str); - + uri->uri = gnome_vfs_uri_new (str); g_free (str); - return uri; + + uri_set_resource_type (uri); + return; } if ((c = strchr (path, '/'))) { @@ -189,10 +245,12 @@ uri_parse_ghelp_uri (const gchar *uri_str) else full_uri = g_strconcat ("file://", full_path, NULL); - uri = gnome_vfs_uri_new (full_uri); + uri->uri = gnome_vfs_uri_new (full_uri); g_free (full_uri); g_free (full_path); + + uri_set_resource_type (uri); break; } } @@ -203,9 +261,7 @@ uri_parse_ghelp_uri (const gchar *uri_str) g_free (link_id); if (!uri) - g_warning ("Couldn't resolve ghelp URI: %s", uri_str); - - return uri; + g_warning ("Couldn't resolve ghelp URI: %s", uri->src_uri); } static gchar * diff --git a/src/yelp-uri.h b/src/yelp-uri.h index 54a5d715..9977c93c 100644 --- a/src/yelp-uri.h +++ b/src/yelp-uri.h @@ -28,26 +28,34 @@ #include <libgnomevfs/gnome-vfs.h> typedef enum { - YELP_URI_TYPE_EXTERNAL, + YELP_URI_TYPE_ERROR = 0, + YELP_URI_TYPE_DOCBOOK_XML, YELP_URI_TYPE_DOCBOOK_SGML, YELP_URI_TYPE_HTML, YELP_URI_TYPE_MAN, YELP_URI_TYPE_INFO, YELP_URI_TYPE_TOC, + YELP_URI_TYPE_EXTERNAL +} YelpURIType; - YELP_URI_TYPE_GHELP, - YELP_URI_TYPE_GHELP_OTHER, - YELP_URI_TYPE_INDEX, - YELP_URI_TYPE_PATH, - YELP_URI_TYPE_FILE, +typedef struct _YelpURI YelpURI; +struct _YelpURI { + GnomeVFSURI *uri; - YELP_URI_TYPE_ERROR -} YelpURIType; + gint refcount; + + gchar *src_uri; + + YelpURIType resource_type; +}; + +YelpURI * yelp_uri_new (const gchar *uri_str); +YelpURI * yelp_uri_resolve_relative (YelpURI *uri, + const gchar *uri_str); +YelpURIType yelp_uri_get_resource_type (YelpURI *uri); -GnomeVFSURI * yelp_uri_new (const gchar *uri_str); -GnomeVFSURI * yelp_uri_resolve_relative (GnomeVFSURI *base, - const gchar *uri_str); -YelpURIType yelp_uri_get_resource_type (GnomeVFSURI *uri); +YelpURI * yelp_uri_ref (YelpURI *uri); +void yelp_uri_unref (YelpURI *uri); #endif /* __YELP_URI_H__ */ diff --git a/src/yelp-window.c b/src/yelp-window.c index 587d8466..97a9063b 100644 --- a/src/yelp-window.c +++ b/src/yelp-window.c @@ -83,14 +83,14 @@ static GdkPixbuf * window_load_icon (void); static void window_set_sections (YelpWindow *window, GtkTreeModel *sections); static void window_handle_uri (YelpWindow *window, - GnomeVFSURI *uri); + YelpURI *uri); static gboolean window_handle_pager_uri (YelpWindow *window, - GnomeVFSURI *uri); + YelpURI *uri); static gboolean window_handle_html_uri (YelpWindow *window, - GnomeVFSURI *uri); + YelpURI *uri); static void window_handle_page (YelpWindow *window, YelpPage *page, - GnomeVFSURI *uri); + YelpURI *uri); static void window_disconnect (YelpWindow *window); static void pager_contents_cb (YelpPager *pager, @@ -104,7 +104,7 @@ static void pager_finish_cb (YelpPager *pager, gpointer user_data); static void html_uri_selected_cb (YelpHtml *html, - GnomeVFSURI *uri, + YelpURI *uri, gboolean handled, gpointer user_data); static void html_title_changed_cb (YelpHtml *html, @@ -369,10 +369,10 @@ yelp_window_new (GNode *doc_tree, GList *index) void yelp_window_open_uri (YelpWindow *window, - GnomeVFSURI *uri) + YelpURI *uri) { YelpWindowPriv *priv; - GnomeVFSURI *cur_uri; + YelpURI *cur_uri; g_return_if_fail (YELP_IS_WINDOW (window)); @@ -387,10 +387,10 @@ yelp_window_open_uri (YelpWindow *window, priv = window->priv; cur_uri = yelp_history_get_current (window->priv->history); - if (cur_uri && gnome_vfs_uri_equal (cur_uri, uri)) { + if (cur_uri && gnome_vfs_uri_equal (cur_uri->uri, uri->uri)) { const gchar *cur_frag, *frag; - cur_frag = gnome_vfs_uri_get_fragment_identifier (cur_uri); - frag = gnome_vfs_uri_get_fragment_identifier (uri); + cur_frag = gnome_vfs_uri_get_fragment_identifier (cur_uri->uri); + frag = gnome_vfs_uri_get_fragment_identifier (uri->uri); if ((!cur_frag && !frag) || (cur_frag && frag && !strcmp (cur_frag, frag))) @@ -404,7 +404,7 @@ yelp_window_open_uri (YelpWindow *window, void window_handle_uri (YelpWindow *window, - GnomeVFSURI *uri) + YelpURI *uri) { YelpWindowPriv *priv; GError *error = NULL; @@ -430,7 +430,7 @@ window_handle_uri (YelpWindow *window, handled = window_handle_html_uri (window, uri); break; case YELP_URI_TYPE_EXTERNAL: - str_uri = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_NONE); + str_uri = gnome_vfs_uri_to_string (uri->uri, GNOME_VFS_URI_HIDE_NONE); gnome_url_show (str_uri, &error); g_free (str_uri); break; @@ -448,7 +448,7 @@ window_handle_uri (YelpWindow *window, window_find_buttons_set_sensitive (window, TRUE); } -GnomeVFSURI * +YelpURI * yelp_window_get_current_uri (YelpWindow *window) { g_return_val_if_fail (YELP_IS_WINDOW (window), NULL); @@ -710,7 +710,7 @@ window_set_sections (YelpWindow *window, static gboolean window_handle_pager_uri (YelpWindow *window, - GnomeVFSURI *uri) + YelpURI *uri) { YelpWindowPriv *priv; GError *error = NULL; @@ -729,7 +729,7 @@ window_handle_pager_uri (YelpWindow *window, if (yelp_uri_get_resource_type (uri) == YELP_URI_TYPE_TOC) { pager = YELP_PAGER (yelp_toc_pager_get ()); } else { - path = g_strdup (gnome_vfs_uri_get_path (uri)); + path = g_strdup (gnome_vfs_uri_get_path (uri->uri)); pager = (YelpPager *) yelp_cache_lookup (path); // Create a new pager if one doesn't exist in the cache @@ -779,7 +779,8 @@ window_handle_pager_uri (YelpWindow *window, if (state & YELP_PAGER_STATE_STARTED) { if (state & YELP_PAGER_STATE_CONTENTS) { - const gchar *frag_id = gnome_vfs_uri_get_fragment_identifier (uri); + const gchar *frag_id = + gnome_vfs_uri_get_fragment_identifier (uri->uri); gchar *page_id = yelp_pager_resolve_uri (pager, uri); if (!page_id && (frag_id && strcmp (frag_id, ""))) { @@ -896,7 +897,7 @@ window_handle_pager_uri (YelpWindow *window, static gboolean window_handle_html_uri (YelpWindow *window, - GnomeVFSURI *uri) + YelpURI *uri) { GnomeVFSHandle *handle; GnomeVFSResult result; @@ -932,7 +933,7 @@ window_handle_html_uri (YelpWindow *window, yelp_html_set_base_uri (priv->html_view, uri); result = gnome_vfs_open (&handle, - gnome_vfs_uri_get_path (uri), + gnome_vfs_uri_get_path (uri->uri), GNOME_VFS_OPEN_READ); if (result != GNOME_VFS_OK) { @@ -953,7 +954,7 @@ window_handle_html_uri (YelpWindow *window, static void window_handle_page (YelpWindow *window, YelpPage *page, - GnomeVFSURI *uri) + YelpURI *uri) { GtkWidget *menu_item; GtkTreeModel *model; @@ -1024,10 +1025,10 @@ window_handle_page (YelpWindow *window, page->chunk, strlen (page->chunk)); - if (gnome_vfs_uri_get_fragment_identifier (uri)) { + if (gnome_vfs_uri_get_fragment_identifier (uri->uri)) { yelp_html_jump_to_anchor (priv->html_view, - (gchar *) gnome_vfs_uri_get_fragment_identifier (uri)); + (gchar *) gnome_vfs_uri_get_fragment_identifier (uri->uri)); } } @@ -1066,13 +1067,13 @@ pager_contents_cb (YelpPager *pager, gpointer user_data) { YelpWindow *window = YELP_WINDOW (user_data); - GnomeVFSURI *uri = NULL; + YelpURI *uri = NULL; GError *error = NULL; const gchar *frag; gchar *page; uri = yelp_window_get_current_uri (window); - frag = gnome_vfs_uri_get_fragment_identifier (uri); + frag = gnome_vfs_uri_get_fragment_identifier (uri->uri); page = yelp_pager_resolve_uri (pager, uri); if (!page && (frag && strcmp (frag, ""))) { @@ -1091,7 +1092,7 @@ pager_page_cb (YelpPager *pager, gpointer user_data) { YelpWindow *window = YELP_WINDOW (user_data); - GnomeVFSURI *uri; + YelpURI *uri; YelpPage *page; uri = yelp_window_get_current_uri (window); @@ -1125,11 +1126,11 @@ pager_finish_cb (YelpPager *pager, { GError *error = NULL; YelpWindow *window = YELP_WINDOW (user_data); - GnomeVFSURI *uri; + YelpURI *uri; const gchar *frag; uri = yelp_window_get_current_uri (window); - frag = gnome_vfs_uri_get_fragment_identifier (uri); + frag = gnome_vfs_uri_get_fragment_identifier (uri->uri); window_disconnect (window); @@ -1142,16 +1143,16 @@ pager_finish_cb (YelpPager *pager, } static void -html_uri_selected_cb (YelpHtml *html, - GnomeVFSURI *uri, - gboolean handled, - gpointer user_data) +html_uri_selected_cb (YelpHtml *html, + YelpURI *uri, + gboolean handled, + gpointer user_data) { YelpWindow *window = YELP_WINDOW (user_data); if (!handled) { yelp_window_open_uri (window, uri); - gnome_vfs_uri_unref (uri); + yelp_uri_unref (uri); } } @@ -1167,10 +1168,10 @@ static void tree_selection_changed_cb (GtkTreeSelection *selection, YelpWindow *window) { - GtkTreeModel *model; - GtkTreeIter iter; - gchar *id, *frag; - GnomeVFSURI *uri; + GtkTreeModel *model; + GtkTreeIter iter; + gchar *id, *frag; + YelpURI *uri; YelpWindowPriv *priv = window->priv; @@ -1281,8 +1282,8 @@ window_go_cb (gpointer data, guint action, GtkWidget *widget) { - YelpWindow *window; - GnomeVFSURI *uri; + YelpWindow *window; + YelpURI *uri; g_return_if_fail (YELP_IS_WINDOW (YELP_WINDOW (data))); @@ -1301,19 +1302,19 @@ window_go_cb (gpointer data, uri = yelp_uri_resolve_relative (yelp_window_get_current_uri (window), window->priv->prev); yelp_window_open_uri (window, uri); - gnome_vfs_uri_unref (uri); + yelp_uri_unref (uri); break; case YELP_WINDOW_GO_NEXT: uri = yelp_uri_resolve_relative (yelp_window_get_current_uri (window), window->priv->next); yelp_window_open_uri (window, uri); - gnome_vfs_uri_unref (uri); + yelp_uri_unref (uri); break; case YELP_WINDOW_GO_TOC: uri = yelp_uri_resolve_relative (yelp_window_get_current_uri (window), window->priv->toc); yelp_window_open_uri (window, uri); - gnome_vfs_uri_unref (uri); + yelp_uri_unref (uri); break; default: break; @@ -1324,7 +1325,7 @@ static void window_home_button_clicked (GtkWidget *button, YelpWindow *window) { - GnomeVFSURI *uri; + YelpURI *uri; g_return_if_fail (YELP_IS_WINDOW (window)); @@ -1380,7 +1381,7 @@ window_history_action (YelpWindow *window, YelpHistoryAction action) { YelpWindowPriv *priv; - GnomeVFSURI *uri; + YelpURI *uri; g_return_if_fail (YELP_IS_WINDOW (window)); diff --git a/src/yelp-window.h b/src/yelp-window.h index 88daf15a..95bc0668 100644 --- a/src/yelp-window.h +++ b/src/yelp-window.h @@ -58,7 +58,7 @@ GType yelp_window_get_type (void); GtkWidget * yelp_window_new (GNode *doc_tree, GList *index); void yelp_window_open_uri (YelpWindow *window, - GnomeVFSURI *uri); -GnomeVFSURI * yelp_window_get_current_uri (YelpWindow *window); + YelpURI *uri); +YelpURI * yelp_window_get_current_uri (YelpWindow *window); #endif /* __YELP_WINDOW_H__ */ |