[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.16-1409-g5afdf4d
dimich at chromium.org
dimich at chromium.org
Thu Dec 3 13:36:26 UTC 2009
The following commit has been merged in the webkit-1.1 branch:
commit 0e6eb5aa5ab5cc1011d93e8514c74814e3ce9e4d
Author: dimich at chromium.org <dimich at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Fri Nov 13 21:51:22 2009 +0000
Implement composition events introduced in DOM Level 3.
This change adds a new IDL which defines the composition events, adds a class which
implements the composition events, and sends the composition events according to
the specification.
https://bugs.webkit.org/show_bug.cgi?id=26310
Patch by Hironori Bono <hbono at chromium.org> on 2009-11-13
Reviewed by Oliver Hunt.
WebCore:
Test: fast/events/ime-composition-events-001.html
* DerivedSources.make: Added CompositionEvent so we can compile "CompositionEvent.idl".
* GNUmakefile.am: Added "CompositionEvent.{cpp,h,idl}".
* WebCore.gypi: ditto.
* WebCore.pro: ditto
* WebCore.vcproj/WebCore.vcproj: ditto.
* WebCore.xcodeproj/project.pbxproj: Added "CompositionEvent.{cpp,h,idl}" and "JSCompositionEvent.{cpp,h}".
* WebCoreSources.bkl: Added "JSCompositionEvent.{cpp,h}".
* bindings/js/JSEventCustom.cpp:
(WebCore::toJS): Call isCompositionEvent() to create the CompositionEvent wrapper.
* bindings/v8/DOMObjectsInclude.h: Added "JSCompositionEvent.h".
* bindings/v8/DerivedSourcesAllInOne.cpp: Added "JSCompositionEvent.cpp".
* bindings/v8/V8DOMWrapper.cpp: Call isCompositionEvent() to identify an event as a CompositionEvent.
(WebCore::V8DOMWrapper::convertEventToV8Object):
* bindings/v8/V8Index.cpp: Added "V8CompositionEvent.h".
* bindings/v8/V8Index.h: Added V8Index::COMPOSITIONEVENT.
* dom/CompositionEvent.cpp: Implements the CompositionEvent class.
(WebCore::CompositionEvent::CompositionEvent):
(WebCore::CompositionEvent::~CompositionEvent):
(WebCore::CompositionEvent::initCompositionEvent):
(WebCore::CompositionEvent::isCompositionEvent):
* dom/CompositionEvent.h: Declares the CompositionEvent class.
(WebCore::CompositionEvent::create):
(WebCore::CompositionEvent::data):
* dom/CompositionEvent.idl: Added the IDL of DOM CompositionEvent.
* dom/Event.cpp:
(WebCore::Event::isCompositionEvent): Added a method to identify an event is a CompositionEvent.
* dom/Event.h:
* dom/EventNames.h: Added composition{start,update,end} to eventNames.
* editing/Editor.cpp:
(WebCore::Editor::confirmComposition): Sent a CompositionEnd event.
(WebCore::Editor::setComposition): Sent a Composition{Start,Update,End} event.
LayoutTests:
* fast/events/ime-composition-events-001-expected.txt: Added.
* fast/events/ime-composition-events-001.html: Added.
* platform/gtk/Skipped: Skip this test because TextInputController is not implemented.
* platform/qt/Skipped: ditto.
* platform/win/Skipped: ditto.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@50968 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index d5ac784..ddf6214 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,19 @@
+2009-11-13 Hironori Bono <hbono at chromium.org>
+
+ Reviewed by Oliver Hunt.
+
+ Implement composition events introduced in DOM Level 3.
+ This change adds a new IDL which defines the composition events, adds a class which
+ implements the composition events, and sends the composition events according to
+ the specification.
+ https://bugs.webkit.org/show_bug.cgi?id=26310
+
+ * fast/events/ime-composition-events-001-expected.txt: Added.
+ * fast/events/ime-composition-events-001.html: Added.
+ * platform/gtk/Skipped: Skip this test because TextInputController is not implemented.
+ * platform/qt/Skipped: ditto.
+ * platform/win/Skipped: ditto.
+
2009-11-13 Kenneth Rohde Christiansen <kenneth at webkit.org>
Reviewed by Simon Hausmann.
diff --git a/LayoutTests/fast/events/ime-composition-events-001-expected.txt b/LayoutTests/fast/events/ime-composition-events-001-expected.txt
new file mode 100644
index 0000000..e5bfc97
--- /dev/null
+++ b/LayoutTests/fast/events/ime-composition-events-001-expected.txt
@@ -0,0 +1,14 @@
+This tests that calling input-method functions sends Composition Events and Text Events introduced in DOM Level 3.
+
+To test manually, enable an IME, input CJK characters, and see this page doesn't show 'FAILED' lines.
+
+
+SUCCESS: INPUT - compositionstart - "1"
+SUCCESS: INPUT - compositionupdate - "2"
+SUCCESS: INPUT - compositionupdate - "3"
+SUCCESS: INPUT - compositionend - "4"
+SUCCESS: INPUT - textInput - "4"
+SUCCESS: INPUT - compositionstart - "5"
+SUCCESS: INPUT - compositionupdate - "6"
+SUCCESS: INPUT - compositionupdate - "7"
+SUCCESS: INPUT - compositionend - ""
diff --git a/LayoutTests/fast/events/ime-composition-events-001.html b/LayoutTests/fast/events/ime-composition-events-001.html
new file mode 100644
index 0000000..c4d70be
--- /dev/null
+++ b/LayoutTests/fast/events/ime-composition-events-001.html
@@ -0,0 +1,53 @@
+<html>
+<head>
+<title></title>
+</head>
+<body>
+<p>This tests that calling input-method functions sends Composition Events and Text Events introduced in DOM Level 3.</p>
+<p>To test manually, enable an IME, input CJK characters, and see this page doesn't show 'FAILED' lines.</p>
+<input id="test" type="text"/>
+<ul id="console"></ul>
+<script language="javascript" type="text/javascript">
+function log(str) {
+ var li = document.createElement('li');
+ li.appendChild(document.createTextNode(str));
+ var console = document.getElementById('console');
+ console.appendChild(li);
+}
+
+function logEvent(e) {
+ var target = e.target;
+ var type = e.type;
+ if (e.type == 'compositionstart' || e.type == 'compositionupdate' || e.type == 'compositionend' || e.type == 'textInput')
+ log('SUCCESS: ' + target.tagName + ' - ' + e.type + ' - "' + e.data + '"');
+ else
+ log('FAILED: ' + target.tagName + ' - ' + e.type + ' - "' + e.data + '"');
+}
+
+var test = document.getElementById('test');
+test.focus();
+
+if (window.layoutTestController) {
+ layoutTestController.dumpAsText();
+
+ // Add event listeners to the <input> node.
+ test.addEventListener("compositionstart", logEvent, false);
+ test.addEventListener("compositionupdate", logEvent, false);
+ test.addEventListener("compositionend", logEvent, false);
+ test.addEventListener("textInput", logEvent, false);
+
+ // Case 1: Compose a text and commit it.
+ textInputController.setMarkedText('1', 0, 1);
+ textInputController.setMarkedText('2', 0, 1);
+ textInputController.setMarkedText('3', 0, 1);
+ textInputController.insertText('4');
+
+ // Case 2: Compose a text but cancel it.
+ textInputController.setMarkedText('5', 0, 1);
+ textInputController.setMarkedText('6', 0, 1);
+ textInputController.setMarkedText('7', 0, 1);
+ textInputController.setMarkedText('', 0, 0);
+}
+</script>
+</body>
+</html>
diff --git a/LayoutTests/platform/gtk/Skipped b/LayoutTests/platform/gtk/Skipped
index fd2932d..d42fa06 100644
--- a/LayoutTests/platform/gtk/Skipped
+++ b/LayoutTests/platform/gtk/Skipped
@@ -5573,6 +5573,7 @@ fast/loader/opaque-base-url.html
fast/forms/input-maxlength-ime-completed.html
fast/forms/input-maxlength-ime-preedit.html
fast/text/international/thai-cursor-position.html
+fast/events/ime-composition-events-001.html
# No User Scripts
userscripts
diff --git a/LayoutTests/platform/qt/Skipped b/LayoutTests/platform/qt/Skipped
index e1aefda..3ec5bf6 100644
--- a/LayoutTests/platform/qt/Skipped
+++ b/LayoutTests/platform/qt/Skipped
@@ -136,6 +136,7 @@ inspector/uncaught-dom8-exception.html
fast/forms/input-maxlength-ime-preedit.html
fast/forms/input-maxlength-ime-completed.html
fast/text/international/thai-cursor-position.html
+fast/events/ime-composition-events-001.html
# Missing layoutTestController.overridePreference()
fast/events/pageshow-pagehide-on-back-cached.html
diff --git a/LayoutTests/platform/win/Skipped b/LayoutTests/platform/win/Skipped
index f92bb0c..c1543ef 100644
--- a/LayoutTests/platform/win/Skipped
+++ b/LayoutTests/platform/win/Skipped
@@ -638,6 +638,7 @@ http/tests/loading/preload-img-test.html
fast/forms/input-maxlength-ime-completed.html
fast/forms/input-maxlength-ime-preedit.html
fast/text/international/thai-cursor-position.html
+fast/events/ime-composition-events-001.html
# Failing media tests on windows <http://webkit.org/b/29047>
media/audio-delete-while-step-button-clicked.html
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 3f37c70..227f6fb 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,47 @@
+2009-11-13 Hironori Bono <hbono at chromium.org>
+
+ Reviewed by Oliver Hunt.
+
+ Implement composition events introduced in DOM Level 3.
+ This change adds a new IDL which defines the composition events, adds a class which
+ implements the composition events, and sends the composition events according to
+ the specification.
+ https://bugs.webkit.org/show_bug.cgi?id=26310
+
+ Test: fast/events/ime-composition-events-001.html
+
+ * DerivedSources.make: Added CompositionEvent so we can compile "CompositionEvent.idl".
+ * GNUmakefile.am: Added "CompositionEvent.{cpp,h,idl}".
+ * WebCore.gypi: ditto.
+ * WebCore.pro: ditto
+ * WebCore.vcproj/WebCore.vcproj: ditto.
+ * WebCore.xcodeproj/project.pbxproj: Added "CompositionEvent.{cpp,h,idl}" and "JSCompositionEvent.{cpp,h}".
+ * WebCoreSources.bkl: Added "JSCompositionEvent.{cpp,h}".
+ * bindings/js/JSEventCustom.cpp:
+ (WebCore::toJS): Call isCompositionEvent() to create the CompositionEvent wrapper.
+ * bindings/v8/DOMObjectsInclude.h: Added "JSCompositionEvent.h".
+ * bindings/v8/DerivedSourcesAllInOne.cpp: Added "JSCompositionEvent.cpp".
+ * bindings/v8/V8DOMWrapper.cpp: Call isCompositionEvent() to identify an event as a CompositionEvent.
+ (WebCore::V8DOMWrapper::convertEventToV8Object):
+ * bindings/v8/V8Index.cpp: Added "V8CompositionEvent.h".
+ * bindings/v8/V8Index.h: Added V8Index::COMPOSITIONEVENT.
+ * dom/CompositionEvent.cpp: Implements the CompositionEvent class.
+ (WebCore::CompositionEvent::CompositionEvent):
+ (WebCore::CompositionEvent::~CompositionEvent):
+ (WebCore::CompositionEvent::initCompositionEvent):
+ (WebCore::CompositionEvent::isCompositionEvent):
+ * dom/CompositionEvent.h: Declares the CompositionEvent class.
+ (WebCore::CompositionEvent::create):
+ (WebCore::CompositionEvent::data):
+ * dom/CompositionEvent.idl: Added the IDL of DOM CompositionEvent.
+ * dom/Event.cpp:
+ (WebCore::Event::isCompositionEvent): Added a method to identify an event is a CompositionEvent.
+ * dom/Event.h:
+ * dom/EventNames.h: Added composition{start,update,end} to eventNames.
+ * editing/Editor.cpp:
+ (WebCore::Editor::confirmComposition): Sent a CompositionEnd event.
+ (WebCore::Editor::setComposition): Sent a Composition{Start,Update,End} event.
+
2009-11-13 Jens Alfke <snej at chromium.org>
Reviewed by Dimitri Glazkov.
diff --git a/WebCore/DerivedSources.cpp b/WebCore/DerivedSources.cpp
index 6fca4ce..bce87d2 100644
--- a/WebCore/DerivedSources.cpp
+++ b/WebCore/DerivedSources.cpp
@@ -42,6 +42,7 @@
#include "JSClientRectList.cpp"
#include "JSClipboard.cpp"
#include "JSComment.cpp"
+#include "JSCompositionEvent.cpp"
#include "JSConsole.cpp"
#include "JSCounter.cpp"
#include "JSCSSCharsetRule.cpp"
diff --git a/WebCore/DerivedSources.make b/WebCore/DerivedSources.make
index 5223c83..5844609 100644
--- a/WebCore/DerivedSources.make
+++ b/WebCore/DerivedSources.make
@@ -96,6 +96,7 @@ DOM_CLASSES = \
ClientRectList \
Clipboard \
Comment \
+ CompositionEvent \
Console \
Coordinates \
Counter \
diff --git a/WebCore/GNUmakefile.am b/WebCore/GNUmakefile.am
index 37b65b7..7f4f429 100644
--- a/WebCore/GNUmakefile.am
+++ b/WebCore/GNUmakefile.am
@@ -115,6 +115,7 @@ IDL_BINDINGS += \
WebCore/dom/ClientRectList.idl \
WebCore/dom/Clipboard.idl \
WebCore/dom/Comment.idl \
+ WebCore/dom/CompositionEvent.idl \
WebCore/dom/DOMCoreException.idl \
WebCore/dom/DOMImplementation.idl \
WebCore/dom/Document.idl \
@@ -678,6 +679,8 @@ webcore_sources += \
WebCore/dom/ClipboardEvent.h \
WebCore/dom/Comment.cpp \
WebCore/dom/Comment.h \
+ WebCore/dom/CompositionEvent.cpp \
+ WebCore/dom/CompositionEvent.h \
WebCore/dom/ContainerNode.cpp \
WebCore/dom/ContainerNode.h \
WebCore/dom/ContainerNodeAlgorithms.h \
diff --git a/WebCore/WebCore.gypi b/WebCore/WebCore.gypi
index 84c8811..ace380f 100644
--- a/WebCore/WebCore.gypi
+++ b/WebCore/WebCore.gypi
@@ -38,6 +38,7 @@
'dom/ClientRectList.idl',
'dom/Clipboard.idl',
'dom/Comment.idl',
+ 'dom/CompositionEvent.idl',
'dom/DOMCoreException.idl',
'dom/DOMImplementation.idl',
'dom/Document.idl',
@@ -1003,6 +1004,8 @@
'dom/ClipboardEvent.h',
'dom/Comment.cpp',
'dom/Comment.h',
+ 'dom/CompositionEvent.cpp',
+ 'dom/CompositionEvent.h',
'dom/ContainerNode.cpp',
'dom/ContainerNode.h',
'dom/ContainerNodeAlgorithms.h',
diff --git a/WebCore/WebCore.pro b/WebCore/WebCore.pro
index 13771f7..415b22d 100644
--- a/WebCore/WebCore.pro
+++ b/WebCore/WebCore.pro
@@ -331,6 +331,7 @@ IDL_BINDINGS += \
dom/Clipboard.idl \
dom/CDATASection.idl \
dom/Comment.idl \
+ dom/CompositionEvent.idl \
dom/DocumentFragment.idl \
dom/Document.idl \
dom/DocumentType.idl \
@@ -852,6 +853,7 @@ SOURCES += \
dom/Clipboard.cpp \
dom/ClipboardEvent.cpp \
dom/Comment.cpp \
+ dom/CompositionEvent.cpp \
dom/ContainerNode.cpp \
dom/CSSMappedAttributeDeclaration.cpp \
dom/Document.cpp \
diff --git a/WebCore/WebCore.vcproj/WebCore.vcproj b/WebCore/WebCore.vcproj/WebCore.vcproj
index becd798..85a54cb 100644
--- a/WebCore/WebCore.vcproj/WebCore.vcproj
+++ b/WebCore/WebCore.vcproj/WebCore.vcproj
@@ -1281,6 +1281,62 @@
>
</File>
<File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCompositionEvent.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Internal|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_All|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCompositionEvent.h"
+ >
+ </File>
+ <File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSConsole.cpp"
>
<FileConfiguration
@@ -28315,6 +28371,14 @@
>
</File>
<File
+ RelativePath="..\dom\CompositionEvent.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\dom\CompositionEvent.h"
+ >
+ </File>
+ <File
RelativePath="..\dom\ContainerNode.cpp"
>
</File>
diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj
index a3eeab7..80f7c66 100644
--- a/WebCore/WebCore.xcodeproj/project.pbxproj
+++ b/WebCore/WebCore.xcodeproj/project.pbxproj
@@ -1215,6 +1215,10 @@
7693BAD3106C2DCA007B0823 /* PluginHalter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7693BACF106C2DCA007B0823 /* PluginHalter.cpp */; };
7693BAD4106C2DCA007B0823 /* PluginHalter.h in Headers */ = {isa = PBXBuildFile; fileRef = 7693BAD0106C2DCA007B0823 /* PluginHalter.h */; };
7693BAD5106C2DCA007B0823 /* PluginHalterClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 7693BAD1106C2DCA007B0823 /* PluginHalterClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 79AC9218109945C80021266E /* JSCompositionEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 79AC9216109945C80021266E /* JSCompositionEvent.cpp */; };
+ 79AC9219109945C80021266E /* JSCompositionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 79AC9217109945C80021266E /* JSCompositionEvent.h */; };
+ 79F2F5A11091939A000D87CB /* CompositionEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 79F2F59E1091939A000D87CB /* CompositionEvent.cpp */; };
+ 79F2F5A21091939A000D87CB /* CompositionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 79F2F59F1091939A000D87CB /* CompositionEvent.h */; };
7A1E88F5101CC384000C4DF5 /* ScriptArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A1E88F3101CC384000C4DF5 /* ScriptArray.cpp */; };
7A1E88F6101CC384000C4DF5 /* ScriptArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A1E88F4101CC384000C4DF5 /* ScriptArray.h */; settings = {ATTRIBUTES = (Private, ); }; };
7A24587B1021EAF4000A00AA /* InspectorDOMAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A2458791021EAF4000A00AA /* InspectorDOMAgent.cpp */; };
@@ -6517,6 +6521,11 @@
7693BACF106C2DCA007B0823 /* PluginHalter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PluginHalter.cpp; sourceTree = "<group>"; };
7693BAD0106C2DCA007B0823 /* PluginHalter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PluginHalter.h; sourceTree = "<group>"; };
7693BAD1106C2DCA007B0823 /* PluginHalterClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PluginHalterClient.h; sourceTree = "<group>"; };
+ 79AC9216109945C80021266E /* JSCompositionEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JSCompositionEvent.cpp; path = JSCompositionEvent.cpp; sourceTree = "<group>"; };
+ 79AC9217109945C80021266E /* JSCompositionEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JSCompositionEvent.h; path = JSCompositionEvent.h; sourceTree = "<group>"; };
+ 79F2F59E1091939A000D87CB /* CompositionEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CompositionEvent.cpp; sourceTree = "<group>"; };
+ 79F2F59F1091939A000D87CB /* CompositionEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CompositionEvent.h; sourceTree = "<group>"; };
+ 79F2F5A01091939A000D87CB /* CompositionEvent.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CompositionEvent.idl; sourceTree = "<group>"; };
7A1E88F3101CC384000C4DF5 /* ScriptArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptArray.cpp; sourceTree = "<group>"; };
7A1E88F4101CC384000C4DF5 /* ScriptArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptArray.h; sourceTree = "<group>"; };
7A2458791021EAF4000A00AA /* InspectorDOMAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorDOMAgent.cpp; sourceTree = "<group>"; };
@@ -13390,6 +13399,8 @@
children = (
BC946345107A934B00857193 /* JSBeforeLoadEvent.cpp */,
BC946347107A936600857193 /* JSBeforeLoadEvent.h */,
+ 79AC9216109945C80021266E /* JSCompositionEvent.cpp */,
+ 79AC9217109945C80021266E /* JSCompositionEvent.h */,
2ECF7ADA10162B3800427DE7 /* JSErrorEvent.cpp */,
2ECF7ADB10162B3800427DE7 /* JSErrorEvent.h */,
14E8378309F85D1C00B85AE4 /* JSEvent.cpp */,
@@ -15488,6 +15499,9 @@
6550B697099DF0270090D781 /* Comment.cpp */,
6550B698099DF0270090D781 /* Comment.h */,
85089CC70A98C22600A275AA /* Comment.idl */,
+ 79F2F59E1091939A000D87CB /* CompositionEvent.cpp */,
+ 79F2F59F1091939A000D87CB /* CompositionEvent.h */,
+ 79F2F5A01091939A000D87CB /* CompositionEvent.idl */,
A81872140977D3C0005826D9 /* ContainerNode.cpp */,
A81872110977D3C0005826D9 /* ContainerNode.h */,
A8C4A7F809D563270003AC8D /* CSSMappedAttributeDeclaration.cpp */,
@@ -15835,6 +15849,7 @@
6550B6A2099DF0270090D781 /* Comment.h in Headers */,
316FE1160E6E1DA700BF6088 /* CompositeAnimation.h in Headers */,
93309DDD099E64920056E581 /* CompositeEditCommand.h in Headers */,
+ 79F2F5A21091939A000D87CB /* CompositionEvent.h in Headers */,
65C97AF308EA908800ACD273 /* config.h in Headers */,
BC0B36A50CD3C67C00AC7EB5 /* Console.h in Headers */,
41F0618E0F5F069800A07EAC /* ConsoleMessage.h in Headers */,
@@ -17002,6 +17017,7 @@
51EC926A0CE90DD400F90308 /* JSCustomSQLTransactionErrorCallback.h in Headers */,
1A3417C90CECFF250049CBDE /* JSCustomVoidCallback.h in Headers */,
E10B937C0B73C00A003ED890 /* JSCustomXPathNSResolver.h in Headers */,
+ 79AC9219109945C80021266E /* JSCompositionEvent.h in Headers */,
1AE82F900CAAFA9D002237AE /* JSDatabase.h in Headers */,
BC77D16A0FF19F560070887B /* JSDataGridColumn.h in Headers */,
BC77D16C0FF19F560070887B /* JSDataGridColumnList.h in Headers */,
@@ -18466,6 +18482,7 @@
37C238221098C84200EF9F72 /* ComplexTextControllerCoreText.cpp in Sources */,
316FE1150E6E1DA700BF6088 /* CompositeAnimation.cpp in Sources */,
93309DDC099E64920056E581 /* CompositeEditCommand.cpp in Sources */,
+ 79F2F5A11091939A000D87CB /* CompositionEvent.cpp in Sources */,
BC0B36A40CD3C67C00AC7EB5 /* Console.cpp in Sources */,
41F0618F0F5F069800A07EAC /* ConsoleMessage.cpp in Sources */,
A818721F0977D3C0005826D9 /* ContainerNode.cpp in Sources */,
@@ -19134,6 +19151,7 @@
BCA83E4F0D7CE1E9003421A8 /* JSClipboard.cpp in Sources */,
BCA83E520D7CE205003421A8 /* JSClipboardCustom.cpp in Sources */,
93F9B6E00BA0FB7200854064 /* JSComment.cpp in Sources */,
+ 79AC9218109945C80021266E /* JSCompositionEvent.cpp in Sources */,
BC98543D0CD3D98B00069BC1 /* JSConsole.cpp in Sources */,
C0DFC8700DB6841A003EAE7C /* JSConsoleCustom.cpp in Sources */,
FE6FD48D0F676E9300092873 /* JSCoordinates.cpp in Sources */,
diff --git a/WebCore/WebCoreSources.bkl b/WebCore/WebCoreSources.bkl
index c579084..72c208a 100644
--- a/WebCore/WebCoreSources.bkl
+++ b/WebCore/WebCoreSources.bkl
@@ -274,6 +274,7 @@ This file contains the list of files needed to build WebCore.
DerivedSources/WebCore/JSClientRectList.cpp
DerivedSources/WebCore/JSClipboard.cpp
DerivedSources/WebCore/JSComment.cpp
+ DerivedSources/WebCore/JSCompositionEvent.cpp
DerivedSources/WebCore/JSConsole.cpp
DerivedSources/WebCore/JSCoordinates.cpp
DerivedSources/WebCore/JSCounter.cpp
@@ -454,6 +455,7 @@ This file contains the list of files needed to build WebCore.
dom/Clipboard.cpp
dom/ClipboardEvent.cpp
dom/Comment.cpp
+ dom/CompositionEvent.cpp
dom/ContainerNode.cpp
dom/DOMImplementation.cpp
dom/Document.cpp
diff --git a/WebCore/bindings/js/JSEventCustom.cpp b/WebCore/bindings/js/JSEventCustom.cpp
index edf9151..8b1950c 100644
--- a/WebCore/bindings/js/JSEventCustom.cpp
+++ b/WebCore/bindings/js/JSEventCustom.cpp
@@ -30,9 +30,11 @@
#include "JSEvent.h"
#include "Clipboard.h"
+#include "CompositionEvent.h"
#include "Event.h"
#include "JSBeforeLoadEvent.h"
#include "JSClipboard.h"
+#include "JSCompositionEvent.h"
#include "JSErrorEvent.h"
#include "JSKeyboardEvent.h"
#include "JSMessageEvent.h"
@@ -107,6 +109,8 @@ JSValue toJS(ExecState* exec, JSDOMGlobalObject* globalObject, Event* event)
else if (event->isSVGZoomEvent())
wrapper = CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGZoomEvent, event);
#endif
+ else if (event->isCompositionEvent())
+ wrapper = CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, CompositionEvent, event);
else
wrapper = CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, UIEvent, event);
} else if (event->isMutationEvent())
diff --git a/WebCore/bindings/v8/DOMObjectsInclude.h b/WebCore/bindings/v8/DOMObjectsInclude.h
index 3d3b988..97211ae 100644
--- a/WebCore/bindings/v8/DOMObjectsInclude.h
+++ b/WebCore/bindings/v8/DOMObjectsInclude.h
@@ -61,6 +61,7 @@
#include "ClientRect.h"
#include "ClientRectList.h"
#include "Clipboard.h"
+#include "CompositionEvent.h"
#include "Console.h"
#include "Counter.h"
#include "CSSCharsetRule.h"
diff --git a/WebCore/bindings/v8/DerivedSourcesAllInOne.cpp b/WebCore/bindings/v8/DerivedSourcesAllInOne.cpp
index 58c2f95..4e81c94 100644
--- a/WebCore/bindings/v8/DerivedSourcesAllInOne.cpp
+++ b/WebCore/bindings/v8/DerivedSourcesAllInOne.cpp
@@ -62,6 +62,7 @@
#include "bindings/V8ClientRectList.cpp"
#include "bindings/V8Clipboard.cpp"
#include "bindings/V8Comment.cpp"
+#include "bindings/V8CompositionEvent.cpp"
#include "bindings/V8Console.cpp"
#include "bindings/V8Counter.cpp"
#include "bindings/V8CSSCharsetRule.cpp"
diff --git a/WebCore/bindings/v8/V8DOMWrapper.cpp b/WebCore/bindings/v8/V8DOMWrapper.cpp
index 50e6351..60eaa55 100644
--- a/WebCore/bindings/v8/V8DOMWrapper.cpp
+++ b/WebCore/bindings/v8/V8DOMWrapper.cpp
@@ -1224,6 +1224,8 @@ v8::Handle<v8::Value> V8DOMWrapper::convertEventToV8Object(Event* event)
else if (event->isSVGZoomEvent())
type = V8ClassIndex::SVGZOOMEVENT;
#endif
+ else if (event->isCompositionEvent())
+ type = V8ClassIndex::COMPOSITIONEVENT;
else
type = V8ClassIndex::UIEVENT;
} else if (event->isMutationEvent())
diff --git a/WebCore/bindings/v8/V8Index.cpp b/WebCore/bindings/v8/V8Index.cpp
index ff9d2c0..7a43ac2 100644
--- a/WebCore/bindings/v8/V8Index.cpp
+++ b/WebCore/bindings/v8/V8Index.cpp
@@ -46,6 +46,7 @@
#include "V8ClientRectList.h"
#include "V8Clipboard.h"
#include "V8Comment.h"
+#include "V8CompositionEvent.h"
#include "V8Console.h"
#include "V8Counter.h"
#include "V8CSSStyleDeclaration.h"
diff --git a/WebCore/bindings/v8/V8Index.h b/WebCore/bindings/v8/V8Index.h
index 441f46d..b120034 100644
--- a/WebCore/bindings/v8/V8Index.h
+++ b/WebCore/bindings/v8/V8Index.h
@@ -332,6 +332,7 @@ typedef v8::Persistent<v8::FunctionTemplate> (*FunctionTemplateFactory)();
V(CLIENTRECTLIST, ClientRectList) \
V(CLIPBOARD, Clipboard) \
V(CONSOLE, Console) \
+ V(COMPOSITIONEVENT, CompositionEvent) \
V(COUNTER, Counter) \
V(CSSCHARSETRULE, CSSCharsetRule) \
V(CSSFONTFACERULE, CSSFontFaceRule) \
diff --git a/WebCore/dom/CompositionEvent.cpp b/WebCore/dom/CompositionEvent.cpp
new file mode 100644
index 0000000..508d5e6
--- /dev/null
+++ b/WebCore/dom/CompositionEvent.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2009 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "config.h"
+#include "CompositionEvent.h"
+
+#include "EventNames.h"
+
+namespace WebCore {
+
+CompositionEvent::CompositionEvent()
+{
+}
+
+CompositionEvent::CompositionEvent(const AtomicString& type, PassRefPtr<AbstractView> view, const String& data)
+ : UIEvent(type, true, true, view, 0)
+ , m_data(data)
+{
+}
+
+CompositionEvent::~CompositionEvent()
+{
+}
+
+void CompositionEvent::initCompositionEvent(const AtomicString& type, bool canBubble, bool cancelable, PassRefPtr<AbstractView> view, const String& data)
+{
+ if (dispatched())
+ return;
+
+ initUIEvent(type, canBubble, cancelable, view, 0);
+
+ m_data = data;
+}
+
+bool CompositionEvent::isCompositionEvent() const
+{
+ return true;
+}
+
+} // namespace WebCore
diff --git a/WebCore/dom/CompositionEvent.h b/WebCore/dom/CompositionEvent.h
new file mode 100644
index 0000000..4ff01ae
--- /dev/null
+++ b/WebCore/dom/CompositionEvent.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2009 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef CompositionEvent_h
+#define CompositionEvent_h
+
+#include "UIEvent.h"
+
+namespace WebCore {
+
+ class CompositionEvent : public UIEvent {
+ public:
+ static PassRefPtr<CompositionEvent> create()
+ {
+ return adoptRef(new CompositionEvent);
+ }
+ static PassRefPtr<CompositionEvent> create(const AtomicString& type, PassRefPtr<AbstractView> view, const String& data)
+ {
+ return adoptRef(new CompositionEvent(type, view, data));
+ }
+ virtual ~CompositionEvent();
+
+ void initCompositionEvent(const AtomicString& type, bool canBubble, bool cancelable, PassRefPtr<AbstractView>, const String& data);
+
+ String data() const { return m_data; }
+
+ virtual bool isCompositionEvent() const;
+
+ private:
+ CompositionEvent();
+ CompositionEvent(const AtomicString& type, PassRefPtr<AbstractView> view, const String& data);
+
+ String m_data;
+ };
+
+} // namespace WebCore
+
+#endif // CompositionEvent_h
diff --git a/WebCore/dom/CompositionEvent.idl b/WebCore/dom/CompositionEvent.idl
new file mode 100644
index 0000000..3752091
--- /dev/null
+++ b/WebCore/dom/CompositionEvent.idl
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2009 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+module events {
+
+ // Introduced in DOM Level 3:
+ interface [
+ GenerateConstructor
+ ] CompositionEvent : UIEvent {
+
+ readonly attribute DOMString data;
+
+ void initCompositionEvent(in DOMString typeArg,
+ in boolean canBubbleArg,
+ in boolean cancelableArg,
+ in DOMWindow viewArg,
+ in DOMString dataArg);
+
+ };
+
+}
diff --git a/WebCore/dom/Event.cpp b/WebCore/dom/Event.cpp
index ba310ef..65906a1 100644
--- a/WebCore/dom/Event.cpp
+++ b/WebCore/dom/Event.cpp
@@ -96,6 +96,11 @@ bool Event::isTextEvent() const
return false;
}
+bool Event::isCompositionEvent() const
+{
+ return false;
+}
+
bool Event::isDragEvent() const
{
return false;
diff --git a/WebCore/dom/Event.h b/WebCore/dom/Event.h
index 74a2f10..3b36e02 100644
--- a/WebCore/dom/Event.h
+++ b/WebCore/dom/Event.h
@@ -103,6 +103,7 @@ namespace WebCore {
virtual bool isMutationEvent() const;
virtual bool isKeyboardEvent() const;
virtual bool isTextEvent() const;
+ virtual bool isCompositionEvent() const;
virtual bool isDragEvent() const; // a subset of mouse events
virtual bool isClipboardEvent() const;
virtual bool isMessageEvent() const;
diff --git a/WebCore/dom/EventNames.h b/WebCore/dom/EventNames.h
index 8111336..380f74f 100644
--- a/WebCore/dom/EventNames.h
+++ b/WebCore/dom/EventNames.h
@@ -41,6 +41,9 @@ namespace WebCore {
macro(checking) \
macro(click) \
macro(close) \
+ macro(compositionend) \
+ macro(compositionstart) \
+ macro(compositionupdate) \
macro(connect) \
macro(contextmenu) \
macro(copy) \
diff --git a/WebCore/editing/Editor.cpp b/WebCore/editing/Editor.cpp
index 22cba01..40aed60 100644
--- a/WebCore/editing/Editor.cpp
+++ b/WebCore/editing/Editor.cpp
@@ -30,6 +30,7 @@
#include "AXObjectCache.h"
#include "ApplyStyleCommand.h"
#include "CharacterNames.h"
+#include "CompositionEvent.h"
#include "CreateLinkCommand.h"
#include "CSSComputedStyleDeclaration.h"
#include "CSSMutableStyleDeclaration.h"
@@ -1370,6 +1371,16 @@ void Editor::confirmComposition(const String& text, bool preserveSelection)
return;
}
+ // Dispatch a compositionend event to the focused node.
+ // We should send this event before sending a TextEvent as written in Section 6.2.2 and 6.2.3 of
+ // the DOM Event specification.
+ Node* target = m_frame->document()->focusedNode();
+ if (target) {
+ RefPtr<CompositionEvent> event = CompositionEvent::create(eventNames().compositionendEvent, m_frame->domWindow(), text);
+ ExceptionCode ec = 0;
+ target->dispatchEvent(event, ec);
+ }
+
// If text is empty, then delete the old composition here. If text is non-empty, InsertTextCommand::input
// will delete the old composition with an optimized replace operation.
if (text.isEmpty())
@@ -1396,7 +1407,38 @@ void Editor::setComposition(const String& text, const Vector<CompositionUnderlin
setIgnoreCompositionSelectionChange(false);
return;
}
-
+
+ Node* target = m_frame->document()->focusedNode();
+ if (target) {
+ // Dispatch an appropriate composition event to the focused node.
+ // We check the composition status and choose an appropriate composition event since this
+ // function is used for three purposes:
+ // 1. Starting a new composition.
+ // Send a compositionstart event when this function creates a new composition node, i.e.
+ // m_compositionNode == 0 && !text.isEmpty().
+ // 2. Updating the existing composition node.
+ // Send a compositionupdate event when this function updates the existing composition
+ // node, i.e. m_compositionNode != 0 && !text.isEmpty().
+ // 3. Canceling the ongoing composition.
+ // Send a compositionend event when function deletes the existing composition node, i.e.
+ // m_compositionNode != 0 && test.isEmpty().
+ RefPtr<CompositionEvent> event;
+ if (!m_compositionNode) {
+ // We should send a compositionstart event only when the given text is not empty because this
+ // function doesn't create a composition node when the text is empty.
+ if (!text.isEmpty())
+ event = CompositionEvent::create(eventNames().compositionstartEvent, m_frame->domWindow(), text);
+ } else {
+ if (!text.isEmpty())
+ event = CompositionEvent::create(eventNames().compositionupdateEvent, m_frame->domWindow(), text);
+ else
+ event = CompositionEvent::create(eventNames().compositionendEvent, m_frame->domWindow(), text);
+ }
+ ExceptionCode ec = 0;
+ if (event.get())
+ target->dispatchEvent(event, ec);
+ }
+
// If text is empty, then delete the old composition here. If text is non-empty, InsertTextCommand::input
// will delete the old composition with an optimized replace operation.
if (text.isEmpty())
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list