aboutsummaryrefslogtreecommitdiffstats
path: root/embed
diff options
context:
space:
mode:
Diffstat (limited to 'embed')
-rw-r--r--embed/Makefile.am6
-rw-r--r--embed/ephy-embed-factory.c80
-rw-r--r--embed/ephy-embed-factory.h32
-rw-r--r--embed/ephy-embed-persist.c8
-rw-r--r--embed/ephy-embed-persist.h2
-rw-r--r--embed/ephy-embed-popup-control.c7
-rw-r--r--embed/ephy-embed-shell.c4
-rw-r--r--embed/ephy-embed.c8
-rw-r--r--embed/ephy-embed.h2
-rw-r--r--embed/ephy-favicon-cache.c4
-rw-r--r--embed/mozilla/mozilla-embed-persist.cpp14
-rw-r--r--embed/mozilla/mozilla-embed-single.cpp6
-rw-r--r--embed/mozilla/mozilla-embed-single.h2
-rw-r--r--embed/mozilla/mozilla-embed.cpp17
14 files changed, 154 insertions, 38 deletions
diff --git a/embed/Makefile.am b/embed/Makefile.am
index 511050639..e082e2c91 100644
--- a/embed/Makefile.am
+++ b/embed/Makefile.am
@@ -13,7 +13,7 @@ INCLUDES += -DGDK_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED \
-DGNOME_DISABLE_DEPRECATED -DBONOBO_DISABLE_DEPRECATED $(WARN_CFLAGS)
endif
-noinst_LTLIBRARIES = libephyembed.la
+noinst_LTLIBRARIES = libephyembed.la libephyembedfactory.la
headerdir = $(prefix)/include/epiphany-@EPIPHANY_MAJOR@/epiphany
header_DATA = $(INST_H_FILES)
@@ -63,4 +63,6 @@ libephyembed_la_SOURCES = \
$(INST_H_FILES) \
$(NOINST_H_FILES)
-libephyembed_la_LIBADD = $(top_builddir)/embed/mozilla/libephymozillaembed.la
+libephyembedfactory_la_SOURCES = \
+ ephy-embed-factory.c \
+ ephy-embed-factory.h
diff --git a/embed/ephy-embed-factory.c b/embed/ephy-embed-factory.c
new file mode 100644
index 000000000..74dfd4853
--- /dev/null
+++ b/embed/ephy-embed-factory.c
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2000-2003 Marco Pesenti Gritti
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "ephy-embed-factory.h"
+#include "mozilla-embed.h"
+#include "mozilla-embed-persist.h"
+#include "mozilla-embed-single.h"
+
+#include <string.h>
+
+typedef enum
+{
+ EPHY_EMBED_OBJECT,
+ EPHY_EMBED_PERSIST_OBJECT,
+ EPHY_EMBED_SINGLE_OBJECT
+} EmbedObjectType;
+
+static EmbedObjectType
+type_from_id (const char *object_id)
+{
+ EmbedObjectType result = 0;
+
+ if (strcmp (object_id, "EphyEmbed") == 0)
+ {
+ result = EPHY_EMBED_OBJECT;
+ }
+ else if (strcmp (object_id, "EphyEmbedPersist") == 0)
+ {
+ result = EPHY_EMBED_PERSIST_OBJECT;
+ }
+ else if (strcmp (object_id, "EphyEmbedSingle") == 0)
+ {
+ result = EPHY_EMBED_SINGLE_OBJECT;
+ }
+ else
+ {
+ g_assert_not_reached ();
+ }
+
+ return result;
+}
+
+GObject *
+ephy_embed_factory_new_object (const char *object_id)
+{
+ GObject *object;
+
+ switch (type_from_id (object_id))
+ {
+ case EPHY_EMBED_OBJECT:
+ object = g_object_new (MOZILLA_TYPE_EMBED, NULL);
+ break;
+ case EPHY_EMBED_PERSIST_OBJECT:
+ object = g_object_new (MOZILLA_TYPE_EMBED_PERSIST, NULL);
+ break;
+ case EPHY_EMBED_SINGLE_OBJECT:
+ object = g_object_new (MOZILLA_TYPE_EMBED_SINGLE, NULL);
+ break;
+ default:
+ object = NULL;
+ }
+
+ return object;
+}
diff --git a/embed/ephy-embed-factory.h b/embed/ephy-embed-factory.h
new file mode 100644
index 000000000..c32c9cdff
--- /dev/null
+++ b/embed/ephy-embed-factory.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2000-2003 Marco Pesenti Gritti
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef EPHY_EMBED_FACTORY_H
+#define EPHY_EMBED_FACTORY_H
+
+#include <glib-object.h>
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+GObject *ephy_embed_factory_new_object (const char *object_id);
+
+G_END_DECLS
+
+#endif
diff --git a/embed/ephy-embed-persist.c b/embed/ephy-embed-persist.c
index 41224a38e..28cddbb2b 100644
--- a/embed/ephy-embed-persist.c
+++ b/embed/ephy-embed-persist.c
@@ -435,11 +435,3 @@ ephy_embed_persist_save (EphyEmbedPersist *persist)
EphyEmbedPersistClass *klass = EPHY_EMBED_PERSIST_GET_CLASS (persist);
return klass->save (persist);
}
-
-EphyEmbedPersist *
-ephy_embed_persist_new (EphyEmbed *embed)
-{
- return EPHY_EMBED_PERSIST (g_object_new (MOZILLA_TYPE_EMBED_PERSIST,
- "embed", embed,
- NULL));
-}
diff --git a/embed/ephy-embed-persist.h b/embed/ephy-embed-persist.h
index 1eadb5940..403544973 100644
--- a/embed/ephy-embed-persist.h
+++ b/embed/ephy-embed-persist.h
@@ -73,8 +73,6 @@ struct EphyEmbedPersistClass
GType ephy_embed_persist_get_type (void);
-EphyEmbedPersist *ephy_embed_persist_new (EphyEmbed *embed);
-
gboolean ephy_embed_persist_save (EphyEmbedPersist *persist);
void ephy_embed_persist_cancel (EphyEmbedPersist *persist);
diff --git a/embed/ephy-embed-popup-control.c b/embed/ephy-embed-popup-control.c
index 0fc39c767..157f13744 100644
--- a/embed/ephy-embed-popup-control.c
+++ b/embed/ephy-embed-popup-control.c
@@ -20,6 +20,7 @@
*/
#include "ephy-embed-popup-control.h"
+#include "ephy-embed-factory.h"
#include "ephy-embed-persist.h"
#include "ephy-bonobo-extensions.h"
#include "ephy-prefs.h"
@@ -488,7 +489,8 @@ save_url (EphyEmbedPopupControl *popup,
widget = GTK_WIDGET (popup->priv->embed);
window = gtk_widget_get_toplevel (widget);
- persist = ephy_embed_persist_new (popup->priv->embed);
+ persist = EPHY_EMBED_PERSIST
+ (ephy_embed_factory_new_object ("EphyEmbedPersist"));
ephy_embed_persist_set_fc_title (persist, title);
ephy_embed_persist_set_fc_parent (persist,GTK_WINDOW (window));
@@ -593,7 +595,8 @@ embed_popup_set_image_as_background_cmd (BonoboUIComponent *uic,
ephy_embed_event_get_property (info, "image", &value);
location = g_value_get_string (value);
- persist = ephy_embed_persist_new (popup->priv->embed);
+ persist = EPHY_EMBED_PERSIST
+ (ephy_embed_factory_new_object ("EphyEmbedPersist"));
base = g_path_get_basename (location);
dest = g_build_filename (ephy_dot_dir (), base, NULL);
diff --git a/embed/ephy-embed-shell.c b/embed/ephy-embed-shell.c
index e15aba244..9797751ea 100644
--- a/embed/ephy-embed-shell.c
+++ b/embed/ephy-embed-shell.c
@@ -21,6 +21,7 @@
#include <config.h>
#include "ephy-embed-shell.h"
+#include "ephy-embed-factory.h"
#include "ephy-marshal.h"
#include "ephy-file-helpers.h"
#include "ephy-favicon-cache.h"
@@ -209,7 +210,8 @@ ephy_embed_shell_get_embed_single (EphyEmbedShell *shell)
if (!shell->priv->embed_single)
{
- shell->priv->embed_single = mozilla_embed_single_new ();
+ shell->priv->embed_single = EPHY_EMBED_SINGLE
+ (ephy_embed_factory_new_object ("EphyEmbedSingle"));
}
return shell->priv->embed_single;
diff --git a/embed/ephy-embed.c b/embed/ephy-embed.c
index 78f137fe1..6028472fe 100644
--- a/embed/ephy-embed.c
+++ b/embed/ephy-embed.c
@@ -156,14 +156,6 @@ ephy_embed_base_init (gpointer g_class)
}
}
-EphyEmbed *
-ephy_embed_new (GObject *single)
-{
- g_assert (MOZILLA_IS_EMBED_SINGLE (single));
-
- return EPHY_EMBED (g_object_new (MOZILLA_TYPE_EMBED, NULL));
-}
-
void
ephy_embed_load_url (EphyEmbed *embed,
const char *url)
diff --git a/embed/ephy-embed.h b/embed/ephy-embed.h
index e3e577c95..8d16da850 100644
--- a/embed/ephy-embed.h
+++ b/embed/ephy-embed.h
@@ -243,8 +243,6 @@ struct EphyEmbedClass
GType ephy_embed_get_type (void);
-EphyEmbed *ephy_embed_new (GObject *single);
-
/* Base */
void ephy_embed_load_url (EphyEmbed *embed,
const char *url);
diff --git a/embed/ephy-favicon-cache.c b/embed/ephy-favicon-cache.c
index 6c443773f..4da3ab2e8 100644
--- a/embed/ephy-favicon-cache.c
+++ b/embed/ephy-favicon-cache.c
@@ -25,6 +25,7 @@
#include <sys/stat.h>
#include "ephy-embed-persist.h"
+#include "ephy-embed-factory.h"
#include "ephy-file-helpers.h"
#include "ephy-favicon-cache.h"
#include "ephy-node-common.h"
@@ -354,7 +355,8 @@ ephy_favicon_cache_download (EphyFaviconCache *cache,
dest = g_build_filename (cache->priv->directory, filename, NULL);
- persist = ephy_embed_persist_new (NULL);
+ persist = EPHY_EMBED_PERSIST
+ (ephy_embed_factory_new_object ("EphyEmbedPersist"));
ephy_embed_persist_set_dest (persist, dest);
ephy_embed_persist_set_flags (persist, EMBED_PERSIST_NO_VIEW);
diff --git a/embed/mozilla/mozilla-embed-persist.cpp b/embed/mozilla/mozilla-embed-persist.cpp
index 166942139..2818bb3b4 100644
--- a/embed/mozilla/mozilla-embed-persist.cpp
+++ b/embed/mozilla/mozilla-embed-persist.cpp
@@ -24,6 +24,7 @@
#include "mozilla-embed-persist.h"
#include "mozilla-embed.h"
+#include "ephy-embed-shell.h"
#include "EphyBrowser.h"
#include "EphyHeaderSniffer.h"
#include "MozDownload.h"
@@ -85,7 +86,6 @@ static void
mozilla_embed_persist_init (MozillaEmbedPersist *persist)
{
persist->priv = MOZILLA_EMBED_PERSIST_GET_PRIVATE (persist);
-
persist->priv->mPersist = do_CreateInstance (NS_WEBBROWSERPERSIST_CONTRACTID);
}
@@ -264,6 +264,17 @@ impl_save (EphyEmbedPersist *persist)
return TRUE;
}
+static GObject *
+mozilla_embed_persist_constructor (GType type, guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ /* we depend on single because of mozilla initialization */
+ ephy_embed_shell_get_embed_single (embed_shell);
+
+ return parent_class->constructor (type, n_construct_properties,
+ construct_params);
+}
+
static void
mozilla_embed_persist_class_init (MozillaEmbedPersistClass *klass)
{
@@ -273,6 +284,7 @@ mozilla_embed_persist_class_init (MozillaEmbedPersistClass *klass)
parent_class = (GObjectClass *) g_type_class_peek_parent (klass);
object_class->finalize = mozilla_embed_persist_finalize;
+ object_class->constructor = mozilla_embed_persist_constructor;
persist_class->save = impl_save;
persist_class->cancel = impl_cancel;
diff --git a/embed/mozilla/mozilla-embed-single.cpp b/embed/mozilla/mozilla-embed-single.cpp
index a3a88c465..3df1860ad 100644
--- a/embed/mozilla/mozilla-embed-single.cpp
+++ b/embed/mozilla/mozilla-embed-single.cpp
@@ -173,12 +173,6 @@ mozilla_embed_single_get_type (void)
return type;
}
-EphyEmbedSingle *
-mozilla_embed_single_new (void)
-{
- return EPHY_EMBED_SINGLE (g_object_new (MOZILLA_TYPE_EMBED_SINGLE, NULL));
-}
-
static gboolean
mozilla_set_default_prefs (MozillaEmbedSingle *mes)
{
diff --git a/embed/mozilla/mozilla-embed-single.h b/embed/mozilla/mozilla-embed-single.h
index 08732a837..3e47febeb 100644
--- a/embed/mozilla/mozilla-embed-single.h
+++ b/embed/mozilla/mozilla-embed-single.h
@@ -54,8 +54,6 @@ struct MozillaEmbedSingleClass
GType mozilla_embed_single_get_type (void);
-EphyEmbedSingle *mozilla_embed_single_new (void);
-
G_END_DECLS
#endif
diff --git a/embed/mozilla/mozilla-embed.cpp b/embed/mozilla/mozilla-embed.cpp
index 497bc3753..1ebec735a 100644
--- a/embed/mozilla/mozilla-embed.cpp
+++ b/embed/mozilla/mozilla-embed.cpp
@@ -19,10 +19,9 @@
*/
#include "mozilla-embed.h"
-
+#include "ephy-embed-shell.h"
#include "ephy-command-manager.h"
#include "ephy-string.h"
-#include "ephy-embed.h"
#include "ephy-debug.h"
#include "MozillaPrivate.h"
@@ -247,6 +246,17 @@ mozilla_embed_realize (GtkWidget *widget)
}
}
+static GObject *
+mozilla_embed_constructor (GType type, guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ /* we depend on single because of mozilla initialization */
+ ephy_embed_shell_get_embed_single (embed_shell);
+
+ return parent_class->constructor (type, n_construct_properties,
+ construct_params);
+}
+
static void
mozilla_embed_class_init (MozillaEmbedClass *klass)
{
@@ -256,6 +266,8 @@ mozilla_embed_class_init (MozillaEmbedClass *klass)
parent_class = (GObjectClass *) g_type_class_peek_parent (klass);
+ object_class->constructor = mozilla_embed_constructor;
+
gtk_object_class->destroy = mozilla_embed_destroy;
widget_class->realize = mozilla_embed_realize;
@@ -267,7 +279,6 @@ static void
mozilla_embed_init (MozillaEmbed *embed)
{
embed->priv = MOZILLA_EMBED_GET_PRIVATE (embed);
-
embed->priv->browser = new EphyBrowser ();
embed->priv->security_state = -1;