summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShaun McCance <shaunm@gnome.org>2011-01-06 08:27:20 -0500
committerShaun McCance <shaunm@gnome.org>2011-01-06 08:27:20 -0500
commit2d09cd84850b9f628077cabe9956018a53d09ae5 (patch)
tree2ec05b28ce4124aca51f22aeb651f2c8ec1c589f
parent231a2bf510a30b19419ef29f577eb952a7498bcc (diff)
downloadyelp-2d09cd84850b9f628077cabe9956018a53d09ae5.tar.gz
Moving PackageKit integration to YelpView
-rw-r--r--libyelp/yelp-view.c249
-rw-r--r--libyelp/yelp-view.h3
-rw-r--r--src/yelp-application.c159
-rw-r--r--src/yelp-application.h7
-rw-r--r--src/yelp-window.c77
5 files changed, 242 insertions, 253 deletions
diff --git a/libyelp/yelp-view.c b/libyelp/yelp-view.c
index 292d9634..848573bc 100644
--- a/libyelp/yelp-view.c
+++ b/libyelp/yelp-view.c
@@ -28,11 +28,13 @@
#include <glib-object.h>
#include <gio/gio.h>
#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
#include <webkit/webkit.h>
#include "yelp-debug.h"
#include "yelp-docbook-document.h"
#include "yelp-error.h"
+#include "yelp-marshal.h"
#include "yelp-settings.h"
#include "yelp-types.h"
#include "yelp-view.h"
@@ -53,6 +55,10 @@ static void yelp_view_set_property (GObject *object,
const GValue *value,
GParamSpec *pspec);
+static gboolean view_external_uri (YelpView *view,
+ YelpUri *uri);
+static void view_install_uri (YelpView *view,
+ const gchar *uri);
static void view_scrolled (GtkAdjustment *adjustment,
YelpView *view);
static void view_set_hadjustment (YelpView *view,
@@ -224,6 +230,7 @@ struct _YelpViewPrivate {
gchar *popup_code_text;
YelpViewState state;
+ YelpViewState prevstate;
gchar *page_id;
gchar *root_title;
@@ -256,7 +263,7 @@ yelp_view_init (YelpView *view)
priv->cancellable = NULL;
- priv->state = YELP_VIEW_STATE_BLANK;
+ priv->prevstate = priv->state = YELP_VIEW_STATE_BLANK;
priv->navigation_requested =
g_signal_connect (view, "navigation-policy-decision-requested",
@@ -371,6 +378,8 @@ yelp_view_class_init (YelpViewClass *klass)
NULL);
settings_show_text_cursor (settings);
+ klass->external_uri = view_external_uri;
+
object_class->dispose = yelp_view_dispose;
object_class->finalize = yelp_view_finalize;
object_class->get_property = yelp_view_get_property;
@@ -388,9 +397,10 @@ yelp_view_class_init (YelpViewClass *klass)
g_signal_new ("external-uri",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
- 0, NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1, YELP_TYPE_URI);
+ G_STRUCT_OFFSET (YelpViewClass, external_uri),
+ g_signal_accumulator_true_handled, NULL,
+ yelp_marshal_BOOLEAN__OBJECT,
+ G_TYPE_BOOLEAN, 1, YELP_TYPE_URI);
signals[LOADED] =
g_signal_new ("loaded",
@@ -524,6 +534,7 @@ yelp_view_set_property (GObject *object,
g_object_unref (uri);
break;
case PROP_STATE:
+ priv->prevstate = priv->state;
priv->state = g_value_get_enum (value);
break;
default:
@@ -686,6 +697,171 @@ yelp_view_get_active_link_text (YelpView *view)
/******************************************************************************/
+static gboolean
+view_external_uri (YelpView *view,
+ YelpUri *uri)
+{
+ gchar *struri = yelp_uri_get_canonical_uri (uri);
+ g_app_info_launch_default_for_uri (struri, NULL, NULL);
+ g_free (struri);
+ return TRUE;
+}
+
+typedef struct _YelpInstallInfo YelpInstallInfo;
+struct _YelpInstallInfo {
+ YelpView *view;
+ gchar *uri;
+};
+
+static void
+yelp_install_info_free (YelpInstallInfo *info)
+{
+ g_object_unref (info->view);
+ if (info->uri)
+ g_free (info->uri);
+ g_free (info);
+}
+
+static void
+view_install_installed (GDBusConnection *connection,
+ GAsyncResult *res,
+ YelpInstallInfo *info)
+{
+ GError *error = NULL;
+ g_dbus_connection_call_finish (connection, res, &error);
+ if (error) {
+ const gchar *err = NULL;
+ if (error->domain == G_DBUS_ERROR) {
+ if (error->code == G_DBUS_ERROR_SERVICE_UNKNOWN)
+ err = _("You do not have PackageKit. Package install links require PackageKit.");
+ else
+ err = error->message;
+ }
+ if (err != NULL) {
+ GtkWidget *dialog = gtk_message_dialog_new (NULL, 0,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "%s", err);
+ gtk_dialog_run ((GtkDialog *) dialog);
+ gtk_widget_destroy (dialog);
+ }
+ g_error_free (error);
+ }
+}
+
+static void
+view_install_uri (YelpView *view,
+ const gchar *uri)
+{
+ GDBusConnection *connection;
+ GError *error;
+ gboolean help = FALSE, ghelp = FALSE;
+ GVariantBuilder *strv;
+ YelpInstallInfo *info;
+ guint32 xid = 0;
+ YelpViewPrivate *priv = GET_PRIV (view);
+ GtkWidget *gtkwin;
+ GdkWindow *gdkwin;
+ /* do not free */
+ gchar *pkg, *confirm_search;
+
+ if (g_str_has_prefix (uri, "install-help:")) {
+ help = TRUE;
+ pkg = (gchar *) uri + 13;
+ }
+ else if (g_str_has_prefix (uri, "install-ghelp:")) {
+ ghelp = TRUE;
+ pkg = (gchar *) uri + 14;
+ }
+ else if (g_str_has_prefix (uri, "install:")) {
+ pkg = (gchar *) uri + 8;
+ }
+
+ connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
+ if (connection == NULL) {
+ g_warning ("Unable to connect to dbus: %s", error->message);
+ g_error_free (error);
+ return;
+ }
+
+ info = g_new0 (YelpInstallInfo, 1);
+ info->view = g_object_ref (view);
+
+ gtkwin = gtk_widget_get_toplevel (GTK_WIDGET (view));
+ if (gtkwin != NULL && gtk_widget_is_toplevel (gtkwin)) {
+ gdkwin = gtk_widget_get_window (gtkwin);
+ if (gdkwin != NULL)
+ xid = gdk_x11_window_get_xid (gdkwin);
+ }
+
+ if (priv->state == YELP_VIEW_STATE_ERROR)
+ confirm_search = "hide-confirm-search";
+ else
+ confirm_search = "";
+
+ if (help || ghelp) {
+ const gchar * const *datadirs = g_get_system_data_dirs ();
+ gint datadirs_i;
+ gchar *docbook, *fname;
+ docbook = g_strconcat (pkg, ".xml", NULL);
+ strv = g_variant_builder_new (G_VARIANT_TYPE ("as"));
+ for (datadirs_i = 0; datadirs[datadirs_i] != NULL; datadirs_i++) {
+ if (ghelp) {
+ fname = g_build_filename (datadirs[datadirs_i], "gnome", "help",
+ pkg, "C", "index.page", NULL);
+ g_variant_builder_add (strv, "s", fname);
+ g_free (fname);
+ fname = g_build_filename (datadirs[datadirs_i], "gnome", "help",
+ pkg, "C", docbook, NULL);
+ g_variant_builder_add (strv, "s", fname);
+ g_free (fname);
+ }
+ else {
+ fname = g_build_filename (datadirs[datadirs_i], "help", "C",
+ pkg, "index.page", NULL);
+ g_variant_builder_add (strv, "s", fname);
+ g_free (fname);
+ fname = g_build_filename (datadirs[datadirs_i], "help", "C",
+ pkg, "index.docbook", NULL);
+ g_variant_builder_add (strv, "s", fname);
+ g_free (fname);
+ }
+ }
+ g_free (docbook);
+ info->uri = g_strdup (pkg);
+ g_dbus_connection_call (connection,
+ "org.freedesktop.PackageKit",
+ "/org/freedesktop/PackageKit",
+ "org.freedesktop.PackageKit.Modify",
+ "InstallProvideFiles",
+ g_variant_new ("(uass)", xid, strv, confirm_search),
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ G_MAXINT, NULL,
+ (GAsyncReadyCallback) view_install_installed,
+ info);
+ g_variant_builder_unref (strv);
+ }
+ else {
+ strv = g_variant_builder_new (G_VARIANT_TYPE ("as"));
+ g_variant_builder_add (strv, "s", pkg);
+ g_dbus_connection_call (connection,
+ "org.freedesktop.PackageKit",
+ "/org/freedesktop/PackageKit",
+ "org.freedesktop.PackageKit.Modify",
+ "InstallPackageNames",
+ g_variant_new ("(uass)", xid, strv, confirm_search),
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ G_MAXINT, NULL,
+ (GAsyncReadyCallback) view_install_installed,
+ info);
+ g_variant_builder_unref (strv);
+ }
+
+ g_object_unref (connection);
+}
+
static void
view_scrolled (GtkAdjustment *adjustment,
YelpView *view)
@@ -1404,6 +1580,7 @@ view_show_error_page (YelpView *view,
" color: %s;"
" background-color: %s;"
" }\n"
+ "p { margin: 1em 0 0 0; }\n"
"div.note {"
" padding: 6px;"
" border-color: %s;"
@@ -1427,22 +1604,29 @@ view_show_error_page (YelpView *view,
" font-weight: bold;"
" color: %s;"
" }\n"
+ "a { color: %s; text-decoration: none; }\n"
"</style>"
"</head><body>"
"<div class='note'><div class='inner'>"
- "<div class='title'>%s</div>"
- "<div class='contents'>%s</div>"
+ "%s<div class='contents'>%s%s</div>"
"</div></div>"
"</body></html>";
YelpSettings *settings = yelp_settings_get_default ();
- gchar *page, *title = NULL;
- gchar *textcolor, *bgcolor, *noteborder, *notebg, *titlecolor, *noteicon;
+ gchar *page, *title = NULL, *link = NULL, *title_m, *content_beg, *content_end;
+ gchar *textcolor, *bgcolor, *noteborder, *notebg, *titlecolor, *noteicon, *linkcolor;
gint iconsize;
+ gboolean doc404 = FALSE;
const gchar *left = (gtk_widget_get_direction((GtkWidget *) view) == GTK_TEXT_DIR_RTL) ? "right" : "left";
+
+ if (priv->uri && yelp_uri_get_document_type (priv->uri) == YELP_URI_DOCUMENT_TYPE_NOT_FOUND)
+ doc404 = TRUE;
if (error->domain == YELP_ERROR)
switch (error->code) {
case YELP_ERROR_NOT_FOUND:
- title = _("Not Found");
+ if (doc404)
+ title = _("Document Not Found");
+ else
+ title = _("Page Not Found");
break;
case YELP_ERROR_CANT_READ:
title = _("Cannot Read");
@@ -1452,17 +1636,45 @@ view_show_error_page (YelpView *view,
}
if (title == NULL)
title = _("Unknown Error");
+ title_m = g_markup_printf_escaped ("<div class='title'>%s</div>", title);
+
+ content_beg = g_markup_printf_escaped ("<p>%s</p>", error->message);
+ content_end = NULL;
+ if (doc404) {
+ gchar *struri = yelp_uri_get_document_uri (priv->uri);
+ /* do not free */
+ gchar *pkg = NULL, *scheme = NULL;
+ if (g_str_has_prefix (struri, "help:")) {
+ scheme = "help";
+ pkg = struri + 5;
+ }
+ else if (g_str_has_prefix (struri, "ghelp:")) {
+ scheme = "ghelp";
+ pkg = struri + 6;
+ }
+ if (pkg != NULL)
+ content_end = g_markup_printf_escaped ("<p><a href='install-%s:%s'>%s</a></p>",
+ scheme, pkg,
+ _("Search for packages containing this document."));
+ g_free (struri);
+ }
+
+ /* FIXME: reload page after install complete */
+
textcolor = yelp_settings_get_color (settings, YELP_SETTINGS_COLOR_TEXT);
bgcolor = yelp_settings_get_color (settings, YELP_SETTINGS_COLOR_BASE);
noteborder = yelp_settings_get_color (settings, YELP_SETTINGS_COLOR_RED_BORDER);
notebg = yelp_settings_get_color (settings, YELP_SETTINGS_COLOR_YELLOW_BASE);
titlecolor = yelp_settings_get_color (settings, YELP_SETTINGS_COLOR_TEXT_LIGHT);
+ linkcolor = yelp_settings_get_color (settings, YELP_SETTINGS_COLOR_LINK);
noteicon = yelp_settings_get_icon (settings, YELP_SETTINGS_ICON_WARNING);
iconsize = yelp_settings_get_icon_size (settings) + 6;
+
page = g_strdup_printf (errorpage,
textcolor, bgcolor, noteborder, notebg, noteicon,
left, iconsize, left, iconsize, left, iconsize,
- titlecolor, title, error->message);
+ titlecolor, linkcolor, title_m, content_beg,
+ (content_end != NULL) ? content_end : "");
g_object_set (view, "state", YELP_VIEW_STATE_ERROR, NULL);
g_signal_emit (view, signals[LOADED], 0);
g_signal_handler_block (view, priv->navigation_requested);
@@ -1473,6 +1685,10 @@ view_show_error_page (YelpView *view,
"file:///error/");
g_signal_handler_unblock (view, priv->navigation_requested);
g_error_free (error);
+ g_free (title_m);
+ g_free (content_beg);
+ if (content_end != NULL)
+ g_free (content_end);
g_free (page);
}
@@ -1538,7 +1754,18 @@ uri_resolved (YelpUri *uri,
switch (yelp_uri_get_document_type (uri)) {
case YELP_URI_DOCUMENT_TYPE_EXTERNAL:
- g_signal_emit (view, signals[EXTERNAL_URI], 0, uri);
+ g_object_set (view, "state", priv->prevstate, NULL);
+ struri = yelp_uri_get_canonical_uri (uri);
+ if (g_str_has_prefix (struri, "install:") ||
+ g_str_has_prefix (struri, "install-ghelp:") ||
+ g_str_has_prefix (struri, "install-help:")) {
+ view_install_uri (view, struri);
+ }
+ else {
+ gboolean result;
+ g_signal_emit (view, signals[EXTERNAL_URI], 0, uri, &result);
+ }
+ g_free (struri);
return;
case YELP_URI_DOCUMENT_TYPE_NOT_FOUND:
struri = yelp_uri_get_canonical_uri (uri);
diff --git a/libyelp/yelp-view.h b/libyelp/yelp-view.h
index 62275749..762dfead 100644
--- a/libyelp/yelp-view.h
+++ b/libyelp/yelp-view.h
@@ -50,6 +50,9 @@ struct _YelpView
struct _YelpViewClass
{
WebKitWebViewClass parent_class;
+
+ gboolean (* external_uri) (YelpView *view,
+ YelpUri *uri);
};
typedef enum {
diff --git a/src/yelp-application.c b/src/yelp-application.c
index 713ef6a3..692cb6c9 100644
--- a/src/yelp-application.c
+++ b/src/yelp-application.c
@@ -45,7 +45,6 @@ static gboolean editor_mode = FALSE;
enum {
READ_LATER_CHANGED,
- HELP_INSTALLED,
LAST_SIGNAL
};
static gint signals[LAST_SIGNAL] = { 0 };
@@ -172,14 +171,6 @@ yelp_application_class_init (YelpApplicationClass *klass)
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE, 1, G_TYPE_STRING);
- signals[HELP_INSTALLED] =
- g_signal_new ("help-installed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL,
- g_cclosure_marshal_VOID__STRING,
- G_TYPE_NONE, 1, G_TYPE_STRING);
-
g_type_class_add_private (klass, sizeof (YelpApplicationPrivate));
}
@@ -862,156 +853,6 @@ yelp_application_get_read_later (YelpApplication *app,
return g_settings_get_value (settings, "readlater");
}
-typedef struct _YelpHelpInstallInfo YelpHelpInstallInfo;
-struct _YelpHelpInstallInfo {
- YelpApplication *app;
- gchar *uri;
-};
-
-static void
-help_installed (GDBusConnection *connection,
- GAsyncResult *res,
- YelpHelpInstallInfo *info)
-{
- GError *error = NULL;
- g_dbus_connection_call_finish (connection, res, &error);
-
- if (error != NULL)
- g_error_free (error);
- else
- g_signal_emit (info->app, signals[HELP_INSTALLED], 0, info->uri);
-
- g_free (info->uri);
- g_object_unref (info->app);
- g_free (info);
-}
-
-void
-yelp_application_install_help (YelpApplication *app,
- const gchar *uri,
- GtkWindow *window)
-{
- const gchar * const *datadirs = g_get_system_data_dirs ();
- YelpApplicationPrivate *priv = GET_PRIV (app);
- gint datadirs_i;
- GVariantBuilder *strv;
- guint32 xid = 0;
- gboolean ghelp;
- const gchar *docname;
- gchar *docbook, *fname;
- YelpHelpInstallInfo *info;
-
- if (g_str_has_prefix (uri, "help:")) {
- ghelp = FALSE;
- docname = (const gchar *) uri + 5;
- }
- else if (g_str_has_prefix (uri, "ghelp:")) {
- ghelp = TRUE;
- docname = (const gchar *) uri + 6;
- }
- else
- return;
- docbook = g_strconcat (docname, ".xml", NULL);
-
- info = g_new0 (YelpHelpInstallInfo, 1);
- info->app = g_object_ref (app);
- info->uri = g_strdup (uri);
-
- if (window != NULL)
- xid = gdk_x11_window_get_xid (gtk_widget_get_window (GTK_WIDGET (window)));
-
- strv = g_variant_builder_new (G_VARIANT_TYPE ("as"));
- for (datadirs_i = 0; datadirs[datadirs_i] != NULL; datadirs_i++) {
- if (ghelp) {
- fname = g_build_filename (datadirs[datadirs_i], "gnome", "help",
- docname, "C", "index.page", NULL);
- g_variant_builder_add (strv, "s", fname);
- g_free (fname);
- fname = g_build_filename (datadirs[datadirs_i], "gnome", "help",
- docname, "C", docbook, NULL);
- g_variant_builder_add (strv, "s", fname);
- g_free (fname);
- }
- else {
- fname = g_build_filename (datadirs[datadirs_i], "help", "C",
- docname, "index.page", NULL);
- g_variant_builder_add (strv, "s", fname);
- g_free (fname);
- fname = g_build_filename (datadirs[datadirs_i], "help", "C",
- docname, "index.docbook", NULL);
- g_variant_builder_add (strv, "s", fname);
- g_free (fname);
- }
- }
- g_free (docbook);
- g_dbus_connection_call (priv->connection,
- "org.freedesktop.PackageKit",
- "/org/freedesktop/PackageKit",
- "org.freedesktop.PackageKit.Modify",
- "InstallProvideFiles",
- g_variant_new ("(uass)", xid, strv, "hide-warning"),
- NULL,
- G_DBUS_CALL_FLAGS_NONE,
- G_MAXINT, NULL,
- (GAsyncReadyCallback) help_installed,
- info);
- g_variant_builder_unref (strv);
-}
-
-static void
-packages_installed (GDBusConnection *connection,
- GAsyncResult *res,
- YelpApplication *app)
-{
- GError *error = NULL;
- g_dbus_connection_call_finish (connection, res, &error);
- if (error) {
- const gchar *err = NULL;
- if (error->domain == G_DBUS_ERROR) {
- if (error->code == G_DBUS_ERROR_SERVICE_UNKNOWN)
- err = _("You do not have PackageKit. Package install links require PackageKit.");
- else
- err = error->message;
- }
- if (err != NULL) {
- GtkWidget *dialog = gtk_message_dialog_new (NULL, 0,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE,
- "%s", err);
- gtk_dialog_run ((GtkDialog *) dialog);
- gtk_widget_destroy (dialog);
- }
- g_error_free (error);
- }
-}
-
-void
-yelp_application_install_package (YelpApplication *app,
- const gchar *pkg,
- const gchar *alt,
- GtkWindow *window)
-{
- GVariantBuilder *strv;
- YelpApplicationPrivate *priv = GET_PRIV (app);
- guint32 xid = 0;
- if (window != NULL)
- xid = gdk_x11_window_get_xid (gtk_widget_get_window (GTK_WIDGET (window)));
- strv = g_variant_builder_new (G_VARIANT_TYPE ("as"));
- g_variant_builder_add (strv, "s", pkg);
- g_dbus_connection_call (priv->connection,
- "org.freedesktop.PackageKit",
- "/org/freedesktop/PackageKit",
- "org.freedesktop.PackageKit.Modify",
- "InstallPackageNames",
- g_variant_new ("(uass)", xid, strv, ""),
- NULL,
- G_DBUS_CALL_FLAGS_NONE,
- -1, NULL,
- (GAsyncReadyCallback) packages_installed,
- app);
- g_variant_builder_unref (strv);
-}
-
static void
bookmarks_changed (GSettings *settings,
const gchar *key,
diff --git a/src/yelp-application.h b/src/yelp-application.h
index fa952942..28370227 100644
--- a/src/yelp-application.h
+++ b/src/yelp-application.h
@@ -88,12 +88,5 @@ void yelp_application_remove_read_later (YelpApplication *app,
const gchar *full_uri);
GVariant * yelp_application_get_read_later (YelpApplication *app,
const gchar *doc_uri);
-void yelp_application_install_help (YelpApplication *app,
- const gchar *uri,
- GtkWindow *window);
-void yelp_application_install_package (YelpApplication *app,
- const gchar *pkg,
- const gchar *alt,
- GtkWindow *window);
#endif /* __YELP_APPLICATION_H__ */
diff --git a/src/yelp-window.c b/src/yelp-window.c
index a0febbfc..04534c97 100644
--- a/src/yelp-window.c
+++ b/src/yelp-window.c
@@ -95,9 +95,6 @@ static void app_read_later_changed (YelpApplication *app,
static void app_bookmarks_changed (YelpApplication *app,
const gchar *doc_uri,
YelpWindow *window);
-static void app_help_installed (YelpApplication *app,
- const gchar *doc_uri,
- YelpWindow *window);
static void window_set_bookmarks (YelpWindow *window,
const gchar *doc_uri);
static void window_set_bookmark_action (YelpWindow *window);
@@ -119,9 +116,6 @@ static gboolean entry_focus_out (YelpLocationEntry *entry,
GdkEventFocus *event,
YelpWindow *window);
-static void view_external_uri (YelpView *view,
- YelpUri *uri,
- YelpWindow *window);
static void view_new_window (YelpView *view,
YelpUri *uri,
YelpWindow *window);
@@ -228,9 +222,7 @@ struct _YelpWindowPrivate {
GtkWidget *bookmarks_list;
GtkListStore *bookmarks_store;
gulong bookmarks_changed;
-
gulong read_later_changed;
- gulong help_installed;
/* no refs on these, owned by containers */
YelpView *view;
@@ -384,11 +376,6 @@ yelp_window_dispose (GObject *object)
priv->bookmarks_changed = 0;
}
- if (priv->help_installed) {
- g_source_remove (priv->help_installed);
- priv->help_installed = 0;
- }
-
if (priv->align_location) {
g_object_unref (priv->align_location);
priv->align_location = NULL;
@@ -607,7 +594,6 @@ window_construct (YelpWindow *window)
priv->read_later_vbox = gtk_vbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox), priv->read_later_vbox, FALSE, FALSE, 0);
- g_signal_connect (priv->view, "external-uri", G_CALLBACK (view_external_uri), window);
g_signal_connect (priv->view, "new-view-requested", G_CALLBACK (view_new_window), window);
g_signal_connect (priv->view, "loaded", G_CALLBACK (view_loaded), window);
g_signal_connect (priv->view, "notify::yelp-uri", G_CALLBACK (view_uri_selected), window);
@@ -624,10 +610,6 @@ window_construct (YelpWindow *window)
gtk_drag_dest_add_uri_targets (GTK_WIDGET (window));
g_signal_connect (window, "drag-data-received",
G_CALLBACK (window_drag_received), NULL);
-
- priv->help_installed =
- g_signal_connect (priv->application, "help-installed",
- G_CALLBACK (app_help_installed), window);
}
/******************************************************************************/
@@ -905,36 +887,6 @@ app_bookmarks_changed (YelpApplication *app,
g_object_unref (uri);
}
-static void
-app_help_installed (YelpApplication *app,
- const gchar *doc_uri,
- YelpWindow *window)
-{
- YelpViewState state;
- YelpWindowPrivate *priv = GET_PRIV (window);
-
- g_object_get (priv->view, "state", &state, NULL);
-
- if (state == YELP_VIEW_STATE_ERROR) {
- YelpUri *uri;
- gchar *view_doc_uri;
-
- g_object_get (priv->view, "yelp-uri", &uri, NULL);
- if (uri == NULL)
- return;
- view_doc_uri = yelp_uri_get_document_uri (uri);
-
- if (g_str_equal (view_doc_uri, doc_uri)) {
- gchar *fulluri = yelp_uri_get_canonical_uri (uri);
- yelp_view_load (priv->view, fulluri);
- g_free (fulluri);
- }
-
- g_free (view_doc_uri);
- g_object_unref (uri);
- }
-}
-
typedef struct _YelpMenuEntry YelpMenuEntry;
struct _YelpMenuEntry {
gchar *page_id;
@@ -1473,24 +1425,6 @@ entry_focus_out (YelpLocationEntry *entry,
}
static void
-view_external_uri (YelpView *view,
- YelpUri *uri,
- YelpWindow *window)
-{
- gchar *struri = yelp_uri_get_canonical_uri (uri);
- if (g_str_has_prefix (struri, "install:")) {
- YelpWindowPrivate *priv = GET_PRIV (window);
- gchar *pkg = struri + 8;
- yelp_application_install_package (priv->application, pkg, "",
- (GtkWindow *) window);
- }
- else
- g_app_info_launch_default_for_uri (struri, NULL, NULL);
-
- g_free (struri);
-}
-
-static void
view_new_window (YelpView *view,
YelpUri *uri,
YelpWindow *window)
@@ -1516,16 +1450,7 @@ view_loaded (YelpView *view,
doc_uri = yelp_uri_get_document_uri (uri);
gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (window)), NULL);
- if (state == YELP_VIEW_STATE_ERROR) {
- if (yelp_uri_get_document_type (uri) == YELP_URI_DOCUMENT_TYPE_NOT_FOUND) {
- if (g_str_has_prefix (doc_uri, "ghelp:") ||
- g_str_has_prefix (doc_uri, "help:")) {
- yelp_application_install_help (priv->application, doc_uri,
- (GtkWindow *) window);
- }
- }
- }
- else {
+ if (state != YELP_VIEW_STATE_ERROR) {
gchar *page_id, *icon, *title;
g_object_get (view,
"page-id", &page_id,