aboutsummaryrefslogtreecommitdiffstats
path: root/src/ephy-shell.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ephy-shell.c')
-rw-r--r--src/ephy-shell.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/ephy-shell.c b/src/ephy-shell.c
index a05d0a759..08e493ab0 100644
--- a/src/ephy-shell.c
+++ b/src/ephy-shell.c
@@ -24,6 +24,7 @@
#include "ephy-shell.h"
#include "ephy-type-builtins.h"
#include "ephy-embed-shell.h"
+#include "ephy-embed-single.h"
#include "eel-gconf-extensions.h"
#include "ephy-prefs.h"
#include "ephy-file-helpers.h"
@@ -80,6 +81,8 @@ struct _EphyShellPrivate
GObject *prefs_dialog;
GObject *print_setup_dialog;
GList *del_on_exit;
+
+ gboolean embed_single_connected;
};
EphyShell *ephy_shell = NULL;
@@ -87,6 +90,7 @@ EphyShell *ephy_shell = NULL;
static void ephy_shell_class_init (EphyShellClass *klass);
static void ephy_shell_init (EphyShell *shell);
static void ephy_shell_finalize (GObject *object);
+static GObject *impl_get_embed_single (EphyEmbedShell *embed_shell);
static GObjectClass *parent_class = NULL;
@@ -135,14 +139,75 @@ static void
ephy_shell_class_init (EphyShellClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ EphyEmbedShellClass *embed_shell_class = EPHY_EMBED_SHELL_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
object_class->finalize = ephy_shell_finalize;
+ embed_shell_class->get_embed_single = impl_get_embed_single;
+
g_type_class_add_private (object_class, sizeof(EphyShellPrivate));
}
+static gboolean
+ephy_shell_add_sidebar_cb (EphyEmbedSingle *embed_single,
+ const char *url,
+ const char *title,
+ EphyShell *shell)
+{
+ EphySession *session;
+ EphyWindow *window;
+ GtkWidget *dialog;
+
+ session = EPHY_SESSION (ephy_shell_get_session (shell));
+ g_return_val_if_fail (EPHY_IS_SESSION (session), FALSE);
+
+ window = ephy_session_get_active_window (session);
+
+ dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ _("Sidebar extension required"));
+
+ gtk_window_set_title (GTK_WINDOW (dialog), _("Sidebar Extension Required"));
+ gtk_window_set_icon_name (GTK_WINDOW (dialog), "web-browser");
+
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ _("The link you clicked needs the sidebar extension to be "
+ "installed."));
+
+ g_signal_connect_swapped (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), dialog);
+
+ gtk_widget_show (dialog);
+
+ return TRUE;
+}
+
+static GObject*
+impl_get_embed_single (EphyEmbedShell *embed_shell)
+{
+ EphyShell *shell;
+ GObject *embed_single;
+
+ embed_single = EPHY_EMBED_SHELL_CLASS (parent_class)->get_embed_single (embed_shell);
+
+ shell = EPHY_SHELL (embed_shell);
+
+ if (embed_single != NULL && shell->priv->embed_single_connected == FALSE)
+ {
+ g_signal_connect_object (embed_single, "add-sidebar",
+ G_CALLBACK (ephy_shell_add_sidebar_cb),
+ embed_shell, G_CONNECT_AFTER);
+
+ shell->priv->embed_single_connected = TRUE;
+ }
+
+ return embed_single;
+}
+
static BonoboObject *
ephy_automation_factory_cb (BonoboGenericFactory *this_factory,
const char *iid,