aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog11
-rw-r--r--embed/ephy-embed-shell.c14
-rw-r--r--embed/ephy-embed-shell.h3
-rw-r--r--src/ephy-shell.c65
4 files changed, 91 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 60296b842..379050725 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2005-01-24 Crispin Flowerday <gnome@flowerday.cx>
+
+ * embed/ephy-embed-shell.c: (impl_get_embed_single),
+ (ephy_embed_shell_get_embed_single), (ephy_embed_shell_class_init):
+ * embed/ephy-embed-shell.h:
+ * src/ephy-shell.c: (ephy_shell_class_init),
+ (ephy_shell_add_sidebar_cb), (impl_get_embed_single):
+
+ Add a alert when the user clicks on a sidebar link, telling
+ that the sidebar extension is required. Fixes bug #162685
+
2005-01-24 Christian Persch,,, <chpe@cvs.gnome.org>
* embed/mozilla/mozilla-embed.cpp:
diff --git a/embed/ephy-embed-shell.c b/embed/ephy-embed-shell.c
index 4802438a0..0dbb568af 100644
--- a/embed/ephy-embed-shell.c
+++ b/embed/ephy-embed-shell.c
@@ -169,8 +169,8 @@ ephy_embed_shell_get_downloader_view (EphyEmbedShell *shell)
return G_OBJECT (shell->priv->downloader_view);
}
-GObject *
-ephy_embed_shell_get_embed_single (EphyEmbedShell *shell)
+static GObject *
+impl_get_embed_single (EphyEmbedShell *shell)
{
g_return_val_if_fail (EPHY_IS_EMBED_SHELL (shell), NULL);
@@ -184,6 +184,14 @@ ephy_embed_shell_get_embed_single (EphyEmbedShell *shell)
}
GObject *
+ephy_embed_shell_get_embed_single (EphyEmbedShell *shell)
+{
+ EphyEmbedShellClass *klass = EPHY_EMBED_SHELL_GET_CLASS (shell);
+
+ return klass->get_embed_single (shell);
+}
+
+GObject *
ephy_embed_shell_get_encodings (EphyEmbedShell *shell)
{
g_return_val_if_fail (EPHY_IS_EMBED_SHELL (shell), NULL);
@@ -215,5 +223,7 @@ ephy_embed_shell_class_init (EphyEmbedShellClass *klass)
object_class->finalize = ephy_embed_shell_finalize;
+ klass->get_embed_single = impl_get_embed_single;
+
g_type_class_add_private (object_class, sizeof (EphyEmbedShellPrivate));
}
diff --git a/embed/ephy-embed-shell.h b/embed/ephy-embed-shell.h
index 4eb3234a9..b5897781f 100644
--- a/embed/ephy-embed-shell.h
+++ b/embed/ephy-embed-shell.h
@@ -50,6 +50,9 @@ struct _EphyEmbedShell
struct _EphyEmbedShellClass
{
GObjectClass parent_class;
+
+ /*< private >*/
+ GObject * (* get_embed_single) (EphyEmbedShell *shell);
};
GType ephy_embed_shell_get_type (void);
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,