1/* 2 * Copyright (C) 2008 Nuanti Ltd. 3 * Copyright (C) 2009 Jan Alonzo 4 * Copyright (C) 2011, 2012 Igalia S.L. 5 * 6 * Portions from Mozilla a11y, copyright as follows: 7 * 8 * The Original Code is mozilla.org code. 9 * 10 * The Initial Developer of the Original Code is 11 * Sun Microsystems, Inc. 12 * Portions created by the Initial Developer are Copyright (C) 2002 13 * the Initial Developer. All Rights Reserved. 14 * 15 * This library is free software; you can redistribute it and/or 16 * modify it under the terms of the GNU Library General Public 17 * License as published by the Free Software Foundation; either 18 * version 2 of the License, or (at your option) any later version. 19 * 20 * This library is distributed in the hope that it will be useful, 21 * but WITHOUT ANY WARRANTY; without even the implied warranty of 22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23 * Library General Public License for more details. 24 * 25 * You should have received a copy of the GNU Library General Public License 26 * along with this library; see the file COPYING.LIB. If not, write to 27 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 28 * Boston, MA 02110-1301, USA. 29 */ 30 31#include "config.h" 32#include "WebKitAccessibleInterfaceEditableText.h" 33 34#if HAVE(ACCESSIBILITY) 35 36#include "AccessibilityObject.h" 37#include "Document.h" 38#include "Editor.h" 39#include "Frame.h" 40#include "NotImplemented.h" 41#include "WebKitAccessibleWrapperAtk.h" 42 43using namespace WebCore; 44 45static AccessibilityObject* core(AtkEditableText* text) 46{ 47 if (!WEBKIT_IS_ACCESSIBLE(text)) 48 return 0; 49 50 return webkitAccessibleGetAccessibilityObject(WEBKIT_ACCESSIBLE(text)); 51} 52 53static gboolean webkitAccessibleEditableTextSetRunAttributes(AtkEditableText*, AtkAttributeSet*, gint, gint) 54{ 55 notImplemented(); 56 return FALSE; 57} 58 59static void webkitAccessibleEditableTextSetTextContents(AtkEditableText* text, const gchar* string) 60{ 61 // FIXME: string nullcheck? 62 core(text)->setValue(String::fromUTF8(string)); 63} 64 65static void webkitAccessibleEditableTextInsertText(AtkEditableText* text, const gchar* string, gint length, gint* position) 66{ 67 if (!string) 68 return; 69 70 AccessibilityObject* coreObject = core(text); 71 // FIXME: Not implemented in WebCore 72 // coreObject->setSelectedTextRange(PlainTextRange(*position, 0)); 73 // coreObject->setSelectedText(String::fromUTF8(string)); 74 75 Document* document = coreObject->document(); 76 if (!document || !document->frame()) 77 return; 78 79 coreObject->setSelectedVisiblePositionRange(coreObject->visiblePositionRangeForRange(PlainTextRange(*position, 0))); 80 coreObject->setFocused(true); 81 // FIXME: We should set position to the actual inserted text length, which may be less than that requested. 82 if (document->frame()->editor().insertTextWithoutSendingTextEvent(String::fromUTF8(string).substring(0, length), false, 0)) 83 *position += length; 84} 85 86static void webkitAccessibleEditableTextCopyText(AtkEditableText*, gint, gint) 87{ 88 notImplemented(); 89} 90 91static void webkitAccessibleEditableTextCutText(AtkEditableText*, gint, gint) 92{ 93 notImplemented(); 94} 95 96static void webkitAccessibleEditableTextDeleteText(AtkEditableText* text, gint startPos, gint endPos) 97{ 98 AccessibilityObject* coreObject = core(text); 99 // FIXME: Not implemented in WebCore 100 // coreObject->setSelectedTextRange(PlainTextRange(startPos, endPos - startPos)); 101 // coreObject->setSelectedText(String()); 102 103 Document* document = coreObject->document(); 104 if (!document || !document->frame()) 105 return; 106 107 coreObject->setSelectedVisiblePositionRange(coreObject->visiblePositionRangeForRange(PlainTextRange(startPos, endPos - startPos))); 108 coreObject->setFocused(true); 109 document->frame()->editor().performDelete(); 110} 111 112static void webkitAccessibleEditableTextPasteText(AtkEditableText*, gint) 113{ 114 notImplemented(); 115} 116 117void webkitAccessibleEditableTextInterfaceInit(AtkEditableTextIface* iface) 118{ 119 iface->set_run_attributes = webkitAccessibleEditableTextSetRunAttributes; 120 iface->set_text_contents = webkitAccessibleEditableTextSetTextContents; 121 iface->insert_text = webkitAccessibleEditableTextInsertText; 122 iface->copy_text = webkitAccessibleEditableTextCopyText; 123 iface->cut_text = webkitAccessibleEditableTextCutText; 124 iface->delete_text = webkitAccessibleEditableTextDeleteText; 125 iface->paste_text = webkitAccessibleEditableTextPasteText; 126} 127 128#endif 129