From 2fe563af75ec8d4fc0127a6385307775dd2df368 Mon Sep 17 00:00:00 2001 From: Crispin Flowerday Date: Mon, 24 Jan 2005 22:48:05 +0000 Subject: Add a alert when the user clicks on a sidebar link, telling that the 2005-01-24 Crispin Flowerday * 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 --- ChangeLog | 11 ++++++++ embed/ephy-embed-shell.c | 14 +++++++++-- embed/ephy-embed-shell.h | 3 +++ src/ephy-shell.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++ 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 + + * 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,,, * 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); @@ -183,6 +183,14 @@ ephy_embed_shell_get_embed_single (EphyEmbedShell *shell) return G_OBJECT (shell->priv->embed_single); } +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) { @@ -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, -- cgit v1.2.3