summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/bindings/gobject
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2011-05-25 19:08:45 +0100
committerSteve Block <steveblock@google.com>2011-06-08 13:51:31 +0100
commit2bde8e466a4451c7319e3a072d118917957d6554 (patch)
tree28f4a1b869a513e565c7760d0e6a06e7cf1fe95a /Source/WebCore/bindings/gobject
parent6939c99b71d9372d14a0c74a772108052e8c48c8 (diff)
downloadexternal_webkit-2bde8e466a4451c7319e3a072d118917957d6554.zip
external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.tar.gz
external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.tar.bz2
Merge WebKit at r82507: Initial merge by git
Change-Id: I60ce9d780725b58b45e54165733a8ffee23b683e
Diffstat (limited to 'Source/WebCore/bindings/gobject')
-rw-r--r--Source/WebCore/bindings/gobject/GNUmakefile.am4
-rw-r--r--Source/WebCore/bindings/gobject/GObjectEventListener.cpp42
-rw-r--r--Source/WebCore/bindings/gobject/GObjectEventListener.h31
-rw-r--r--Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp31
-rw-r--r--Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h27
5 files changed, 91 insertions, 44 deletions
diff --git a/Source/WebCore/bindings/gobject/GNUmakefile.am b/Source/WebCore/bindings/gobject/GNUmakefile.am
index 881f45a..8370b86 100644
--- a/Source/WebCore/bindings/gobject/GNUmakefile.am
+++ b/Source/WebCore/bindings/gobject/GNUmakefile.am
@@ -244,6 +244,8 @@ webkitgtk_gdom_built_sources += \
DerivedSources/webkit/WebKitDOMUIEventPrivate.h \
DerivedSources/webkit/WebKitDOMValidityState.cpp \
DerivedSources/webkit/WebKitDOMValidityStatePrivate.h \
+ DerivedSources/webkit/WebKitDOMWebKitAnimation.cpp \
+ DerivedSources/webkit/WebKitDOMWebKitAnimationList.cpp \
DerivedSources/webkit/WebKitDOMWebKitPoint.cpp \
DerivedSources/webkit/WebKitDOMWebKitPointPrivate.h \
DerivedSources/webkit/WebKitDOMXPathExpression.cpp \
@@ -372,6 +374,8 @@ webkitgtk_built_h_api += \
DerivedSources/webkit/WebKitDOMObject.h \
DerivedSources/webkit/WebKitDOMNavigator.h \
DerivedSources/webkit/WebKitDOMScreen.h \
+ DerivedSources/webkit/WebKitDOMWebKitAnimation.h \
+ DerivedSources/webkit/WebKitDOMWebKitAnimationList.h \
DerivedSources/webkit/WebKitDOMWebKitPoint.h \
DerivedSources/webkit/WebKitDOMDOMMimeType.h \
DerivedSources/webkit/WebKitDOMDOMMimeTypeArray.h \
diff --git a/Source/WebCore/bindings/gobject/GObjectEventListener.cpp b/Source/WebCore/bindings/gobject/GObjectEventListener.cpp
index 27432b9..6211e7d 100644
--- a/Source/WebCore/bindings/gobject/GObjectEventListener.cpp
+++ b/Source/WebCore/bindings/gobject/GObjectEventListener.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Igalia S.L.
+ * Copyright (C) 2010, 2011 Igalia S.L.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -29,55 +29,51 @@
namespace WebCore {
-GObjectEventListener::GObjectEventListener(GObject* object, DOMWindow* window, Node* node, const char* domEventName, const char* signalName)
+typedef void (*GObjectEventListenerCallback)(GObject*, WebKitDOMEvent*, void*);
+
+GObjectEventListener::GObjectEventListener(GObject* object, EventTarget* target, const char* domEventName, GCallback handler, bool capture, void* userData)
: EventListener(GObjectEventListenerType)
, m_object(object)
- , m_coreNode(node)
- , m_coreWindow(window)
+ , m_coreTarget(target)
, m_domEventName(domEventName)
- , m_signalName(signalName)
+ , m_handler(handler)
+ , m_capture(capture)
+ , m_userData(userData)
{
- ASSERT(!m_coreWindow || !m_coreNode);
-
+ ASSERT(m_coreTarget);
g_object_weak_ref(object, reinterpret_cast<GWeakNotify>(GObjectEventListener::gobjectDestroyedCallback), this);
}
GObjectEventListener::~GObjectEventListener()
{
- if (!m_coreWindow && !m_coreNode)
+ if (!m_coreTarget)
return;
g_object_weak_unref(m_object, reinterpret_cast<GWeakNotify>(GObjectEventListener::gobjectDestroyedCallback), this);
}
void GObjectEventListener::gobjectDestroyed()
{
- ASSERT(!m_coreWindow || !m_coreNode);
-
- // We must set m_coreWindow and m_coreNode to null, because removeEventListener may call the
- // destructor as a side effect and we must be in the proper state to prevent g_object_weak_unref.
- if (DOMWindow* window = m_coreWindow) {
- m_coreWindow = 0;
- window->removeEventListener(m_domEventName.data(), this, false);
- return;
- }
+ ASSERT(m_coreTarget);
- Node* node = m_coreNode;
- m_coreNode = 0; // See above.
- node->removeEventListener(m_domEventName.data(), this, false);
+ // We must set m_coreTarget to null, because removeEventListener
+ // may call the destructor as a side effect and we must be in the
+ // proper state to prevent g_object_weak_unref.
+ EventTarget* target = m_coreTarget;
+ m_coreTarget = 0;
+ target->removeEventListener(m_domEventName.data(), this, m_capture);
}
void GObjectEventListener::handleEvent(ScriptExecutionContext*, Event* event)
{
- gboolean handled = FALSE;
WebKitDOMEvent* gobjectEvent = WEBKIT_DOM_EVENT(WebKit::kit(event));
- g_signal_emit_by_name(m_object, m_signalName.data(), gobjectEvent, &handled);
+ reinterpret_cast<GObjectEventListenerCallback>(m_handler)(m_object, gobjectEvent, m_userData);
g_object_unref(gobjectEvent);
}
bool GObjectEventListener::operator==(const EventListener& listener)
{
if (const GObjectEventListener* gobjectEventListener = GObjectEventListener::cast(&listener))
- return m_signalName == gobjectEventListener->m_signalName && m_object == gobjectEventListener->m_object;
+ return m_object == gobjectEventListener->m_object && m_handler == gobjectEventListener->m_handler;
return false;
}
diff --git a/Source/WebCore/bindings/gobject/GObjectEventListener.h b/Source/WebCore/bindings/gobject/GObjectEventListener.h
index ef1637a..6c85701 100644
--- a/Source/WebCore/bindings/gobject/GObjectEventListener.h
+++ b/Source/WebCore/bindings/gobject/GObjectEventListener.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Igalia S.L.
+ * Copyright (C) 2010, 2011 Igalia S.L.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -19,30 +19,30 @@
#ifndef GObjectEventListener_h
#define GObjectEventListener_h
-#include "DOMWindow.h"
#include "EventListener.h"
-#include "Node.h"
+#include "EventTarget.h"
#include <wtf/RefPtr.h>
#include <wtf/text/CString.h>
typedef struct _GObject GObject;
+typedef void (*GCallback) (void);
namespace WebCore {
class GObjectEventListener : public EventListener {
public:
- static void addEventListener(GObject* object, DOMWindow* window, const char* domEventName, const char* signalName)
+ static bool addEventListener(GObject* object, EventTarget* target, const char* domEventName, GCallback handler, bool useCapture, void* userData)
{
- RefPtr<GObjectEventListener> listener(adoptRef(new GObjectEventListener(object, window, 0, domEventName, signalName)));
- window->addEventListener(domEventName, listener.release(), false);
+ RefPtr<GObjectEventListener> listener(adoptRef(new GObjectEventListener(object, target, domEventName, handler, useCapture, userData)));
+ return target->addEventListener(domEventName, listener.release(), useCapture);
}
- static void addEventListener(GObject* object, Node* node, const char* domEventName, const char* signalName)
+ static bool removeEventListener(GObject* object, EventTarget* target, const char* domEventName, GCallback handler, bool useCapture)
{
- RefPtr<GObjectEventListener> listener(adoptRef(new GObjectEventListener(object, 0, node, domEventName, signalName)));
- node->addEventListener(domEventName, listener.release(), false);
+ GObjectEventListener key(object, target, domEventName, handler, useCapture, 0);
+ return target->removeEventListener(domEventName, &key, useCapture);
}
static void gobjectDestroyedCallback(GObjectEventListener* listener, GObject*)
@@ -60,7 +60,7 @@ public:
virtual bool operator==(const EventListener& other);
private:
- GObjectEventListener(GObject*, DOMWindow*, Node*, const char* domEventName, const char* signalName);
+ GObjectEventListener(GObject*, EventTarget*, const char* domEventName, GCallback handler, bool capture, void* userData);
~GObjectEventListener();
void gobjectDestroyed();
@@ -68,12 +68,13 @@ private:
GObject* m_object;
- // We do not need to keep a reference to these WebCore objects, because
- // we only use them when the GObject and thus the WebCore object is alive.
- Node* m_coreNode;
- DOMWindow* m_coreWindow;
+ // We do not need to keep a reference to the m_coreTarget, because
+ // we only use it when the GObject and thus the m_coreTarget object is alive.
+ EventTarget* m_coreTarget;
CString m_domEventName;
- CString m_signalName;
+ GCallback m_handler;
+ bool m_capture;
+ void* m_userData;
};
} // namespace WebCore
diff --git a/Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp b/Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp
index f2b1a94..f74c340 100644
--- a/Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp
+++ b/Source/WebCore/bindings/gobject/WebKitDOMEventTarget.cpp
@@ -66,17 +66,42 @@ static void webkit_dom_event_target_default_init(WebKitDOMEventTargetIface*)
void webkit_dom_event_target_dispatch_event(WebKitDOMEventTarget* target, WebKitDOMEvent* event, GError** error)
{
- WebKitDOMEventTargetIface* iface;
-
g_return_if_fail(WEBKIT_DOM_IS_EVENT_TARGET(target));
g_return_if_fail(WEBKIT_DOM_IS_EVENT(event));
- iface = WEBKIT_DOM_EVENT_TARGET_GET_IFACE(target);
+ WebKitDOMEventTargetIface* iface = WEBKIT_DOM_EVENT_TARGET_GET_IFACE(target);
if (iface->dispatch_event)
iface->dispatch_event(target, event, error);
}
+gboolean webkit_dom_event_target_add_event_listener(WebKitDOMEventTarget* target, const char* eventName, GCallback handler, gboolean bubble, gpointer userData)
+{
+
+ g_return_val_if_fail(WEBKIT_DOM_IS_EVENT_TARGET(target), FALSE);
+ g_return_val_if_fail(eventName, FALSE);
+
+ WebKitDOMEventTargetIface* iface = WEBKIT_DOM_EVENT_TARGET_GET_IFACE(target);
+
+ if (iface->add_event_listener)
+ return iface->add_event_listener(target, eventName, handler, bubble, userData);
+
+ return FALSE;
+}
+
+gboolean webkit_dom_event_target_remove_event_listener(WebKitDOMEventTarget* target, const char* eventName, GCallback handler, gboolean bubble)
+{
+ g_return_val_if_fail(WEBKIT_DOM_IS_EVENT_TARGET(target), FALSE);
+ g_return_val_if_fail(eventName, FALSE);
+
+ WebKitDOMEventTargetIface* iface = WEBKIT_DOM_EVENT_TARGET_GET_IFACE(target);
+
+ if (iface->remove_event_listener)
+ return iface->remove_event_listener(target, eventName, handler, bubble);
+
+ return FALSE;
+}
+
namespace WebKit {
WebCore::EventTarget* core(WebKitDOMEventTarget* request)
diff --git a/Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h b/Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h
index 206abc7..4adbda1 100644
--- a/Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h
+++ b/Source/WebCore/bindings/gobject/WebKitDOMEventTarget.h
@@ -37,9 +37,19 @@ struct _WebKitDOMEventTargetIface {
GTypeInterface gIface;
/* virtual table */
- void (* dispatch_event)(WebKitDOMEventTarget* target,
- WebKitDOMEvent* event,
- GError** error);
+ void (* dispatch_event)(WebKitDOMEventTarget *target,
+ WebKitDOMEvent *event,
+ GError **error);
+
+ gboolean (* add_event_listener)(WebKitDOMEventTarget *target,
+ const char *eventName,
+ GCallback handler,
+ gboolean bubble,
+ gpointer userData);
+ gboolean (* remove_event_listener)(WebKitDOMEventTarget *target,
+ const char *eventName,
+ GCallback handler,
+ gboolean bubble);
};
@@ -49,6 +59,17 @@ WEBKIT_API void webkit_dom_event_target_dispatch_event(WebKitDOMEventTarget
WebKitDOMEvent *event,
GError **error);
+WEBKIT_API gboolean webkit_dom_event_target_add_event_listener(WebKitDOMEventTarget *target,
+ const char *eventName,
+ GCallback handler,
+ gboolean bubble,
+ gpointer userData);
+
+WEBKIT_API gboolean webkit_dom_event_target_remove_event_listener(WebKitDOMEventTarget *target,
+ const char *eventName,
+ GCallback handler,
+ gboolean bubble);
+
G_END_DECLS
#endif /* WebKitDOMEventTarget_h */