diff options
author | Aleksander Morgado <aleksander.morgado@collabora.co.uk> | 2016-01-31 17:06:43 -0800 |
---|---|---|
committer | Shaun McCance <shaunm@gnome.org> | 2016-02-23 16:12:38 -0500 |
commit | 787500fcb170b4aca22ff1aa09a3f9019166b72d (patch) | |
tree | a1a91bbba091a94738d5cc4226c813ad1fb6bfaf | |
parent | df8c2886cd1b3e9d7592b12f655598382cf55dbb (diff) | |
download | yelp-787500fcb170b4aca22ff1aa09a3f9019166b72d.tar.gz |
Fallback to 'help-list:' if the default URI is not available
The current default URI when none is explicitly specified is "help:gnome-help",
which maps to the GNOME 3 desktop users guide. If this is not specified, yelp
now will fallback to showing 'help-list:', which is always available.
The new fallback applies both when launched through command line or when a new
yelp window is requested.
The patch also avoids a YelpUri memleak that was happening in
yelp_application_new_window(), as yelp_application_new_window_uri() was itself
taking its own reference.
https://bugzilla.gnome.org/show_bug.cgi?id=759545
-rw-r--r-- | src/yelp-application.c | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/src/yelp-application.c b/src/yelp-application.c index 4c5159a1..47a69991 100644 --- a/src/yelp-application.c +++ b/src/yelp-application.c @@ -66,6 +66,7 @@ struct _YelpApplicationLoad { YelpApplication *app; guint32 timestamp; gboolean new; + gboolean fallback_help_list; }; static void yelp_application_iface_init (YelpBookmarksInterface *iface); @@ -383,13 +384,15 @@ yelp_application_new (void) static void open_uri (YelpApplication *app, YelpUri *uri, - gboolean new_window) + gboolean new_window, + gboolean fallback_help_list) { YelpApplicationLoad *data; data = g_new (YelpApplicationLoad, 1); data->app = app; data->timestamp = gtk_get_current_event_time (); data->new = new_window; + data->fallback_help_list = fallback_help_list; g_signal_connect (uri, "resolved", G_CALLBACK (application_uri_resolved), @@ -415,10 +418,10 @@ yelp_application_command_line (GApplication *application, argv = g_application_command_line_get_arguments (cmdline, NULL); if (argv[1] == NULL) - open_uri (app, yelp_uri_new (DEFAULT_URI), FALSE); + open_uri (app, yelp_uri_new (DEFAULT_URI), FALSE, TRUE); for (i = 1; argv[i]; i++) - open_uri (app, yelp_uri_new (argv[i]), FALSE); + open_uri (app, yelp_uri_new (argv[i]), FALSE, FALSE); g_strfreev (argv); @@ -429,18 +432,17 @@ void yelp_application_new_window (YelpApplication *app, const gchar *uri) { - YelpUri *yuri; - - yuri = yelp_uri_new (uri ? uri : DEFAULT_URI); - - yelp_application_new_window_uri (app, yuri); + if (uri) + open_uri (app, yelp_uri_new (uri), TRUE, FALSE); + else + open_uri (app, yelp_uri_new (DEFAULT_URI), TRUE, TRUE); } void yelp_application_new_window_uri (YelpApplication *app, YelpUri *uri) { - open_uri (app, g_object_ref (uri), TRUE); + open_uri (app, g_object_ref (uri), TRUE, FALSE); } static void @@ -451,10 +453,23 @@ application_uri_resolved (YelpUri *uri, gchar *doc_uri; GdkWindow *gdk_window; YelpApplicationPrivate *priv = GET_PRIV (data->app); + GFile *gfile; /* We held the application while resolving the URI, so unhold now. */ g_application_release (G_APPLICATION (data->app)); + /* Get the GFile associated with the URI, or NULL if not available */ + gfile = yelp_uri_get_file (uri); + if (gfile == NULL && data->fallback_help_list) { + /* There is no file associated to the default uri, so we'll fallback + * to help-list: if we're told to do so. */ + open_uri (data->app, yelp_uri_new ("help-list:"), data->new, FALSE); + g_object_unref (uri); + g_free (data); + return; + } + g_clear_object (&gfile); + doc_uri = yelp_uri_get_document_uri (uri); if (data->new || !doc_uri) |