/*
* 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.
*
* $Id$
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "ephy-embed.h"
#include "ephy-marshal.h"
#include "mozilla-embed-single.h"
#include "mozilla-embed.h"
enum
{
NEW_WINDOW,
CONTEXT_MENU,
LINK_MESSAGE,
FAVICON,
JS_STATUS,
LOCATION,
TITLE,
PROGRESS,
NET_STATE,
VISIBILITY,
DESTROY_BRSR,
OPEN_URI,
SIZE_TO,
DOM_MOUSE_CLICK,
DOM_MOUSE_DOWN,
SECURITY_CHANGE,
ZOOM_CHANGE,
LAST_SIGNAL
};
static guint ephy_embed_signals[LAST_SIGNAL] = { 0 };
static void ephy_embed_base_init (gpointer base_class);
GType
ephy_embed_get_type (void)
{
static GType ephy_embed_type = 0;
if (ephy_embed_type == 0)
{
static const GTypeInfo our_info =
{
sizeof (EphyEmbedClass),
ephy_embed_base_init,
NULL,
};
ephy_embed_type = g_type_register_static (G_TYPE_INTERFACE,
"EphyEmbed",
&our_info,
(GTypeFlags)0);
}
return ephy_embed_type;
}
static void
ephy_embed_base_init (gpointer g_class)
{
static gboolean initialized = FALSE;
if (!initialized)
{
ephy_embed_signals[NEW_WINDOW] =
g_signal_new ("ge_new_window",
EPHY_TYPE_EMBED,
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (EphyEmbedClass, new_window),
NULL, NULL,
ephy_marshal_VOID__POINTER_INT,
G_TYPE_NONE,
2,
G_TYPE_POINTER,
G_TYPE_INT);
ephy_embed_signals[LINK_MESSAGE] =
g_signal_new ("ge_link_message",
EPHY_TYPE_EMBED,
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (EphyEmbedClass, link_message),
NULL, NULL,
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE,
1,
G_TYPE_STRING);
ephy_embed_signals[CONTEXT_MENU] =
g_signal_new ("ge_context_menu",
EPHY_TYPE_EMBED,
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (EphyEmbedClass, context_menu),
g_signal_accumulator_true_handled, NULL,
ephy_marshal_BOOLEAN__OBJECT,
G_TYPE_BOOLEAN,
1,
G_TYPE_OBJECT);
ephy_embed_signals[FAVICON] =
g_signal_new ("ge_favicon",
EPHY_TYPE_EMBED,
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (EphyEmbedClass, favicon),
NULL, NULL,
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE,
1,
G_TYPE_STRING);
ephy_embed_signals[JS_STATUS] =
g_signal_new ("ge_js_status",
EPHY_TYPE_EMBED,
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (EphyEmbedClass, js_status),
NULL, NULL,
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE,
1,
G_TYPE_STRING);
ephy_embed_signals[LOCATION] =
g_signal_new ("ge_location",
EPHY_TYPE_EMBED,
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (EphyEmbedClass, location),
NULL, NULL,
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE,
1,
G_TYPE_STRING);
ephy_embed_signals[TITLE] =
g_signal_new ("ge_title",
EPHY_TYPE_EMBED,
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (EphyEmbedClass, title),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE,
0);
ephy_embed_signals[PROGRESS] =
g_signal_new ("ge_progress",
EPHY_TYPE_EMBED,
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (EphyEmbedClass, progress),
NULL, NULL,
ephy_marshal_VOID__STRING_INT_INT,
G_TYPE_NONE,
3,
G_TYPE_STRING,
G_TYPE_INT,
G_TYPE_INT);
ephy_embed_signals[NET_STATE] =
g_signal_new ("ge_net_state",
EPHY_TYPE_EMBED,
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (EphyEmbedClass, net_state),
NULL, NULL,
ephy_marshal_VOID__STRING_INT,
G_TYPE_NONE,
2,
G_TYPE_STRING,
G_TYPE_INT);
ephy_embed_signals[VISIBILITY] =
g_signal_new ("ge_visibility",
EPHY_TYPE_EMBED,
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (EphyEmbedClass, visibility),
NULL, NULL,
g_cclosure_marshal_VOID__BOOLEAN,
G_TYPE_NONE,
1,
G_TYPE_BOOLEAN);
ephy_embed_signals[DESTROY_BRSR] =
g_signal_new ("ge_destroy_brsr",
EPHY_TYPE_EMBED,
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (EphyEmbedClass, destroy_brsr),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE,
0);
ephy_embed_signals[OPEN_URI] =
g_signal_new ("ge_open_uri",
EPHY_TYPE_EMBED,
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (EphyEmbedClass, open_uri),
NULL, NULL,
ephy_marshal_INT__STRING,
G_TYPE_INT,
1,
G_TYPE_STRING);
ephy_embed_signals[SIZE_TO] =
g_signal_new ("ge_size_to",
EPHY_TYPE_EMBED,
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (EphyEmbedClass, size_to),
NULL, NULL,
ephy_marshal_VOID__INT_INT,
G_TYPE_NONE,
2,
G_TYPE_INT,
G_TYPE_INT);
ephy_embed_signals[DOM_MOUSE_CLICK] =
g_signal_new ("ge_dom_mouse_click",
EPHY_TYPE_EMBED,
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (EphyEmbedClass, dom_mouse_click),
g_signal_accumulator_true_handled, NULL,
ephy_marshal_BOOLEAN__OBJECT,
G_TYPE_BOOLEAN,
1,
G_TYPE_POINTER);
ephy_embed_signals[DOM_MOUSE_DOWN] =
g_signal_new ("ge_dom_mouse_down",
EPHY_TYPE_EMBED,
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (EphyEmbedClass, dom_mouse_down),
g_signal_accumulator_true_handled, NULL,
ephy_marshal_BOOLEAN__OBJECT,
G_TYPE_BOOLEAN,
1,
G_TYPE_POINTER);
ephy_embed_signals[SECURITY_CHANGE] =
g_signal_new ("ge_security_change",
EPHY_TYPE_EMBED,
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (EphyEmbedClass, security_change),
NULL, NULL,
g_cclosure_marshal_VOID__INT,
G_TYPE_NONE,
1,
G_TYPE_INT);
ephy_embed_signals[ZOOM_CHANGE] =
g_signal_new ("ge_zoom_change",
EPHY_TYPE_EMBED,
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (EphyEmbedClass, zoom_change),
NULL, NULL,
g_cclosure_marshal_VOID__FLOAT,
G_TYPE_NONE,
1,
G_TYPE_FLOAT);
initialized = TRUE;
}
}
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)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
klass->load_url (embed, url);
}
void
ephy_embed_stop_load (EphyEmbed *embed)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
klass->stop_load (embed);
}
gboolean
ephy_embed_can_go_back (EphyEmbed *embed)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
return klass->can_go_back (embed);
}
gboolean
ephy_embed_can_go_forward (EphyEmbed *embed)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
return klass->can_go_forward (embed);
}
gboolean
ephy_embed_can_go_up (EphyEmbed *embed)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
return klass->can_go_up (embed);
}
GSList *
ephy_embed_get_go_up_list (EphyEmbed *embed)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
return klass->get_go_up_list (embed);
}
void
ephy_embed_go_back (EphyEmbed *embed)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
klass->go_back (embed);
}
void
ephy_embed_go_forward (EphyEmbed *embed)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
klass->go_forward (embed);
}
void
ephy_embed_go_up (EphyEmbed *embed)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
klass->go_up (embed);
}
char *
ephy_embed_get_title (EphyEmbed *embed)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
return klass->get_title (embed);
}
char *
ephy_embed_get_location (EphyEmbed *embed,
gboolean toplevel)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
return klass->get_location (embed, toplevel);
}
void
ephy_embed_reload (EphyEmbed *embed,
EmbedReloadFlags flags)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
klass->reload (embed, flags);
}
void
ephy_embed_zoom_set (EphyEmbed *embed,
float zoom,
gboolean reflow)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
klass->zoom_set (embed, zoom, reflow);
}
float
ephy_embed_zoom_get (EphyEmbed *embed)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
return klass->zoom_get (embed);
}
int
ephy_embed_shistory_n_items (EphyEmbed *embed)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
return klass->shistory_n_items (embed);
}
void
ephy_embed_shistory_get_nth (EphyEmbed *embed,
int nth,
gboolean is_relative,
char **url,
char **title)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
klass->shistory_get_nth (embed, nth, is_relative, url, title);
}
int
ephy_embed_shistory_get_pos (EphyEmbed *embed)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
return klass->shistory_get_pos (embed);
}
void
ephy_embed_shistory_go_nth (EphyEmbed *embed,
int nth)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
klass->shistory_go_nth (embed, nth);
}
void
ephy_embed_get_security_level (EphyEmbed *embed,
EmbedSecurityLevel *level,
char **description)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
klass->get_security_level (embed, level, description);
}
void
ephy_embed_find_set_properties (EphyEmbed *embed,
char *search_string,
gboolean case_sensitive,
gboolean match_word)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
klass->find_set_properties (embed, search_string, case_sensitive, match_word);
}
gboolean
ephy_embed_find_next (EphyEmbed *embed,
gboolean backwards)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
return klass->find_next (embed, backwards);
}
void
ephy_embed_activate (EphyEmbed *embed)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
klass->activate (embed);
}
void
ephy_embed_set_encoding (EphyEmbed *embed,
const char *encoding)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
klass->set_encoding (embed, encoding);
}
EphyEncodingInfo *
ephy_embed_get_encoding_info (EphyEmbed *embed)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
return klass->get_encoding_info (embed);
}
void
ephy_embed_print (EphyEmbed *embed,
EmbedPrintInfo *info)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
klass->print (embed, info);
}
void
ephy_embed_print_preview_close (EphyEmbed *embed)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
klass->print_preview_close (embed);
}
int
ephy_embed_print_preview_n_pages (EphyEmbed *embed)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
return klass->print_preview_n_pages (embed);
}
void
ephy_embed_print_preview_navigate (EphyEmbed *embed,
EmbedPrintPreviewNavType type,
int page)
{
EphyEmbedClass *klass = EPHY_EMBED_GET_CLASS (embed);
return klass->print_preview_navigate (embed, type, page);
}