aboutsummaryrefslogtreecommitdiffstats
path: root/embed
diff options
context:
space:
mode:
Diffstat (limited to 'embed')
-rw-r--r--embed/ephy-embed-single.c20
-rw-r--r--embed/ephy-embed-single.h7
-rw-r--r--embed/mozilla/mozilla-embed-persist.cpp2
-rw-r--r--embed/mozilla/mozilla-embed-single.cpp39
-rw-r--r--embed/mozilla/mozilla-embed.cpp49
-rw-r--r--embed/mozilla/mozilla-embed.h6
6 files changed, 54 insertions, 69 deletions
diff --git a/embed/ephy-embed-single.c b/embed/ephy-embed-single.c
index c09a0defa..359b33069 100644
--- a/embed/ephy-embed-single.c
+++ b/embed/ephy-embed-single.c
@@ -31,12 +31,6 @@
#include <string.h>
-enum
-{
- NEW_WINDOW,
- LAST_SIGNAL
-};
-
#define EPHY_EMBED_SINGLE_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_EMBED_SINGLE, EphyEmbedSinglePrivate))
struct EphyEmbedSinglePrivate
@@ -53,8 +47,6 @@ ephy_embed_single_init (EphyEmbedSingle *ges);
static GObjectClass *parent_class = NULL;
-static guint ephy_embed_single_signals[LAST_SIGNAL] = { 0 };
-
GType
ephy_embed_single_get_type (void)
{
@@ -90,18 +82,6 @@ ephy_embed_single_class_init (EphyEmbedSingleClass *klass)
parent_class = (GObjectClass *) g_type_class_peek_parent (klass);
- ephy_embed_single_signals[NEW_WINDOW] =
- g_signal_new ("new_window_orphan",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EphyEmbedSingleClass, new_window),
- NULL, NULL,
- ephy_marshal_VOID__POINTER_INT,
- G_TYPE_NONE,
- 2,
- G_TYPE_POINTER,
- G_TYPE_INT);
-
g_type_class_add_private (object_class, sizeof(EphyEmbedSinglePrivate));
}
diff --git a/embed/ephy-embed-single.h b/embed/ephy-embed-single.h
index 598ccdfd3..8dc55c1ee 100644
--- a/embed/ephy-embed-single.h
+++ b/embed/ephy-embed-single.h
@@ -107,13 +107,6 @@ struct EphyEmbedSingleClass
{
GObjectClass parent_class;
- /* Signals */
- void (* new_window) (EphyEmbedSingle *shell,
- EphyEmbed **new_embed,
- EmbedChromeMask chromemask);
-
- /* Methods */
-
void (* clear_cache) (EphyEmbedSingle *shell);
void (* set_offline_mode) (EphyEmbedSingle *shell,
gboolean offline);
diff --git a/embed/mozilla/mozilla-embed-persist.cpp b/embed/mozilla/mozilla-embed-persist.cpp
index d1a0785ce..166942139 100644
--- a/embed/mozilla/mozilla-embed-persist.cpp
+++ b/embed/mozilla/mozilla-embed-persist.cpp
@@ -154,7 +154,7 @@ impl_save (EphyEmbedPersist *persist)
EphyBrowser *browser = NULL;
if (embed)
{
- browser = (EphyBrowser *) mozilla_embed_get_ephy_browser (MOZILLA_EMBED(embed));
+ browser = (EphyBrowser *) _mozilla_embed_get_ephy_browser (MOZILLA_EMBED(embed));
g_return_val_if_fail (browser != NULL, FALSE);
}
diff --git a/embed/mozilla/mozilla-embed-single.cpp b/embed/mozilla/mozilla-embed-single.cpp
index df298d73a..6f03b5ea9 100644
--- a/embed/mozilla/mozilla-embed-single.cpp
+++ b/embed/mozilla/mozilla-embed-single.cpp
@@ -25,6 +25,7 @@
#include "glib.h"
#include "ephy-debug.h"
#include "gtkmozembed.h"
+#include "mozilla-embed.h"
#include "mozilla-embed-single.h"
#include "ephy-file-helpers.h"
#include "mozilla-notifiers.h"
@@ -231,43 +232,9 @@ mozilla_embed_single_new_window_orphan_cb (GtkMozEmbedSingle *embed,
guint chrome_mask,
EphyEmbedSingle *shell)
{
- /* FIXME conversion duped in mozilla_embed */
- EphyEmbed *new_embed;
- int i;
- EmbedChromeMask mask = EMBED_CHROME_OPENASPOPUP;
-
- struct
- {
- guint chromemask;
- EmbedChromeMask embed_mask;
- }
- conversion_map [] =
- {
- { GTK_MOZ_EMBED_FLAG_DEFAULTCHROME, EMBED_CHROME_DEFAULT },
- { GTK_MOZ_EMBED_FLAG_MENUBARON, EMBED_CHROME_MENUBARON },
- { GTK_MOZ_EMBED_FLAG_TOOLBARON, EMBED_CHROME_TOOLBARON },
- { GTK_MOZ_EMBED_FLAG_STATUSBARON, EMBED_CHROME_STATUSBARON },
- { GTK_MOZ_EMBED_FLAG_WINDOWRAISED, EMBED_CHROME_WINDOWRAISED },
- { GTK_MOZ_EMBED_FLAG_WINDOWLOWERED, EMBED_CHROME_WINDOWLOWERED },
- { GTK_MOZ_EMBED_FLAG_CENTERSCREEN, EMBED_CHROME_CENTERSCREEN },
- { GTK_MOZ_EMBED_FLAG_OPENASDIALOG, EMBED_CHROME_OPENASDIALOG },
- { GTK_MOZ_EMBED_FLAG_OPENASCHROME, EMBED_CHROME_OPENASCHROME },
- { 0, EMBED_CHROME_NONE }
- };
+ g_assert (chrome_mask && GTK_MOZ_EMBED_FLAG_OPENASCHROME);
- for (i = 0; conversion_map[i].chromemask != 0; i++)
- {
- if (chrome_mask & conversion_map[i].chromemask)
- {
- mask = (EmbedChromeMask) (mask | conversion_map[i].embed_mask);
- }
- }
-
- g_signal_emit_by_name (shell, "new_window_orphan", &new_embed, mask);
-
- g_assert (new_embed != NULL);
-
- *retval = GTK_MOZ_EMBED(EPHY_EMBED(new_embed));
+ *retval = _mozilla_embed_new_xul_dialog ();
}
static void
diff --git a/embed/mozilla/mozilla-embed.cpp b/embed/mozilla/mozilla-embed.cpp
index c41ecbf3a..0b8e3fea7 100644
--- a/embed/mozilla/mozilla-embed.cpp
+++ b/embed/mozilla/mozilla-embed.cpp
@@ -277,7 +277,7 @@ mozilla_embed_init (MozillaEmbed *embed)
}
gpointer
-mozilla_embed_get_ephy_browser (MozillaEmbed *embed)
+_mozilla_embed_get_ephy_browser (MozillaEmbed *embed)
{
g_return_val_if_fail (embed->priv->browser != NULL, NULL);
@@ -1015,11 +1015,15 @@ mozilla_embed_new_window_cb (GtkMozEmbed *embed,
{ GTK_MOZ_EMBED_FLAG_WINDOWRAISED, EMBED_CHROME_WINDOWRAISED },
{ GTK_MOZ_EMBED_FLAG_WINDOWLOWERED, EMBED_CHROME_WINDOWLOWERED },
{ GTK_MOZ_EMBED_FLAG_CENTERSCREEN, EMBED_CHROME_CENTERSCREEN },
- { GTK_MOZ_EMBED_FLAG_OPENASDIALOG, EMBED_CHROME_OPENASDIALOG },
- { GTK_MOZ_EMBED_FLAG_OPENASCHROME, EMBED_CHROME_OPENASCHROME },
{ 0, EMBED_CHROME_NONE }
};
+ if (chromemask && GTK_MOZ_EMBED_FLAG_OPENASCHROME)
+ {
+ *newEmbed = _mozilla_embed_new_xul_dialog ();
+ return;
+ }
+
for (i = 0; conversion_map[i].chromemask != 0; i++)
{
if (chromemask & conversion_map[i].chromemask)
@@ -1114,3 +1118,42 @@ ephy_embed_init (EphyEmbedClass *embed_class)
embed_class->print_preview_n_pages = impl_print_preview_n_pages;
embed_class->print_preview_navigate = impl_print_preview_navigate;
}
+
+void
+xul_visibility_cb (GtkWidget *embed, gboolean visibility, GtkWidget *window)
+{
+ if (visibility)
+ {
+ gtk_widget_show (window);
+ }
+ else
+ {
+ gtk_widget_hide (window);
+ }
+}
+
+void
+xul_size_to_cb (GtkWidget *embed, gint width, gint height)
+{
+ gtk_widget_set_size_request (embed, width, height);
+}
+
+GtkMozEmbed *
+_mozilla_embed_new_xul_dialog (void)
+{
+ GtkWidget *window, *embed;
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ embed = gtk_moz_embed_new ();
+ gtk_widget_show (embed);
+ gtk_container_add (GTK_CONTAINER (window), embed);
+
+ g_signal_connect_swapped (embed, "destroy_browser",
+ G_CALLBACK (gtk_widget_destroy), window);
+ g_signal_connect (embed, "visibility",
+ G_CALLBACK (xul_visibility_cb), window);
+ g_signal_connect (embed, "size_to",
+ G_CALLBACK (xul_size_to_cb), NULL);
+
+ return GTK_MOZ_EMBED (embed);
+}
diff --git a/embed/mozilla/mozilla-embed.h b/embed/mozilla/mozilla-embed.h
index 8070ac480..4eba0dba9 100644
--- a/embed/mozilla/mozilla-embed.h
+++ b/embed/mozilla/mozilla-embed.h
@@ -52,9 +52,11 @@ struct MozillaEmbedClass
GtkMozEmbedClass parent_class;
};
-GType mozilla_embed_get_type (void);
+GType mozilla_embed_get_type (void);
-gpointer mozilla_embed_get_ephy_browser (MozillaEmbed *embed);
+gpointer _mozilla_embed_get_ephy_browser (MozillaEmbed *embed);
+
+GtkMozEmbed *_mozilla_embed_new_xul_dialog (void);
G_END_DECLS