aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--embed/Makefile.am2
-rw-r--r--embed/ephy-embed-container.c179
-rw-r--r--embed/ephy-embed-container.h85
3 files changed, 266 insertions, 0 deletions
diff --git a/embed/Makefile.am b/embed/Makefile.am
index 48259ab18..ed9349ce8 100644
--- a/embed/Makefile.am
+++ b/embed/Makefile.am
@@ -26,6 +26,7 @@ INST_H_FILES = \
ephy-command-manager.h \
ephy-cookie-manager.h \
ephy-embed.h \
+ ephy-embed-container.h \
ephy-embed-event.h \
ephy-embed-factory.h \
ephy-embed-persist.h \
@@ -50,6 +51,7 @@ libephyembed_la_SOURCES = \
ephy-cookie-manager.c \
ephy-download.c \
ephy-embed.c \
+ ephy-embed-container.c \
ephy-embed-dialog.c \
ephy-embed-event.c \
ephy-embed-find.c \
diff --git a/embed/ephy-embed-container.c b/embed/ephy-embed-container.c
new file mode 100644
index 000000000..6aee9a6fd
--- /dev/null
+++ b/embed/ephy-embed-container.c
@@ -0,0 +1,179 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
+/*
+ * Copyright © 2007 Xan Lopez
+ *
+ * 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 "config.h"
+
+#include "ephy-embed-container.h"
+#include "ephy-embed-type-builtins.h"
+
+static void
+ephy_embed_container_base_init (gpointer g_class)
+{
+ static gboolean initialized = FALSE;
+
+ if (!initialized) {
+ initialized = TRUE;
+
+ g_object_interface_install_property (g_class,
+ g_param_spec_flags ("chrome", NULL, NULL,
+ EPHY_TYPE_EMBED_CHROME,
+ EPHY_EMBED_CHROME_ALL,
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+ g_object_interface_install_property (g_class,
+ g_param_spec_boolean ("is-popup", NULL, NULL,
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB |
+ G_PARAM_CONSTRUCT_ONLY));
+ }
+}
+
+GType
+ephy_embed_container_get_type (void)
+{
+ static GType type = 0;
+
+ if (G_UNLIKELY (type == 0)) {
+ const GTypeInfo our_info =
+ {
+ sizeof (EphyEmbedContainerIface),
+ ephy_embed_container_base_init,
+ NULL,
+ };
+
+ type = g_type_register_static (G_TYPE_INTERFACE,
+ "EphyEmbedContainer",
+ &our_info, (GTypeFlags)0);
+ }
+
+ return type;
+}
+
+/**
+ * ephy_embed_container_add_child:
+ * @container: an #EphyEmbedContainer
+ * @child: an #EphyEmbed
+ * @position: the position in @container's
+ * @jump_to: %TRUE to switch to @container's new child after insertion
+ *
+ * Inserts @child into @container.
+ **/
+void
+ephy_embed_container_add_child (EphyEmbedContainer *container,
+ EphyEmbed *child,
+ gint position,
+ gboolean jump_to)
+{
+ EphyEmbedContainerIface *iface = EPHY_EMBED_CONTAINER_GET_IFACE (container);
+ iface->add_child (container, child, position, jump_to);
+}
+
+/**
+ * ephy_embed_container_jump_to_child:
+ * @container: an #EphyEmbedContainer
+ * @child: an #EphyEmbed inside @container
+ *
+ * Sets @child as @container's active child.
+ **/
+void
+ephy_embed_container_jump_to_child (EphyEmbedContainer *container,
+ EphyEmbed *child)
+{
+ EphyEmbedContainerIface *iface = EPHY_EMBED_CONTAINER_GET_IFACE (container);
+ iface->jump_to_child (container, child);
+}
+
+/**
+ * ephy_embed_container_remove_child:
+ * @container: an #EphyEmbedContainer
+ * @child: an #EphyEmbed
+ *
+ * Removes @child from @container.
+ **/
+void
+ephy_embed_container_remove_child (EphyEmbedContainer *container,
+ EphyEmbed *child)
+{
+ EphyEmbedContainerIface *iface = EPHY_EMBED_CONTAINER_GET_IFACE (container);
+ iface->remove_child (container, child);
+}
+
+/**
+ * ephy_embed_container_get_active_child:
+ * @window: an #EphyEmbedContainer
+ *
+ * Returns @container's active #EphyEmbed.
+ *
+ * Return value: @container's active child
+ **/
+EphyEmbed *
+ephy_embed_container_get_active_child (EphyEmbedContainer *container)
+{
+ EphyEmbedContainerIface *iface = EPHY_EMBED_CONTAINER_GET_IFACE (container);
+ return iface->get_active_child (container);
+}
+
+/**
+ * ephy_embed_container_get_children:
+ * @container: a #EphyEmbedContainer
+ *
+ * Returns the list of #EphyEmbed:s in the container.
+ *
+ * Return value: a newly-allocated list of #EphyEmbed:s
+ */
+GList *
+ephy_embed_container_get_children (EphyEmbedContainer *container)
+{
+ EphyEmbedContainerIface *iface = EPHY_EMBED_CONTAINER_GET_IFACE (container);
+ return iface->get_children (container);
+}
+
+/**
+ * ephy_embed_container_get_is_popup:
+ * @container: an #EphyEmbedContainer
+ *
+ * Returns whether this embed container is a popup.
+ *
+ * Return value: %TRUE if it is a popup
+ **/
+gboolean
+ephy_embed_container_get_is_popup (EphyEmbedContainer *container)
+{
+ EphyEmbedContainerIface *iface = EPHY_EMBED_CONTAINER_GET_IFACE (container);
+ return iface->get_is_popup (container);
+}
+
+/**
+ * ephy_embed_container_get_chrome:
+ * @container: an #EphyEmbedContainer
+ *
+ * Returns the #EphyEmbedChrome flags indicating the visibility of several parts
+ * of the UI.
+ *
+ * Return value: #EphyEmbedChrome flags.
+ **/
+EphyEmbedChrome
+ephy_embed_container_get_chrome (EphyEmbedContainer *container)
+{
+ EphyEmbedContainerIface *iface = EPHY_EMBED_CONTAINER_GET_IFACE (container);
+ return iface->get_chrome (container);
+}
+
diff --git a/embed/ephy-embed-container.h b/embed/ephy-embed-container.h
new file mode 100644
index 000000000..b4267270c
--- /dev/null
+++ b/embed/ephy-embed-container.h
@@ -0,0 +1,85 @@
+/*
+ * Copyright © 2007 Xan Lopez
+ *
+ * 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.
+ *
+ */
+
+#ifndef EPHY_EMBED_CONTAINER_H
+#define EPHY_EMBED_CONTAINER_H
+
+#include "ephy-embed.h"
+
+#include <glib-object.h>
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+#define EPHY_TYPE_EMBED_CONTAINER (ephy_embed_container_get_type ())
+#define EPHY_EMBED_CONTAINER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EPHY_TYPE_EMBED_CONTAINER, EphyEmbedContainer))
+#define EPHY_EMBED_CONTAINER_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EPHY_TYPE_EMBED_CONTAINER, EphyEmbedContainerIface))
+#define EPHY_IS_EMBED_CONTAINER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EPHY_TYPE_EMBED_CONTAINER))
+#define EPHY_IS_EMBED_CONTAINER_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EPHY_TYPE_EMBED_CONTAINER))
+#define EPHY_EMBED_CONTAINER_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EPHY_TYPE_EMBED_CONTAINER, EphyEmbedContainerIface))
+
+typedef struct _EphyEmbedContainer EphyEmbedContainer;
+typedef struct _EphyEmbedContainerIface EphyEmbedContainerIface;
+
+struct _EphyEmbedContainerIface
+{
+ void (* add_child) (EphyEmbedContainer *container,
+ EphyEmbed *child,
+ gint position,
+ gboolean jump_to);
+
+ void (* jump_to_child) (EphyEmbedContainer *container,
+ EphyEmbed *child);
+
+ void (* remove_child) (EphyEmbedContainer *container,
+ EphyEmbed *child);
+
+ EphyEmbed * (* get_active_child) (EphyEmbedContainer *container);
+
+ GList * (* get_children) (EphyEmbedContainer *container);
+
+ gboolean (* get_is_popup) (EphyEmbedContainer *container);
+
+ EphyEmbedChrome (* get_chrome) (EphyEmbedContainer *container);
+};
+
+GType ephy_embed_container_get_type (void);
+
+void ephy_embed_container_add_child (EphyEmbedContainer *container,
+ EphyEmbed *child,
+ gint position,
+ gboolean jump_to);
+
+void ephy_embed_container_jump_to_child (EphyEmbedContainer *container,
+ EphyEmbed *child);
+
+void ephy_embed_container_remove_child (EphyEmbedContainer *container,
+ EphyEmbed *child);
+
+EphyEmbed *ephy_embed_container_get_active_child (EphyEmbedContainer *container);
+
+GList *ephy_embed_container_get_children (EphyEmbedContainer *container);
+
+gboolean ephy_embed_container_get_is_popup (EphyEmbedContainer *container);
+
+EphyEmbedChrome ephy_embed_container_get_chrome (EphyEmbedContainer *container);
+
+G_END_DECLS
+
+#endif