summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/bindings/gobject/GObjectEventListener.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/bindings/gobject/GObjectEventListener.cpp')
-rw-r--r--Source/WebCore/bindings/gobject/GObjectEventListener.cpp42
1 files changed, 19 insertions, 23 deletions
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;
}