/* -*- 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_WEB_VIEW_CHROME,
EPHY_WEB_VIEW_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));
g_object_interface_install_property (g_class,
g_param_spec_object ("active-child", NULL, NULL,
GTK_TYPE_WIDGET /* Can't use an interface type here */,
G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
}
}
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
* @set_active: whether to set @embed as the active child of @container
* after insertion
*
* Inserts @child into @container.
*
* Return value: @child's new position inside @container.
**/
gint
ephy_embed_container_add_child (EphyEmbedContainer *container,
EphyEmbed *child,
gint position,
gboolean set_active)
{
EphyEmbedContainerIface *iface;
g_return_val_if_fail (EPHY_IS_EMBED_CONTAINER (container), -1);
g_return_val_if_fail (EPHY_IS_EMBED (child), -1);
iface = EPHY_EMBED_CONTAINER_GET_IFACE (container);
return iface->add_child (container, child, position, set_active);
}
/**
* ephy_embed_container_set_active_child:
* @container: an #EphyEmbedContainer
* @child: an #EphyEmbed inside @container
*
* Sets @child as @container's active child.
**/
void
ephy_embed_container_set_active_child (EphyEmbedContainer *container,
EphyEmbed *child)
{
EphyEmbedContainerIface *iface;
g_return_if_fail (EPHY_IS_EMBED_CONTAINER (container));
g_return_if_fail (EPHY_IS_EMBED (child));
iface = EPHY_EMBED_CONTAINER_GET_IFACE (container);
iface->set_active_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;
g_return_if_fail (EPHY_IS_EMBED_CONTAINER (container));
g_return_if_fail (EPHY_IS_EMBED (child));
iface = EPHY_EMBED_CONTAINER_GET_IFACE (container);
iface->remove_child (container, child);
}
/**
* ephy_embed_container_get_active_child:
* @container: an #EphyEmbedContainer
*
* Returns @container's active #EphyEmbed.
*
* Return value: (transfer none): @container's active child
**/
EphyEmbed *
ephy_embed_container_get_active_child (EphyEmbedContainer *container)
{
EphyEmbedContainerIface *iface;
g_return_val_if_fail (EPHY_IS_EMBED_CONTAINER (container), NULL);
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: (element-type EphyEmbed) (transfer container):
* a newly-allocated list of #EphyEmbed:s
*/
GList *
ephy_embed_container_get_children (EphyEmbedContainer *container)
{
EphyEmbedContainerIface *iface;
g_return_val_if_fail (EPHY_IS_EMBED_CONTAINER (container), NULL);
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;
g_return_val_if_fail (EPHY_IS_EMBED_CONTAINER (container), FALSE);
iface = EPHY_EMBED_CONTAINER_GET_IFACE (container);
return iface->get_is_popup (container);
}
/**
* ephy_embed_container_get_chrome:
* @container: an #EphyEmbedContainer
*
* Returns the #EphyWebViewChrome flags indicating the visibility of several parts
* of the UI.
*
* Return value: #EphyWebViewChrome flags.
**/
EphyWebViewChrome
ephy_embed_container_get_chrome (EphyEmbedContainer *container)
{
EphyEmbedContainerIface *iface;
g_return_val_if_fail (EPHY_IS_EMBED_CONTAINER (container), 0);
iface = EPHY_EMBED_CONTAINER_GET_IFACE (container);
return iface->get_chrome (container);
}