diff options
-rw-r--r-- | embed/Makefile.am | 2 | ||||
-rw-r--r-- | embed/ephy-embed-container.c | 179 | ||||
-rw-r--r-- | embed/ephy-embed-container.h | 85 |
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 |