summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander.morgado@collabora.co.uk>2016-01-31 17:06:43 -0800
committerShaun McCance <shaunm@gnome.org>2016-02-23 16:12:38 -0500
commit787500fcb170b4aca22ff1aa09a3f9019166b72d (patch)
treea1a91bbba091a94738d5cc4226c813ad1fb6bfaf
parentdf8c2886cd1b3e9d7592b12f655598382cf55dbb (diff)
downloadyelp-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.c33
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)