aboutsummaryrefslogtreecommitdiffstats
path: root/embed/mozilla/mozilla-embed.cpp
diff options
context:
space:
mode:
authorChristian Persch <chpe@src.gnome.org>2008-04-04 05:09:48 +0800
committerChristian Persch <chpe@src.gnome.org>2008-04-04 05:09:48 +0800
commit39e984581c9ff4531e527456facf30f74574a64f (patch)
tree230720b87280b53b96058205a39f9d12b448e408 /embed/mozilla/mozilla-embed.cpp
parent18325ac0850ff053477580b448fc6d1b7f21afa8 (diff)
downloadgsoc2013-epiphany-39e984581c9ff4531e527456facf30f74574a64f.tar
gsoc2013-epiphany-39e984581c9ff4531e527456facf30f74574a64f.tar.gz
gsoc2013-epiphany-39e984581c9ff4531e527456facf30f74574a64f.tar.bz2
gsoc2013-epiphany-39e984581c9ff4531e527456facf30f74574a64f.tar.lz
gsoc2013-epiphany-39e984581c9ff4531e527456facf30f74574a64f.tar.xz
gsoc2013-epiphany-39e984581c9ff4531e527456facf30f74574a64f.tar.zst
gsoc2013-epiphany-39e984581c9ff4531e527456facf30f74574a64f.zip
Remove this too
svn path=/trunk/; revision=8184
Diffstat (limited to 'embed/mozilla/mozilla-embed.cpp')
-rw-r--r--embed/mozilla/mozilla-embed.cpp1530
1 files changed, 0 insertions, 1530 deletions
diff --git a/embed/mozilla/mozilla-embed.cpp b/embed/mozilla/mozilla-embed.cpp
deleted file mode 100644
index dfa3c23a1..000000000
--- a/embed/mozilla/mozilla-embed.cpp
+++ /dev/null
@@ -1,1530 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright © 2000-2004 Marco Pesenti Gritti
- * Copyright © 2003, 2004 Christian Persch
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "mozilla-config.h"
-#include "config.h"
-
-#include <nsStringAPI.h>
-
-#include <gtkmozembed.h>
-#include <nsIDOMKeyEvent.h>
-#include <nsIDOMMouseEvent.h>
-#include <nsIRequest.h>
-#include <nsIURI.h>
-#include <nsIWebNavigation.h>
-#include <nsIWebProgressListener.h>
-#include <nsMemory.h>
-
-#include <glib/gi18n.h>
-
-#include "EphyBrowser.h"
-#include "EphyUtils.h"
-#include "EventContext.h"
-
-#include "ephy-command-manager.h"
-#include "ephy-debug.h"
-#include "mozilla-embed.h"
-#include "ephy-embed-container.h"
-#include "ephy-embed-shell.h"
-#include "ephy-embed-single.h"
-#include "mozilla-embed-event.h"
-#include "mozilla-history-item.h"
-
-static void mozilla_embed_class_init (MozillaEmbedClass *klass);
-static void mozilla_embed_init (MozillaEmbed *gs);
-static void mozilla_embed_destroy (GtkObject *object);
-static void mozilla_embed_finalize (GObject *object);
-static void ephy_embed_iface_init (EphyEmbedIface *iface);
-
-static void mozilla_embed_location_changed_cb (GtkMozEmbed *embed,
- MozillaEmbed *membed);
-static void mozilla_embed_net_state_all_cb (GtkMozEmbed *embed,
- const char *aURI,
- gint state,
- guint status,
- MozillaEmbed *membed);
-static gboolean mozilla_embed_dom_mouse_click_cb(GtkMozEmbed *embed,
- gpointer dom_event,
- MozillaEmbed *membed);
-static gboolean mozilla_embed_dom_mouse_down_cb (GtkMozEmbed *embed,
- gpointer dom_event,
- MozillaEmbed *membed);
-static gboolean mozilla_embed_dom_key_press_cb (GtkMozEmbed *embed,
- gpointer dom_event,
- MozillaEmbed *membed);
-static void mozilla_embed_new_window_cb (GtkMozEmbed *embed,
- GtkMozEmbed **newEmbed,
- guint chrome_mask,
- MozillaEmbed *membed);
-static void mozilla_embed_security_change_cb (GtkMozEmbed *embed,
- gpointer request,
- PRUint32 state,
- MozillaEmbed *membed);
-static void mozilla_embed_title_change_cb (GtkMozEmbed *embed,
- MozillaEmbed *membed);
-static void mozilla_embed_link_message_cb (GtkMozEmbed *embed,
- MozillaEmbed *membed);
-static void mozilla_embed_visibility_cb (GtkMozEmbed *embed,
- gboolean visibility,
- MozillaEmbed *membed);
-static gboolean mozilla_embed_open_uri_cb (GtkMozEmbed *embed,
- const char *uri,
- MozillaEmbed *membed);
-static void mozilla_embed_size_to_cb (GtkMozEmbed *embed,
- int width,
- int height,
- MozillaEmbed *membed);
-
-static EphyEmbedSecurityLevel mozilla_embed_security_level (PRUint32 state);
-
-#define MOZILLA_EMBED_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), MOZILLA_TYPE_EMBED, MozillaEmbedPrivate))
-
-typedef enum
-{
- MOZILLA_EMBED_LOAD_STARTED,
- MOZILLA_EMBED_LOAD_REDIRECTING,
- MOZILLA_EMBED_LOAD_LOADING,
- MOZILLA_EMBED_LOAD_STOPPED
-} MozillaEmbedLoadState;
-
-struct MozillaEmbedPrivate
-{
- EphyBrowser *browser;
- GtkMozEmbed *moz_embed;
- MozillaEmbedLoadState load_state;
-
- guint idle_resize_handler;
-};
-
-#define WINDOWWATCHER_CONTRACTID "@mozilla.org/embedcomp/window-watcher;1"
-
-static void
-impl_manager_do_command (EphyCommandManager *manager,
- const char *command)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED(manager)->priv;
-
- mpriv->browser->DoCommand (command);
-}
-
-static gboolean
-impl_manager_can_do_command (EphyCommandManager *manager,
- const char *command)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED(manager)->priv;
- nsresult rv;
- PRBool enabled;
-
- rv = mpriv->browser->GetCommandState (command, &enabled);
-
- return NS_SUCCEEDED (rv) ? enabled : FALSE;
-}
-
-static void
-ephy_command_manager_iface_init (EphyCommandManagerIface *iface)
-{
- iface->do_command = impl_manager_do_command;
- iface->can_do_command = impl_manager_can_do_command;
-}
-
-G_DEFINE_TYPE_WITH_CODE (MozillaEmbed, mozilla_embed, EPHY_TYPE_BASE_EMBED,
- G_IMPLEMENT_INTERFACE (EPHY_TYPE_EMBED,
- ephy_embed_iface_init)
- G_IMPLEMENT_INTERFACE (EPHY_TYPE_COMMAND_MANAGER,
- ephy_command_manager_iface_init))
-
-static void
-impl_close (EphyEmbed *embed)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED (embed)->priv;
-
- mpriv->browser->Close ();
-}
-
-static void
-mozilla_embed_realize (GtkWidget *widget)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED (widget)->priv;
-
- GTK_WIDGET_CLASS (mozilla_embed_parent_class)->realize (widget);
-
- gtk_widget_realize (GTK_WIDGET (mpriv->moz_embed));
- /* Initialise our helper class */
- nsresult rv;
- rv = mpriv->browser->Init (EPHY_EMBED (widget));
- if (NS_FAILED (rv))
- {
- g_warning ("EphyBrowser initialization failed for %p\n", widget);
- return;
- }
-}
-
-static GObject *
-mozilla_embed_constructor (GType type, guint n_construct_properties,
- GObjectConstructParam *construct_params)
-{
- g_object_ref (embed_shell);
-
- /* we depend on single because of mozilla initialization */
- ephy_embed_shell_get_embed_single (embed_shell);
-
- return G_OBJECT_CLASS (mozilla_embed_parent_class)->constructor (type, n_construct_properties,
- construct_params);
-}
-
-static void
-mozilla_embed_size_allocate (GtkWidget *widget,
- GtkAllocation *allocation)
-{
- GtkWidget *child;
- GtkAllocation invalid = { -1, -1, 1, 1 };
-
- widget->allocation = *allocation;
-
- child = GTK_BIN (widget)->child;
- g_return_if_fail (child != NULL);
-
- /* only resize if we're mapped (bug #128191),
- * or if this is the initial size-allocate (bug #156854).
- */
- if (GTK_WIDGET_MAPPED (child) ||
- memcmp (&child->allocation, &invalid, sizeof (GtkAllocation)) == 0)
- {
- gtk_widget_size_allocate (child, allocation);
- }
-}
-
-static void
-mozilla_embed_grab_focus (GtkWidget *widget)
-{
- GtkWidget *child;
-
- /* What we want to focus here is the MozContainer inside the
- * GtkMozEmbed, because the GtkMozEmbed itself does not gain focus.
- */
- child = gtk_bin_get_child (GTK_BIN (MOZILLA_EMBED (widget)->priv->moz_embed));
-
- if (child && GTK_WIDGET_REALIZED (child))
- gtk_widget_grab_focus (child);
- else
- g_warning ("Need to realize the embed before grabbing focus!\n");
-}
-
-static void
-mozilla_embed_dispose (GObject *object)
-{
- MozillaEmbedPrivate *priv = MOZILLA_EMBED (object)->priv;
-
- if (priv->idle_resize_handler != 0)
- {
- g_source_remove (priv->idle_resize_handler);
- priv->idle_resize_handler = 0;
- }
-
- G_OBJECT_CLASS (mozilla_embed_parent_class)->dispose (object);
-}
-
-static void
-mozilla_embed_class_init (MozillaEmbedClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
- object_class->constructor = mozilla_embed_constructor;
- object_class->finalize = mozilla_embed_finalize;
- object_class->dispose = mozilla_embed_dispose;
-
- gtk_object_class->destroy = mozilla_embed_destroy;
-
- widget_class->realize = mozilla_embed_realize;
- widget_class->size_allocate = mozilla_embed_size_allocate;
- widget_class->grab_focus = mozilla_embed_grab_focus;
-
- g_type_class_add_private (object_class, sizeof(MozillaEmbedPrivate));
-}
-
-static void
-mozilla_embed_init (MozillaEmbed *membed)
-{
- MozillaEmbedPrivate *priv;
- GtkWidget *embed;
-
- membed->priv = MOZILLA_EMBED_GET_PRIVATE (membed);
- priv = membed->priv;
-
- embed = gtk_moz_embed_new ();
- priv->moz_embed = GTK_MOZ_EMBED (embed);
- gtk_container_add (GTK_CONTAINER (membed), embed);
- gtk_widget_show (embed);
-
- priv->browser = new EphyBrowser ();
-
- g_signal_connect_object (embed, "location",
- G_CALLBACK (mozilla_embed_location_changed_cb),
- membed, (GConnectFlags) 0);
- g_signal_connect_object (embed, "net_state_all",
- G_CALLBACK (mozilla_embed_net_state_all_cb),
- membed, (GConnectFlags) 0);
- g_signal_connect_object (embed, "dom_mouse_click",
- G_CALLBACK (mozilla_embed_dom_mouse_click_cb),
- membed, (GConnectFlags) 0);
- g_signal_connect_object (embed, "dom_mouse_down",
- G_CALLBACK (mozilla_embed_dom_mouse_down_cb),
- membed, (GConnectFlags) 0);
- g_signal_connect_object (embed, "dom-key-press",
- G_CALLBACK (mozilla_embed_dom_key_press_cb),
- membed, (GConnectFlags) 0);
- g_signal_connect_object (embed, "new_window",
- G_CALLBACK (mozilla_embed_new_window_cb),
- membed, (GConnectFlags) 0);
- g_signal_connect_object (embed, "security_change",
- G_CALLBACK (mozilla_embed_security_change_cb),
- membed, (GConnectFlags) 0);
- g_signal_connect_object (embed, "title",
- G_CALLBACK (mozilla_embed_title_change_cb),
- membed, (GConnectFlags) 0);
- g_signal_connect_object (embed, "link_message",
- G_CALLBACK (mozilla_embed_link_message_cb),
- membed, (GConnectFlags)0);
- g_signal_connect_object (embed, "open_uri",
- G_CALLBACK (mozilla_embed_open_uri_cb),
- membed,(GConnectFlags) 0);
- g_signal_connect_object (embed, "visibility",
- G_CALLBACK (mozilla_embed_visibility_cb),
- membed, (GConnectFlags) 0);
- g_signal_connect_object (embed, "size_to",
- G_CALLBACK (mozilla_embed_size_to_cb),
- membed, (GConnectFlags) 0);
-}
-
-gpointer
-_mozilla_embed_get_ephy_browser (MozillaEmbed *embed)
-{
- g_return_val_if_fail (embed->priv->browser != NULL, NULL);
-
- return embed->priv->browser;
-}
-
-static void
-mozilla_embed_destroy (GtkObject *object)
-{
- MozillaEmbed *embed = MOZILLA_EMBED (object);
-
- if (embed->priv->browser)
- {
- embed->priv->browser->Destroy();
- }
-
- GTK_OBJECT_CLASS (mozilla_embed_parent_class)->destroy (object);
-}
-
-static void
-mozilla_embed_finalize (GObject *object)
-{
- MozillaEmbed *embed = MOZILLA_EMBED (object);
-
- if (embed->priv->browser)
- {
- delete embed->priv->browser;
- embed->priv->browser = nsnull;
- }
-
- G_OBJECT_CLASS (mozilla_embed_parent_class)->finalize (object);
-
- g_object_unref (embed_shell);
-}
-
-static void
-impl_load_url (EphyEmbed *embed,
- const char *url)
-{
- GtkMozEmbed *moz_embed = MOZILLA_EMBED (embed)->priv->moz_embed;
- gtk_moz_embed_load_url (moz_embed, url);
-}
-
-static char * impl_get_location (EphyEmbed *embed, gboolean toplevel);
-
-static void
-impl_load (EphyEmbed *embed,
- const char *url,
- EphyEmbedLoadFlags flags,
- EphyEmbed *preview_embed)
-{
- EphyBrowser *browser;
-
- browser = MOZILLA_EMBED(embed)->priv->browser;
- g_return_if_fail (browser != NULL);
-
- nsCOMPtr<nsIURI> uri;
- if (preview_embed != NULL)
- {
- EphyBrowser *pbrowser;
-
- pbrowser = MOZILLA_EMBED(preview_embed)->priv->browser;
- if (pbrowser != NULL)
- {
- pbrowser->GetDocumentURI (getter_AddRefs (uri));
- }
- }
-
-#ifdef HAVE_GECKO_1_8_1
- if (flags & EPHY_EMBED_LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP)
- {
- browser->LoadURI (url, nsIWebNavigation::LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP, uri);
- }
- else
-#endif /* HAVE_GECKO_1_8_1 */
- {
- browser->LoadURI (url, nsIWebNavigation::LOAD_FLAGS_NONE, uri);
- }
-}
-
-static void
-impl_stop_load (EphyEmbed *embed)
-{
- GtkMozEmbed *moz_embed = MOZILLA_EMBED (embed)->priv->moz_embed;
- gtk_moz_embed_stop_load (moz_embed);
-}
-
-static gboolean
-impl_can_go_back (EphyEmbed *embed)
-{
- GtkMozEmbed *moz_embed = MOZILLA_EMBED (embed)->priv->moz_embed;
- return gtk_moz_embed_can_go_back (moz_embed);
-}
-
-static gboolean
-impl_can_go_forward (EphyEmbed *embed)
-{
- GtkMozEmbed *moz_embed = MOZILLA_EMBED (embed)->priv->moz_embed;
- return gtk_moz_embed_can_go_forward (moz_embed);
-}
-
-static gboolean
-mozilla_embed_get_uri_parent (MozillaEmbed *membed,
- const char *aUri,
- nsCString &aParent)
-{
- nsresult rv;
- nsCString encoding;
- rv = membed->priv->browser->GetEncoding (encoding);
- if (NS_FAILED (rv)) return FALSE;
-
- /* Check for HTML anchors */
- nsCOMPtr<nsIURI> uri;
- const char *anchor = strrchr (aUri, '#');
- if (anchor)
- {
- aParent.Assign (aUri);
- aParent.SetLength (anchor - aUri);
-
- return TRUE;
- }
-
- rv = EphyUtils::NewURI (getter_AddRefs(uri), nsCString(aUri), encoding.get());
- if (NS_FAILED(rv) || !uri) return FALSE;
-
- /* Don't support going 'up' with chrome url's, mozilla handily
- * fixes them up for us, so it doesn't work properly, see
- * rdf/chrome/src/nsChromeProtocolHandler.cpp::NewURI()
- * (the Canonify() call)
- */
- nsCString scheme;
- rv = uri->GetScheme (scheme);
- if (NS_FAILED(rv) || !scheme.Length()) return FALSE;
- if (strcmp (scheme.get(), "chrome") == 0) return FALSE;
-
- nsCString path;
- rv = uri->GetPath(path);
- if (NS_FAILED(rv) || !path.Length()) return FALSE;
- if (strcmp (path.get (), "/") == 0) return FALSE;
-
- const char *slash = strrchr (path.BeginReading(), '/');
- if (!slash) return FALSE;
-
- if (slash[1] == '\0')
- {
- /* ends with a slash - a directory, go to parent */
- rv = uri->Resolve (nsCString(".."), aParent);
- }
- else
- {
- /* it's a file, go to the directory */
- rv = uri->Resolve (nsCString("."), aParent);
- }
-
- return NS_SUCCEEDED (rv);
-}
-
-static gboolean
-impl_can_go_up (EphyEmbed *embed)
-{
- MozillaEmbed *membed = MOZILLA_EMBED (embed);
- char *address;
- gboolean result;
-
- address = ephy_embed_get_location (embed, TRUE);
- if (address == NULL) return FALSE;
-
- nsCString parent;
- result = mozilla_embed_get_uri_parent (membed, address, parent);
- g_free (address);
-
- return result;
-}
-
-static GSList *
-impl_get_go_up_list (EphyEmbed *embed)
-{
- MozillaEmbed *membed = MOZILLA_EMBED (embed);
- GSList *l = NULL;
- char *address, *s;
-
- address = ephy_embed_get_location (embed, TRUE);
- if (address == NULL) return NULL;
-
- s = address;
- nsCString parent;
- while (mozilla_embed_get_uri_parent (membed, s, parent))
- {
- s = g_strdup (parent.get());
- l = g_slist_prepend (l, s);
- }
-
- g_free (address);
-
- return g_slist_reverse (l);
-}
-
-static void
-impl_go_back (EphyEmbed *embed)
-{
- GtkMozEmbed *moz_embed = MOZILLA_EMBED (embed)->priv->moz_embed;
- gtk_moz_embed_go_back (moz_embed);
-}
-
-static void
-impl_go_forward (EphyEmbed *embed)
-{
- GtkMozEmbed *moz_embed = MOZILLA_EMBED (embed)->priv->moz_embed;
- gtk_moz_embed_go_forward (moz_embed);
-}
-
-static void
-impl_go_up (EphyEmbed *embed)
-{
- MozillaEmbed *membed = MOZILLA_EMBED (embed);
- char *uri;
-
- uri = ephy_embed_get_location (embed, TRUE);
- if (uri == NULL) return;
-
- gboolean rv;
- nsCString parent_uri;
- rv = mozilla_embed_get_uri_parent (membed, uri, parent_uri);
- g_free (uri);
-
- g_return_if_fail (rv != FALSE);
-
- ephy_embed_load_url (embed, parent_uri.get ());
-}
-
-static char *
-impl_get_js_status (EphyEmbed *embed)
-{
- GtkMozEmbed *moz_embed = MOZILLA_EMBED (embed)->priv->moz_embed;
- return gtk_moz_embed_get_js_status (moz_embed);
-}
-
-static char *
-impl_get_location (EphyEmbed *embed,
- gboolean toplevel)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED(embed)->priv;
- nsresult rv;
-
- nsCOMPtr<nsIURI> uri;
- if (toplevel)
- {
- rv = mpriv->browser->GetDocumentURI (getter_AddRefs (uri));
- }
- else
- {
- rv = mpriv->browser->GetTargetDocumentURI (getter_AddRefs (uri));
- }
-
- if (NS_FAILED (rv)) return NULL;
-
- nsCOMPtr<nsIURI> furi;
- rv = uri->Clone (getter_AddRefs (furi));
- /* Some nsIURI impls return NS_OK even though they didn't put anything in the outparam!! */
- if (NS_FAILED (rv) || !furi) furi.swap(uri);
-
- /* Hide password part */
- nsCString user;
- furi->GetUsername (user);
- furi->SetUserPass (user);
-
- nsCString url;
- furi->GetSpec (url);
-
- return url.Length() ? g_strdup (url.get()) : NULL;
-}
-
-static void
-impl_reload (EphyEmbed *embed,
- gboolean force)
-{
- GtkMozEmbed *moz_embed = MOZILLA_EMBED (embed)->priv->moz_embed;
- guint32 mflags = GTK_MOZ_EMBED_FLAG_RELOADNORMAL;
-
- if (force)
- {
- mflags = GTK_MOZ_EMBED_FLAG_RELOADBYPASSPROXYANDCACHE;
- }
-
- gtk_moz_embed_reload (moz_embed, mflags);
-}
-
-static void
-impl_set_zoom (EphyEmbed *embed,
- float zoom)
-{
- EphyBrowser *browser;
- nsresult rv;
-
- g_return_if_fail (zoom > 0.0);
-
- browser = MOZILLA_EMBED(embed)->priv->browser;
- g_return_if_fail (browser != NULL);
-
- rv = browser->SetZoom (zoom);
-
- if (NS_SUCCEEDED (rv))
- {
- g_signal_emit_by_name (embed, "ge_zoom_change", zoom);
- }
-}
-
-static float
-impl_get_zoom (EphyEmbed *embed)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED(embed)->priv;
- float f;
-
- nsresult rv;
- rv = mpriv->browser->GetZoom (&f);
-
- if (NS_SUCCEEDED (rv))
- {
- return f;
- }
-
- return 1.0;
-}
-
-static void
-impl_scroll_lines (EphyEmbed *embed,
- int num_lines)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED(embed)->priv;
-
- mpriv->browser->ScrollLines (num_lines);
-}
-
-static void
-impl_scroll_pages (EphyEmbed *embed,
- int num_pages)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED(embed)->priv;
-
- mpriv->browser->ScrollPages (num_pages);
-}
-
-static void
-impl_scroll_pixels (EphyEmbed *embed,
- int dx,
- int dy)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED(embed)->priv;
-
- mpriv->browser->ScrollPixels (dx, dy);
-}
-
-static int
-impl_shistory_n_items (EphyEmbed *embed)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED(embed)->priv;
- nsresult rv;
- int count, index;
-
- rv = mpriv->browser->GetSHInfo (&count, &index);
-
- return NS_SUCCEEDED(rv) ? count : 0;
-}
-
-static int
-impl_shistory_get_pos (EphyEmbed *embed)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED(embed)->priv;
- nsresult rv;
- int count, index;
-
- rv = mpriv->browser->GetSHInfo (&count, &index);
-
- return NS_SUCCEEDED(rv) ? index : 0;
-}
-
-static void
-impl_shistory_copy (EphyEmbed *source,
- EphyEmbed *dest,
- gboolean copy_back,
- gboolean copy_forward,
- gboolean copy_current)
-{
- MozillaEmbedPrivate *spriv = MOZILLA_EMBED(source)->priv;
- MozillaEmbedPrivate *dpriv = MOZILLA_EMBED(dest)->priv;
-
- spriv->browser->CopySHistory(dpriv->browser, copy_back,
- copy_forward, copy_current);
-}
-
-static void
-impl_get_security_level (EphyEmbed *embed,
- EphyEmbedSecurityLevel *level,
- char **description)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED (embed)->priv;
-
- if (level) *level = EPHY_EMBED_STATE_IS_UNKNOWN;
- if (description) *description = NULL;
-
- nsresult rv;
- PRUint32 state;
- nsCString desc;
- rv = mpriv->browser->GetSecurityInfo (&state, desc);
- if (NS_FAILED (rv)) return;
-
- if (level) *level = mozilla_embed_security_level (state);
- if (description) *description = g_strdup (desc.get());
-}
-
-static void
-impl_show_page_certificate (EphyEmbed *embed)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED (embed)->priv;
-
- mpriv->browser->ShowCertificate ();
-}
-
-static void
-impl_print (EphyEmbed *embed)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED(embed)->priv;
-
- mpriv->browser->Print ();
-}
-
-static void
-impl_set_print_preview_mode (EphyEmbed *embed, gboolean preview_mode)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED(embed)->priv;
-
- mpriv->browser->SetPrintPreviewMode (preview_mode);
-}
-
-static int
-impl_print_preview_n_pages (EphyEmbed *embed)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED(embed)->priv;
- nsresult rv;
- int num;
-
- rv = mpriv->browser->PrintPreviewNumPages(&num);
-
- return NS_SUCCEEDED (rv) ? num : 0;
-}
-
-static void
-impl_print_preview_navigate (EphyEmbed *embed,
- EphyEmbedPrintPreviewNavType type,
- int page)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED(embed)->priv;
-
- mpriv->browser->PrintPreviewNavigate(type, page);
-}
-
-static void
-impl_set_encoding (EphyEmbed *embed,
- const char *encoding)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED(embed)->priv;
- nsresult rv;
- nsCString currEnc;
-
- g_return_if_fail (encoding != NULL);
-
- rv = mpriv->browser->GetEncoding (currEnc);
- if (NS_FAILED (rv)) return;
-
- if (strcmp (currEnc.get(), encoding) != 0 ||
- encoding[0] == '\0' && !ephy_embed_has_automatic_encoding (embed))
- {
- rv = mpriv->browser->ForceEncoding (encoding);
- if (NS_FAILED (rv)) return;
- }
-
- gtk_moz_embed_reload (mpriv->moz_embed,
- GTK_MOZ_EMBED_FLAG_RELOADCHARSETCHANGE);
-}
-
-static char *
-impl_get_encoding (EphyEmbed *embed)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED(embed)->priv;
- nsresult rv;
- nsCString encoding;
-
- rv = mpriv->browser->GetEncoding (encoding);
-
- if (NS_FAILED (rv) || !encoding.Length())
- {
- return NULL;
- }
-
- return g_strdup (encoding.get());
-}
-
-static gboolean
-impl_has_automatic_encoding (EphyEmbed *embed)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED(embed)->priv;
- nsresult rv;
- nsCString encoding;
-
- rv = mpriv->browser->GetForcedEncoding (encoding);
-
- if (NS_FAILED (rv) || !encoding.Length())
- {
- return TRUE;
- }
-
- return FALSE;
-}
-
-static gboolean
-impl_has_modified_forms (EphyEmbed *embed)
-{
- MozillaEmbedPrivate *mpriv = MOZILLA_EMBED(embed)->priv;
- nsresult rv;
-
- PRBool modified;
- rv = mpriv->browser->GetHasModifiedForms (&modified);
-
- return NS_SUCCEEDED (rv) ? modified : FALSE;
-}
-
-static EphyHistoryItem*
-mozilla_get_nth_history_item (MozillaEmbed *embed,
- gboolean is_relative,
- int nth)
-{
- EphyHistoryItem *item = NULL;
-
- if (is_relative)
- {
- nth += impl_shistory_get_pos (EPHY_EMBED (embed));
- }
-
- if (nth >= 0 && nth <= impl_shistory_n_items (EPHY_EMBED (embed)))
- {
- item = (EphyHistoryItem*)mozilla_history_item_new (embed, nth);
- }
-
- return item;
-}
-
-static GList*
-mozilla_construct_history_list (MozillaEmbed *embed, int start, int end)
-{
- GList *list = NULL;
- EphyHistoryItem *item;
-
- while (start != end)
- {
- item = mozilla_get_nth_history_item (embed, FALSE, start);
- list = g_list_prepend (list, item);
-
- if (start < end)
- start++;
- else
- start--;
- }
-
- return g_list_reverse (list);
-}
-
-static GList*
-impl_get_backward_history (EphyEmbed *embed)
-{
- MozillaEmbed *membed = MOZILLA_EMBED (embed);
- int start = impl_shistory_get_pos (embed) + -1;
-
- return mozilla_construct_history_list (membed, start, -1);
-}
-
-static GList*
-impl_get_forward_history (EphyEmbed *embed)
-{
- MozillaEmbed *membed = MOZILLA_EMBED (embed);
- int start = impl_shistory_get_pos (embed) + 1;
- int end = impl_shistory_n_items (embed);
-
- return mozilla_construct_history_list (membed, start, end);
-}
-
-static EphyHistoryItem*
-impl_get_next_history_item (EphyEmbed *embed)
-{
- return mozilla_get_nth_history_item (MOZILLA_EMBED (embed),
- TRUE,
- +1);
-}
-
-static EphyHistoryItem*
-impl_get_previous_history_item (EphyEmbed *embed)
-{
- return mozilla_get_nth_history_item (MOZILLA_EMBED (embed),
- TRUE,
- -1);
-}
-
-static void
-impl_go_to_history_item (EphyEmbed *embed, EphyHistoryItem *item)
-{
- MozillaHistoryItem *mitem = MOZILLA_HISTORY_ITEM (item);
-
- MOZILLA_EMBED (embed)->priv->browser->GoToHistoryIndex (mitem->nth);
-}
-
-static void
-mozilla_embed_location_changed_cb (GtkMozEmbed *embed,
- MozillaEmbed *membed)
-{
- char *location;
- EphyBaseEmbed *bembed = EPHY_BASE_EMBED (membed);
-
- location = gtk_moz_embed_get_location (embed);
-
- ephy_base_embed_location_changed (bembed, location);
-
- g_free (location);
-}
-
-static void
-mozilla_embed_link_message_cb (GtkMozEmbed *embed,
- MozillaEmbed *membed)
-{
- char *link_message = gtk_moz_embed_get_link_message (embed);
- ephy_base_embed_set_link_message (EPHY_BASE_EMBED (membed), link_message);
- g_free (link_message);
-}
-
-static void
-update_load_state (MozillaEmbed *membed, gint state)
-{
- MozillaEmbedPrivate *priv = membed->priv;
- GtkMozEmbed *moz_embed = priv->moz_embed;
-
- if (state & GTK_MOZ_EMBED_FLAG_IS_DOCUMENT &&
- state & (GTK_MOZ_EMBED_FLAG_START | GTK_MOZ_EMBED_FLAG_STOP))
- {
- g_signal_emit_by_name (membed, "ge-document-type",
- priv->browser->GetDocumentType ());
- }
-
- if (state & GTK_MOZ_EMBED_FLAG_RESTORING &&
- priv->load_state == MOZILLA_EMBED_LOAD_STARTED)
- {
- priv->load_state = MOZILLA_EMBED_LOAD_LOADING;
-
- char *address;
- address = gtk_moz_embed_get_location (moz_embed);
- g_signal_emit_by_name (membed, "new-document-now", address);
- ephy_base_embed_popups_manager_reset (EPHY_BASE_EMBED (membed));
- ephy_base_embed_restore_zoom_level (EPHY_BASE_EMBED (membed), address);
- g_free (address);
- }
-
- if (state & GTK_MOZ_EMBED_FLAG_IS_NETWORK)
- {
- if (state & GTK_MOZ_EMBED_FLAG_START)
- {
- priv->load_state = MOZILLA_EMBED_LOAD_STARTED;
- }
- else if (state & GTK_MOZ_EMBED_FLAG_STOP)
- {
- priv->load_state = MOZILLA_EMBED_LOAD_STOPPED;
- }
- }
- else if (state & GTK_MOZ_EMBED_FLAG_START &&
- state & GTK_MOZ_EMBED_FLAG_IS_REQUEST)
- {
- if (priv->load_state == MOZILLA_EMBED_LOAD_REDIRECTING)
- {
- priv->load_state = MOZILLA_EMBED_LOAD_STARTED;
- }
- else if (priv->load_state != MOZILLA_EMBED_LOAD_LOADING)
- {
- priv->load_state = MOZILLA_EMBED_LOAD_LOADING;
-
- char *address;
- address = gtk_moz_embed_get_location (moz_embed);
- ephy_base_embed_popups_manager_reset (EPHY_BASE_EMBED (membed));
- ephy_base_embed_restore_zoom_level (EPHY_BASE_EMBED (membed), address);
- g_free (address);
- }
- }
- else if (state & GTK_MOZ_EMBED_FLAG_REDIRECTING &&
- priv->load_state == MOZILLA_EMBED_LOAD_STARTED)
- {
- priv->load_state = MOZILLA_EMBED_LOAD_REDIRECTING;
- }
-}
-
-static void
-mozilla_embed_net_state_all_cb (GtkMozEmbed *embed, const char *aURI,
- gint state, guint status,
- MozillaEmbed *membed)
-{
- EphyEmbedNetState estate = EPHY_EMBED_STATE_UNKNOWN;
- int i;
-
- struct
- {
- guint state;
- EphyEmbedNetState embed_state;
- }
- conversion_map [] =
- {
- { GTK_MOZ_EMBED_FLAG_START, EPHY_EMBED_STATE_START },
- { GTK_MOZ_EMBED_FLAG_STOP, EPHY_EMBED_STATE_STOP },
- { GTK_MOZ_EMBED_FLAG_REDIRECTING, EPHY_EMBED_STATE_REDIRECTING },
- { GTK_MOZ_EMBED_FLAG_TRANSFERRING, EPHY_EMBED_STATE_TRANSFERRING },
- { GTK_MOZ_EMBED_FLAG_NEGOTIATING, EPHY_EMBED_STATE_NEGOTIATING },
- { GTK_MOZ_EMBED_FLAG_IS_REQUEST, EPHY_EMBED_STATE_IS_REQUEST },
- { GTK_MOZ_EMBED_FLAG_IS_DOCUMENT, EPHY_EMBED_STATE_IS_DOCUMENT },
- { GTK_MOZ_EMBED_FLAG_IS_NETWORK, EPHY_EMBED_STATE_IS_NETWORK },
- { GTK_MOZ_EMBED_FLAG_RESTORING, EPHY_EMBED_STATE_RESTORING },
- { 0, EPHY_EMBED_STATE_UNKNOWN }
- };
-
- for (i = 0; conversion_map[i].state != 0; i++)
- {
- if (state & conversion_map[i].state)
- {
- estate = (EphyEmbedNetState) (estate | conversion_map[i].embed_state);
- }
- }
-
- update_load_state (membed, state);
- ephy_base_embed_update_from_net_state (EPHY_BASE_EMBED (membed), aURI, (EphyEmbedNetState)estate);
-}
-
-static gboolean
-mozilla_embed_emit_mouse_signal (MozillaEmbed *embed,
- gpointer dom_event,
- const char *signal_name)
-{
- MozillaEmbedPrivate *mpriv = embed->priv;
- MozillaEmbedEvent *info;
- EventContext event_context;
- gint return_value = FALSE;
- nsresult rv;
-
- if (dom_event == NULL) return FALSE;
-
- nsCOMPtr<nsIDOMMouseEvent> ev = static_cast<nsIDOMMouseEvent*>(dom_event);
- NS_ENSURE_TRUE (ev, FALSE);
- nsCOMPtr<nsIDOMEvent> dev = do_QueryInterface (ev);
- NS_ENSURE_TRUE (dev, FALSE);
-
- info = mozilla_embed_event_new (static_cast<gpointer>(dev));
-
- event_context.Init (mpriv->browser);
- rv = event_context.GetMouseEventInfo (ev, MOZILLA_EMBED_EVENT (info));
- if (NS_FAILED (rv))
- {
- g_object_unref (info);
- return FALSE;
- }
-
- nsCOMPtr<nsIDOMDocument> domDoc;
- rv = event_context.GetTargetDocument (getter_AddRefs(domDoc));
- if (NS_SUCCEEDED (rv))
- {
- mpriv->browser->PushTargetDocument (domDoc);
-
- g_signal_emit_by_name (embed, signal_name,
- info, &return_value);
- mpriv->browser->PopTargetDocument ();
- }
-
- g_object_unref (info);
-
- return return_value;
-}
-
-static gboolean
-mozilla_embed_dom_mouse_click_cb (GtkMozEmbed *embed,
- gpointer dom_event,
- MozillaEmbed *membed)
-{
- return mozilla_embed_emit_mouse_signal (membed, dom_event,
- "ge_dom_mouse_click");
-}
-
-static gboolean
-mozilla_embed_dom_mouse_down_cb (GtkMozEmbed *embed, gpointer dom_event,
- MozillaEmbed *membed)
-{
- return mozilla_embed_emit_mouse_signal (membed, dom_event,
- "ge_dom_mouse_down");
-}
-
-static gint
-mozilla_embed_dom_key_press_cb (GtkMozEmbed *embed,
- gpointer dom_event,
- MozillaEmbed *membed)
-{
- gint retval = FALSE;
-
- if (dom_event == NULL) return FALSE;
-
- nsCOMPtr<nsIDOMKeyEvent> ev = static_cast<nsIDOMKeyEvent*>(dom_event);
- NS_ENSURE_TRUE (ev, FALSE);
-
- if (!EventContext::CheckKeyPress (ev)) return FALSE;
-
- GdkEvent *event = gtk_get_current_event ();
- if (event == NULL) return FALSE; /* shouldn't happen! */
-
- g_return_val_if_fail (GDK_KEY_PRESS == event->type, FALSE);
-
- g_signal_emit_by_name (EPHY_EMBED (membed),
- "ge-search-key-press", event, &retval);
-
- gdk_event_free (event);
-
- return retval;
-}
-
-EphyEmbedChrome
-_mozilla_embed_translate_chrome (GtkMozEmbedChromeFlags flags)
-{
- static const struct
- {
- guint mozilla_flag;
- guint ephy_flag;
- }
- conversion_map [] =
- {
- { GTK_MOZ_EMBED_FLAG_MENUBARON, EPHY_EMBED_CHROME_MENUBAR },
- { GTK_MOZ_EMBED_FLAG_TOOLBARON, EPHY_EMBED_CHROME_TOOLBAR },
- { GTK_MOZ_EMBED_FLAG_STATUSBARON, EPHY_EMBED_CHROME_STATUSBAR },
- { GTK_MOZ_EMBED_FLAG_PERSONALTOOLBARON, EPHY_EMBED_CHROME_BOOKMARKSBAR },
- };
-
- guint mask = 0, i;
-
- for (i = 0; i < G_N_ELEMENTS (conversion_map); i++)
- {
- if (flags & conversion_map[i].mozilla_flag)
- {
- mask |= conversion_map[i].ephy_flag;
- }
- }
-
- return (EphyEmbedChrome) mask;
-}
-
-static void
-mozilla_embed_new_window_cb (GtkMozEmbed *embed,
- GtkMozEmbed **newEmbed,
- guint chrome_mask,
- MozillaEmbed *membed)
-{
- GtkMozEmbedChromeFlags chrome = (GtkMozEmbedChromeFlags) chrome_mask;
- EphyEmbed *new_embed = NULL;
- GObject *single;
- EphyEmbedChrome mask;
-
- if (chrome & GTK_MOZ_EMBED_FLAG_OPENASCHROME)
- {
- *newEmbed = _mozilla_embed_new_xul_dialog ();
- return;
- }
-
- mask = _mozilla_embed_translate_chrome (chrome);
-
- single = ephy_embed_shell_get_embed_single (embed_shell);
- g_signal_emit_by_name (single, "new-window", embed, mask,
- &new_embed);
-
- g_assert (new_embed != NULL);
-
- gtk_moz_embed_set_chrome_mask (embed, chrome);
-
- g_signal_emit_by_name (membed, "ge-new-window", new_embed);
-
- *newEmbed = GTK_MOZ_EMBED (gtk_bin_get_child (GTK_BIN (new_embed)));
-}
-
-static void
-mozilla_embed_security_change_cb (GtkMozEmbed *embed,
- gpointer requestptr,
- PRUint32 state,
- MozillaEmbed *membed)
-{
- ephy_base_embed_set_security_level (EPHY_BASE_EMBED (membed),
- mozilla_embed_security_level (state));
-}
-
-static void
-mozilla_embed_title_change_cb (GtkMozEmbed *embed,
- MozillaEmbed *membed)
-{
- GObject *object = G_OBJECT (embed);
- char *title;
-
- title = gtk_moz_embed_get_title (embed);
-
- g_object_freeze_notify (object);
-
- ephy_base_embed_set_title (EPHY_BASE_EMBED (membed), title);
- ephy_base_embed_set_loading_title (EPHY_BASE_EMBED (membed),
- title, FALSE);
-
- g_free (title);
-
- g_object_thaw_notify (object);
-}
-
-static gboolean
-mozilla_embed_open_uri_cb (GtkMozEmbed *embed,
- const char *uri,
- MozillaEmbed *membed)
-{
- /* Set the address here if we have a blank page.
- * See bug #147840.
- */
- if (ephy_embed_get_is_blank (EPHY_EMBED (membed)))
- {
- EphyBaseEmbed *bembed = EPHY_BASE_EMBED (membed);
-
-
- ephy_base_embed_set_address (bembed, uri);
- ephy_base_embed_set_loading_title (bembed, uri, TRUE);
- }
-
- /* allow load to proceed */
- return FALSE;
-}
-
-static void
-mozilla_embed_visibility_cb (GtkMozEmbed *embed,
- gboolean visibility,
- MozillaEmbed *membed)
-{
- ephy_base_embed_set_visibility (EPHY_BASE_EMBED (membed), visibility);
-}
-
-static gboolean
-let_me_resize_hack (MozillaEmbed *embed)
-{
- GtkWidget *window;
- MozillaEmbedPrivate *priv = embed->priv;
-
- window = gtk_widget_get_toplevel (GTK_WIDGET (embed));
-
- if (window && GTK_WIDGET_TOPLEVEL (window))
- gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
-
- priv->idle_resize_handler = 0;
-
- return FALSE;
-}
-
-static void
-ephy_tab_set_size (MozillaEmbed *embed,
- int width,
- int height)
-{
- MozillaEmbedPrivate *priv = embed->priv;
- GtkWidget *widget = GTK_WIDGET (embed);
- GtkAllocation allocation;
-
- gtk_widget_set_size_request (widget, width, height);
-
- /* HACK: When the web site changes both width and height,
- * we will first get a width change, then a height change,
- * without actually resizing the window in between (since
- * that happens only on idle).
- * If we don't set the allocation, GtkMozEmbed doesn't tell
- * mozilla the new width, so the height change sets the width
- * back to the old value!
- */
- allocation.x = widget->allocation.x;
- allocation.y = widget->allocation.y;
- allocation.width = width;
- allocation.height = height;
- gtk_widget_size_allocate (widget, &allocation);
-
- /* HACK: reset widget requisition after the container
- * has been resized. It appears to be the only way
- * to have the window sized according to embed
- * size correctly.
- */
- if (priv->idle_resize_handler == 0)
- {
- priv->idle_resize_handler =
- g_idle_add ((GSourceFunc) let_me_resize_hack, embed);
- }
-}
-
-static void
-mozilla_embed_size_to_cb (GtkMozEmbed *embed,
- int width,
- int height,
- MozillaEmbed *membed)
-{
- GtkWidget *widget;
- EphyEmbedContainer *container;
- MozillaEmbedPrivate *priv = MOZILLA_EMBED (membed)->priv;
- GtkWidget *embed_widget = GTK_WIDGET (membed);
- GdkScreen *screen;
- GdkRectangle rect;
- int monitor;
- int ww, wh, ew, eh, dw, dh;
-
- container = EPHY_EMBED_CONTAINER (gtk_widget_get_toplevel (GTK_WIDGET (embed)));
- if (! container || !GTK_WIDGET_TOPLEVEL (container))
- return;
-
- /* FIXME: allow sizing also for non-popup single-tab windows? */
- if (EPHY_EMBED (membed) != ephy_embed_container_get_active_child (container) ||
- ! ephy_embed_container_get_is_popup (container))
- return;
-
- widget = GTK_WIDGET (container);
-
- LOG ("mozilla_embed_size_to_cb window %p embed %p width %d height %d", widget, embed, width, height);
-
- /* contrain size so that the window will be fully contained within the screen */
- screen = gtk_widget_get_screen (widget);
- monitor = gdk_screen_get_monitor_at_window (screen, widget->window);
- gdk_screen_get_monitor_geometry (screen, monitor, &rect);
- /* FIXME: get and subtract the panel size */
-
- gtk_window_get_size (GTK_WINDOW (widget), &ww, &wh);
-
- ew = embed_widget->allocation.width;
- eh = embed_widget->allocation.height;
-
- /* This should approximate the chrome extent */
- dw = ww - ew; dw = MAX (dw, 0); dw = MIN (dw, rect.width - 1);
- dh = wh - eh; dh = MAX (dh, 0); dh = MIN (dh, rect.height - 1);
-
- width = MIN (rect.width - dw, width);
- height = MIN (rect.height - dh, height);
-
- /* FIXME: move window if this will place it partially outside the screen rect? */
-
- gtk_window_set_resizable (GTK_WINDOW (widget), FALSE);
- ephy_tab_set_size (membed, width, height);
-
- if (priv->idle_resize_handler == 0)
- {
- priv->idle_resize_handler =
- g_idle_add ((GSourceFunc) let_me_resize_hack, membed);
- }
-}
-
-static EphyEmbedSecurityLevel
-mozilla_embed_security_level (PRUint32 state)
-{
- EphyEmbedSecurityLevel level;
-
- switch (state)
- {
- case nsIWebProgressListener::STATE_IS_INSECURE:
- level = EPHY_EMBED_STATE_IS_INSECURE;
- break;
- case nsIWebProgressListener::STATE_IS_BROKEN:
- level = EPHY_EMBED_STATE_IS_BROKEN;
- break;
- case nsIWebProgressListener::STATE_IS_SECURE|
- nsIWebProgressListener::STATE_SECURE_HIGH:
- level = EPHY_EMBED_STATE_IS_SECURE_HIGH;
- break;
- case nsIWebProgressListener::STATE_IS_SECURE|
- nsIWebProgressListener::STATE_SECURE_MED:
- level = EPHY_EMBED_STATE_IS_SECURE_MED;
- break;
- case nsIWebProgressListener::STATE_IS_SECURE|
- nsIWebProgressListener::STATE_SECURE_LOW:
- level = EPHY_EMBED_STATE_IS_SECURE_LOW;
- break;
- default:
- level = EPHY_EMBED_STATE_IS_UNKNOWN;
- break;
- }
- return level;
-}
-
-static void
-ephy_embed_iface_init (EphyEmbedIface *iface)
-{
- iface->load_url = impl_load_url;
- iface->load = impl_load;
- iface->stop_load = impl_stop_load;
- iface->can_go_back = impl_can_go_back;
- iface->can_go_forward =impl_can_go_forward;
- iface->can_go_up = impl_can_go_up;
- iface->get_go_up_list = impl_get_go_up_list;
- iface->go_back = impl_go_back;
- iface->go_forward = impl_go_forward;
- iface->go_up = impl_go_up;
- iface->get_location = impl_get_location;
- iface->get_js_status = impl_get_js_status;
- iface->reload = impl_reload;
- iface->set_zoom = impl_set_zoom;
- iface->get_zoom = impl_get_zoom;
- iface->scroll_lines = impl_scroll_lines;
- iface->scroll_pages = impl_scroll_pages;
- iface->scroll_pixels = impl_scroll_pixels;
- iface->shistory_copy = impl_shistory_copy;
- iface->show_page_certificate = impl_show_page_certificate;
- iface->close = impl_close;
- iface->set_encoding = impl_set_encoding;
- iface->get_encoding = impl_get_encoding;
- iface->has_automatic_encoding = impl_has_automatic_encoding;
- iface->print = impl_print;
- iface->set_print_preview_mode = impl_set_print_preview_mode;
- iface->print_preview_n_pages = impl_print_preview_n_pages;
- iface->print_preview_navigate = impl_print_preview_navigate;
- iface->has_modified_forms = impl_has_modified_forms;
- iface->get_security_level = impl_get_security_level;
- iface->get_backward_history = impl_get_backward_history;
- iface->get_forward_history = impl_get_forward_history;
- iface->get_next_history_item = impl_get_next_history_item;
- iface->get_previous_history_item = impl_get_previous_history_item;
- iface->go_to_history_item = impl_go_to_history_item;
-}
-
-static void
-xul_visibility_cb (GtkWidget *embed, gboolean visibility, GtkWidget *window)
-{
- if (visibility)
- {
- gtk_widget_show (window);
- }
- else
- {
- gtk_widget_hide (window);
- }
-}
-
-static void
-xul_size_to_cb (GtkWidget *embed, gint width, gint height, gpointer dummy)
-{
- gtk_widget_set_size_request (embed, width, height);
-}
-
-static void
-xul_new_window_cb (GtkMozEmbed *embed,
- GtkMozEmbed **retval,
- guint chrome_mask,
- gpointer dummy)
-{
- g_assert (chrome_mask & GTK_MOZ_EMBED_FLAG_OPENASCHROME);
-
- *retval = _mozilla_embed_new_xul_dialog ();
-}
-
-static void
-xul_title_cb (GtkMozEmbed *embed,
- GtkWindow *window)
-{
- char *title;
-
- title = gtk_moz_embed_get_title (embed);
- gtk_window_set_title (window, title);
- g_free (title);
-}
-
-GtkMozEmbed *
-_mozilla_embed_new_xul_dialog (void)
-{
- GtkWidget *window, *embed;
-
- g_object_ref (embed_shell);
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- g_object_set_data_full (G_OBJECT (window), "EmbedShellRef",
- embed_shell,
- (GDestroyNotify) g_object_unref);
- g_signal_connect_object (embed_shell, "prepare_close",
- G_CALLBACK (gtk_widget_destroy), window,
- (GConnectFlags) G_CONNECT_SWAPPED);
-
- embed = gtk_moz_embed_new ();
- gtk_widget_show (embed);
- gtk_container_add (GTK_CONTAINER (window), embed);
-
- g_signal_connect_object (embed, "destroy_browser",
- G_CALLBACK (gtk_widget_destroy),
- window, G_CONNECT_SWAPPED);
- g_signal_connect_object (embed, "visibility",
- G_CALLBACK (xul_visibility_cb),
- window, (GConnectFlags) 0);
- g_signal_connect_object (embed, "size_to",
- G_CALLBACK (xul_size_to_cb),
- NULL, (GConnectFlags) 0);
- g_signal_connect_object (embed, "new_window",
- G_CALLBACK (xul_new_window_cb),
- NULL, (GConnectFlags) 0);
- g_signal_connect_object (embed, "title",
- G_CALLBACK (xul_title_cb),
- window, (GConnectFlags) 0);
-
- return GTK_MOZ_EMBED (embed);
-}
-
-EphyBrowser*
-_mozilla_embed_get_browser (MozillaEmbed *embed)
-{
- g_return_val_if_fail (MOZILLA_IS_EMBED (embed), NULL);
-
- return embed->priv->browser;
-}