diff options
Diffstat (limited to 'embed/mozilla')
-rw-r--r-- | embed/mozilla/EventContext.cpp | 14 | ||||
-rw-r--r-- | embed/mozilla/EventContext.h | 10 | ||||
-rw-r--r-- | embed/mozilla/Makefile.am | 2 | ||||
-rw-r--r-- | embed/mozilla/mozilla-embed-event.cpp | 208 | ||||
-rw-r--r-- | embed/mozilla/mozilla-embed-event.h | 74 | ||||
-rw-r--r-- | embed/mozilla/mozilla-embed.cpp | 24 |
6 files changed, 308 insertions, 24 deletions
diff --git a/embed/mozilla/EventContext.cpp b/embed/mozilla/EventContext.cpp index ea209a3c7..3bfa2d97d 100644 --- a/embed/mozilla/EventContext.cpp +++ b/embed/mozilla/EventContext.cpp @@ -188,7 +188,7 @@ nsresult EventContext::ResolveDocumentURL (nsIDocument *doc, const nsAString &re } nsresult EventContext::GetEventContext (nsIDOMEventTarget *EventTarget, - EphyEmbedEvent *info) + MozillaEmbedEvent *info) { nsresult rv; @@ -635,7 +635,7 @@ nsresult EventContext::GetCSSBackground (nsIDOMNode *node, nsAutoString& url) return NS_OK; } -nsresult EventContext::GetMouseEventInfo (nsIDOMMouseEvent *aMouseEvent, EphyEmbedEvent *info) +nsresult EventContext::GetMouseEventInfo (nsIDOMMouseEvent *aMouseEvent, MozillaEmbedEvent *info) { nsresult result; @@ -718,7 +718,7 @@ nsresult EventContext::GetMouseEventInfo (nsIDOMMouseEvent *aMouseEvent, EphyEmb return NS_OK; } -nsresult EventContext::GetKeyEventInfo (nsIDOMKeyEvent *aKeyEvent, EphyEmbedEvent *info) +nsresult EventContext::GetKeyEventInfo (nsIDOMKeyEvent *aKeyEvent, MozillaEmbedEvent *info) { nsresult rv; @@ -838,9 +838,7 @@ nsresult EventContext::SetIntProperty (const char *name, int value) g_value_set_int (val, value); - ephy_embed_event_set_property (mEmbedEvent, - name, - val); + mozilla_embed_event_set_property (mEmbedEvent, name, val); return NS_OK; } @@ -853,9 +851,7 @@ nsresult EventContext::SetStringProperty (const char *name, const char *value) g_value_set_string (val, value); - ephy_embed_event_set_property (mEmbedEvent, - name, - val); + mozilla_embed_event_set_property (mEmbedEvent, name, val); return NS_OK; } diff --git a/embed/mozilla/EventContext.h b/embed/mozilla/EventContext.h index 5953e4810..a2deba41b 100644 --- a/embed/mozilla/EventContext.h +++ b/embed/mozilla/EventContext.h @@ -34,7 +34,7 @@ #include "EphyBrowser.h" #include "ephy-embed.h" -#include "ephy-embed-event.h" +#include "mozilla-embed-event.h" class EventContext { @@ -44,8 +44,8 @@ public: nsresult Init (EphyBrowser *wrapper); - nsresult GetMouseEventInfo (nsIDOMMouseEvent *event, EphyEmbedEvent *info); - nsresult GetKeyEventInfo (nsIDOMKeyEvent *event, EphyEmbedEvent *info); + nsresult GetMouseEventInfo (nsIDOMMouseEvent *event, MozillaEmbedEvent *info); + nsresult GetKeyEventInfo (nsIDOMKeyEvent *event, MozillaEmbedEvent *info); nsresult GetTargetDocument (nsIDOMDocument **domDoc); private: @@ -56,14 +56,14 @@ private: nsresult ResolveBaseURL (nsIDocument *doc, const nsAString &relurl, nsACString &url); nsresult ResolveDocumentURL (nsIDocument *doc, const nsAString &relurl, nsACString &url); nsresult GetEventContext (nsIDOMEventTarget *EventTarget, - EphyEmbedEvent *info); + MozillaEmbedEvent *info); nsresult GetCSSBackground (nsIDOMNode *node, nsAutoString& url); nsresult IsPageFramed (nsIDOMNode *node, PRBool *Framed); nsresult CheckLinkScheme (const nsAString &link); nsresult SetIntProperty (const char *name, int value); nsresult SetStringProperty (const char *name, const char *value); nsresult SetStringProperty (const char *name, const nsAString &value); - EphyEmbedEvent *mEmbedEvent; + MozillaEmbedEvent *mEmbedEvent; }; #endif diff --git a/embed/mozilla/Makefile.am b/embed/mozilla/Makefile.am index 25d63176d..1340ef216 100644 --- a/embed/mozilla/Makefile.am +++ b/embed/mozilla/Makefile.am @@ -87,6 +87,8 @@ libephymozillaembed_la_SOURCES = \ mozilla-download.h \ mozilla-embed.cpp \ mozilla-embed.h \ + mozilla-embed-event.cpp \ + mozilla-embed-event.h \ mozilla-embed-persist.cpp \ mozilla-embed-persist.h \ mozilla-embed-single.cpp \ diff --git a/embed/mozilla/mozilla-embed-event.cpp b/embed/mozilla/mozilla-embed-event.cpp new file mode 100644 index 000000000..9300457a9 --- /dev/null +++ b/embed/mozilla/mozilla-embed-event.cpp @@ -0,0 +1,208 @@ +/* + * Copyright (C) 2000-2003 Marco Pesenti Gritti + * Copyright (C) 2004 Christian Persch + * + * 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$ + */ + +#include "mozilla-embed-event.h" + +#include <nsCOMPtr.h> +#include <nsIDOMEvent.h> + +#include <glib/ghash.h> +#include <gtk/gtktypeutils.h> + +#define MOZILLA_EMBED_EVENT_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), MOZILLA_TYPE_EMBED_EVENT, MozillaEmbedEventPrivate)) + +struct MozillaEmbedEventPrivate +{ + nsCOMPtr<nsIDOMEvent> dom_event; + GHashTable *props; +}; + +static void mozilla_embed_event_class_init (MozillaEmbedEventClass *klass); +static void mozilla_embed_event_init (MozillaEmbedEvent *event); +static void ephy_embed_event_iface_init (EphyEmbedEventIFace *iface); + +static GObjectClass *parent_class = NULL; + +GType +mozilla_embed_event_get_type (void) +{ + static GType type = 0; + + if (type == 0) + { + static const GTypeInfo our_info = + { + sizeof (MozillaEmbedEventClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) mozilla_embed_event_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (MozillaEmbedEvent), + 0, /* n_preallocs */ + (GInstanceInitFunc) mozilla_embed_event_init + }; + + static const GInterfaceInfo embed_event_info = + { + (GInterfaceInitFunc) ephy_embed_event_iface_init, + NULL, + NULL + }; + + type = g_type_register_static (G_TYPE_OBJECT, + "MozillaEmbedEvent", + &our_info, (GTypeFlags) 0); + + g_type_add_interface_static (type, + EPHY_TYPE_EMBED_EVENT, + &embed_event_info); + } + + return type; +} + +MozillaEmbedEvent * +mozilla_embed_event_new (gpointer dom_event) +{ + MozillaEmbedEvent *event; + + event = MOZILLA_EMBED_EVENT (g_object_new (MOZILLA_TYPE_EMBED_EVENT, NULL)); + + event->priv->dom_event = static_cast<nsIDOMEvent*>(dom_event); + + return event; +} + +void +mozilla_embed_event_set_property (MozillaEmbedEvent *event, + const char *name, + GValue *value) +{ + g_hash_table_insert (event->priv->props, + g_strdup (name), + value); +} + +static EphyEmbedEventType +impl_get_type (EphyEmbedEvent *event) +{ + return ((MozillaEmbedEvent *) event)->type; +} + +static EmbedEventContext +impl_get_context (EphyEmbedEvent *event) +{ + return (EmbedEventContext) ((MozillaEmbedEvent *) event)->context; +} + +static guint +impl_get_modifier (EphyEmbedEvent *event) +{ + return ((MozillaEmbedEvent *) event)->modifier; +} + +static void +impl_get_coordinates (EphyEmbedEvent *event, + guint *x, + guint *y) +{ + *x = ((MozillaEmbedEvent *) event)->x; + *y = ((MozillaEmbedEvent *) event)->y; +} + +static void +impl_get_property (EphyEmbedEvent *event, + const char *name, + const GValue **value) +{ + *value = (const GValue *) g_hash_table_lookup (((MozillaEmbedEvent *) event)->priv->props, name); +} + +static gboolean +impl_has_property (EphyEmbedEvent *event, + const char *name) +{ + gpointer tmp; + + tmp = g_hash_table_lookup (((MozillaEmbedEvent *) event)->priv->props, name); + + return tmp != NULL; +} + +static gpointer +impl_get_dom_event (EphyEmbedEvent *event) +{ + return NS_STATIC_CAST (gpointer, ((MozillaEmbedEvent *) event)->priv->dom_event); +} + +static void +free_g_value (gpointer value) +{ + g_value_unset ((GValue *) value); + g_free (value); +} + +static void +mozilla_embed_event_init (MozillaEmbedEvent *event) +{ + event->priv = MOZILLA_EMBED_EVENT_GET_PRIVATE (event); + + event->priv->dom_event = nsnull; + event->priv->props = g_hash_table_new_full (g_str_hash, g_str_equal, + g_free, free_g_value); +} + +static void +mozilla_embed_event_finalize (GObject *object) +{ + MozillaEmbedEvent *event = MOZILLA_EMBED_EVENT (object); + + g_hash_table_destroy (event->priv->props); + + event->priv->dom_event = nsnull; + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static void +ephy_embed_event_iface_init (EphyEmbedEventIFace *iface) +{ + iface->get_type = impl_get_type; + iface->get_context = impl_get_context; + iface->get_modifier = impl_get_modifier; + iface->get_coordinates = impl_get_coordinates; + iface->get_property = impl_get_property; + iface->has_property = impl_has_property; + iface->get_dom_event = impl_get_dom_event; +} + +static void +mozilla_embed_event_class_init (MozillaEmbedEventClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + parent_class = (GObjectClass *) g_type_class_peek_parent (klass); + + object_class->finalize = mozilla_embed_event_finalize; + + g_type_class_add_private (object_class, sizeof (MozillaEmbedEventPrivate)); +} diff --git a/embed/mozilla/mozilla-embed-event.h b/embed/mozilla/mozilla-embed-event.h new file mode 100644 index 000000000..b3be2a557 --- /dev/null +++ b/embed/mozilla/mozilla-embed-event.h @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2000-2003 Marco Pesenti Gritti + * Copyright (C) 2004 Christian Persch + * + * 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$ + */ + +#ifndef MOZILLA_EMBED_EVENT_H +#define MOZILLA_EMBED_EVENT_H + +#include "ephy-embed-event.h" + +#include <glib-object.h> +#include <glib.h> + +G_BEGIN_DECLS + +#define MOZILLA_TYPE_EMBED_EVENT (mozilla_embed_event_get_type ()) +#define MOZILLA_EMBED_EVENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MOZILLA_TYPE_EMBED_EVENT, MozillaEmbedEvent)) +#define MOZILLA_EMBED_EVENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), MOZILLA_TYPE_EMBED_EVENT, MozillaEmbedEventClass)) +#define MOZILLA_IS_EMBED_EVENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MOZILLA_TYPE_EMBED_EVENT)) +#define MOZILLA_IS_EMBED_EVENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MOZILLA_TYPE_EMBED_EVENT)) +#define MOZILLA_EMBED_EVENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MOZILLA_TYPE_EMBED_EVENT, MozillaEmbedEventClass)) + +typedef struct MozillaEmbedEventClass MozillaEmbedEventClass; +typedef struct MozillaEmbedEvent MozillaEmbedEvent; +typedef struct MozillaEmbedEventPrivate MozillaEmbedEventPrivate; + +struct MozillaEmbedEventClass +{ + GObjectClass parent_class; +}; + +struct MozillaEmbedEvent +{ + GObject parent; + + /*< private >*/ + MozillaEmbedEventPrivate *priv; + + /*< private >*/ /* public to the embed implementation */ + EphyEmbedEventType type; + guint context; + guint modifier; + guint x; + guint y; + guint keycode; +}; + +GType mozilla_embed_event_get_type (void); + +MozillaEmbedEvent *mozilla_embed_event_new (gpointer dom_event); + +void mozilla_embed_event_set_property (MozillaEmbedEvent *event, + const char *name, + GValue *value); + +G_END_DECLS + +#endif diff --git a/embed/mozilla/mozilla-embed.cpp b/embed/mozilla/mozilla-embed.cpp index 15b88938b..65d28a5d8 100644 --- a/embed/mozilla/mozilla-embed.cpp +++ b/embed/mozilla/mozilla-embed.cpp @@ -19,6 +19,7 @@ */ #include "mozilla-embed.h" +#include "mozilla-embed-event.h" #include "ephy-embed-shell.h" #include "ephy-command-manager.h" #include "ephy-string.h" @@ -29,7 +30,6 @@ #include "EventContext.h" #include <gtkmozembed.h> -#include <gtkmozembed_internal.h> #include <nsIWindowWatcher.h> #include <nsIURI.h> #include <nsIURL.h> @@ -864,8 +864,8 @@ mozilla_embed_dom_key_down_cb (GtkMozEmbed *embed, gpointer dom_event, return FALSE; } - EphyEmbedEvent *info; - info = ephy_embed_event_new (); + MozillaEmbedEvent *info; + info = mozilla_embed_event_new (dom_event); gboolean ret = FALSE; @@ -913,7 +913,7 @@ static gint mozilla_embed_dom_mouse_click_cb (GtkMozEmbed *embed, gpointer dom_event, MozillaEmbed *membed) { - EphyEmbedEvent *info; + MozillaEmbedEvent *info; EventContext event_context; gint return_value = FALSE; nsresult result; @@ -925,10 +925,12 @@ mozilla_embed_dom_mouse_click_cb (GtkMozEmbed *embed, gpointer dom_event, return FALSE; } - info = ephy_embed_event_new (); + info = mozilla_embed_event_new (dom_event); event_context.Init (mpriv->browser); - result = event_context.GetMouseEventInfo (static_cast<nsIDOMMouseEvent*>(dom_event), info); + result = event_context.GetMouseEventInfo + (static_cast<nsIDOMMouseEvent*>(dom_event), + MOZILLA_EMBED_EVENT (info)); if (NS_SUCCEEDED(result)) { @@ -956,7 +958,7 @@ static gint mozilla_embed_dom_mouse_down_cb (GtkMozEmbed *embed, gpointer dom_event, MozillaEmbed *membed) { - EphyEmbedEvent *info; + MozillaEmbedEvent *info; EventContext event_context; gint return_value = FALSE; nsresult result; @@ -969,13 +971,15 @@ mozilla_embed_dom_mouse_down_cb (GtkMozEmbed *embed, gpointer dom_event, return FALSE; } - info = ephy_embed_event_new (); + info = mozilla_embed_event_new (dom_event); event_context.Init (mpriv->browser); - result = event_context.GetMouseEventInfo (static_cast<nsIDOMMouseEvent*>(dom_event), info); + result = event_context.GetMouseEventInfo + (static_cast<nsIDOMMouseEvent*>(dom_event), + MOZILLA_EMBED_EVENT (info)); if (NS_FAILED (result)) return FALSE; - type = ephy_embed_event_get_event_type (info); + type = ephy_embed_event_get_event_type ((EphyEmbedEvent *) info); nsCOMPtr<nsIDOMDocument> domDoc; result = event_context.GetTargetDocument (getter_AddRefs(domDoc)); |