From fc51ca63f3adb83c1eb7cfb884457c75ee35cea2 Mon Sep 17 00:00:00 2001 From: "mario@webkit.org" Date: Tue, 24 Jan 2012 11:47:51 +0000 Subject: [PATCH] [GTK] Refactor GTK's accessibilitity code to be more modular https://bugs.webkit.org/show_bug.cgi?id=76783 Reviewed by Martin Robinson. New files for the implementation of the AtkEditableText interface, containing the related code from WebKitAccessibleWrapperAtk.cpp. * accessibility/gtk/WebKitAccessibleInterfaceEditableText.cpp: Added. (core): (webkitAccessibleEditableTextInterfaceInit): (webkitAccessibleEditableTextSetRunAttributes): (webkitAccessibleEditableTextSetTextContents): (webkitAccessibleEditableTextInsertText): (webkitAccessibleEditableTextCopyText): (webkitAccessibleEditableTextCutText): (webkitAccessibleEditableTextDeleteText): (webkitAccessibleEditableTextPasteText): * accessibility/gtk/WebKitAccessibleInterfaceEditableText.h: Added. * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp: Remove code related to the implementation of the AtkEditableText interface. Add new files to build files. * GNUmakefile.list.am: Add WebKitAccessibleInterfaceEditableText.[h|cpp]. * WebCore.gypi: Ditto. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@105722 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- Source/WebCore/ChangeLog | 29 +++++ Source/WebCore/GNUmakefile.list.am | 2 + Source/WebCore/WebCore.gypi | 2 + .../gtk/WebKitAccessibleInterfaceEditableText.cpp | 122 +++++++++++++++++++++ .../gtk/WebKitAccessibleInterfaceEditableText.h | 36 ++++++ .../gtk/WebKitAccessibleWrapperAtk.cpp | 85 +------------- 6 files changed, 193 insertions(+), 83 deletions(-) create mode 100644 Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceEditableText.cpp create mode 100644 Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceEditableText.h diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog index adad5a9..76c66ac 100644 --- a/Source/WebCore/ChangeLog +++ b/Source/WebCore/ChangeLog @@ -5,6 +5,35 @@ Reviewed by Martin Robinson. + New files for the implementation of the AtkEditableText interface, + containing the related code from WebKitAccessibleWrapperAtk.cpp. + + * accessibility/gtk/WebKitAccessibleInterfaceEditableText.cpp: Added. + (core): + (webkitAccessibleEditableTextInterfaceInit): + (webkitAccessibleEditableTextSetRunAttributes): + (webkitAccessibleEditableTextSetTextContents): + (webkitAccessibleEditableTextInsertText): + (webkitAccessibleEditableTextCopyText): + (webkitAccessibleEditableTextCutText): + (webkitAccessibleEditableTextDeleteText): + (webkitAccessibleEditableTextPasteText): + * accessibility/gtk/WebKitAccessibleInterfaceEditableText.h: Added. + * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp: Remove code + related to the implementation of the AtkEditableText interface. + + Add new files to build files. + + * GNUmakefile.list.am: Add WebKitAccessibleInterfaceEditableText.[h|cpp]. + * WebCore.gypi: Ditto. + +2012-01-24 Mario Sanchez Prada + + [GTK] Refactor GTK's accessibilitity code to be more modular + https://bugs.webkit.org/show_bug.cgi?id=76783 + + Reviewed by Martin Robinson. + New files for the implementation of the AtkDocument interface, containing the related code from WebKitAccessibleWrapperAtk.cpp. diff --git a/Source/WebCore/GNUmakefile.list.am b/Source/WebCore/GNUmakefile.list.am index 23e310a..5a285f1 100644 --- a/Source/WebCore/GNUmakefile.list.am +++ b/Source/WebCore/GNUmakefile.list.am @@ -4427,6 +4427,8 @@ webcoregtk_sources += \ Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceComponent.h \ Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceDocument.cpp \ Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceDocument.h \ + Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceEditableText.cpp \ + Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceEditableText.h \ Source/WebCore/accessibility/gtk/WebKitAccessibleUtil.cpp \ Source/WebCore/accessibility/gtk/WebKitAccessibleUtil.h \ Source/WebCore/accessibility/gtk/WebKitAccessibleWrapperAtk.cpp \ diff --git a/Source/WebCore/WebCore.gypi b/Source/WebCore/WebCore.gypi index ea04773..1247408 100644 --- a/Source/WebCore/WebCore.gypi +++ b/Source/WebCore/WebCore.gypi @@ -1351,6 +1351,8 @@ 'accessibility/gtk/WebKitAccessibleInterfaceComponent.h', 'accessibility/gtk/WebKitAccessibleInterfaceDocument.cpp', 'accessibility/gtk/WebKitAccessibleInterfaceDocument.h', + 'accessibility/gtk/WebKitAccessibleInterfaceEditableText.cpp', + 'accessibility/gtk/WebKitAccessibleInterfaceEditableText.h', 'accessibility/gtk/WebKitAccessibleUtil.cpp', 'accessibility/gtk/WebKitAccessibleUtil.h', 'accessibility/gtk/WebKitAccessibleWrapperAtk.cpp', diff --git a/Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceEditableText.cpp b/Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceEditableText.cpp new file mode 100644 index 0000000..cc2620d --- /dev/null +++ b/Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceEditableText.cpp @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2008 Nuanti Ltd. + * Copyright (C) 2009 Jan Alonzo + * Copyright (C) 2011, 2012 Igalia S.L. + * + * Portions from Mozilla a11y, copyright as follows: + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Sun Microsystems, Inc. + * Portions created by the Initial Developer are Copyright (C) 2002 + * the Initial Developer. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "config.h" +#include "WebKitAccessibleInterfaceEditableText.h" + +#include "AccessibilityObject.h" +#include "Document.h" +#include "Frame.h" +#include "NotImplemented.h" +#include "WebKitAccessibleWrapperAtk.h" + +using namespace WebCore; + +static AccessibilityObject* core(AtkEditableText* text) +{ + if (!WEBKIT_IS_ACCESSIBLE(text)) + return 0; + + return webkitAccessibleGetAccessibilityObject(WEBKIT_ACCESSIBLE(text)); +} + +void webkitAccessibleEditableTextInterfaceInit(AtkEditableTextIface* iface) +{ + iface->set_run_attributes = webkitAccessibleEditableTextSetRunAttributes; + iface->set_text_contents = webkitAccessibleEditableTextSetTextContents; + iface->insert_text = webkitAccessibleEditableTextInsertText; + iface->copy_text = webkitAccessibleEditableTextCopyText; + iface->cut_text = webkitAccessibleEditableTextCutText; + iface->delete_text = webkitAccessibleEditableTextDeleteText; + iface->paste_text = webkitAccessibleEditableTextPasteText; +} + +gboolean webkitAccessibleEditableTextSetRunAttributes(AtkEditableText*, AtkAttributeSet*, gint, gint) +{ + notImplemented(); + return FALSE; +} + +void webkitAccessibleEditableTextSetTextContents(AtkEditableText* text, const gchar* string) +{ + // FIXME: string nullcheck? + core(text)->setValue(String::fromUTF8(string)); +} + +void webkitAccessibleEditableTextInsertText(AtkEditableText* text, const gchar* string, gint length, gint* position) +{ + // FIXME: string nullcheck? + + AccessibilityObject* coreObject = core(text); + // FIXME: Not implemented in WebCore + // coreObject->setSelectedTextRange(PlainTextRange(*position, 0)); + // coreObject->setSelectedText(String::fromUTF8(string)); + + Document* document = coreObject->document(); + if (!document || !document->frame()) + return; + + coreObject->setSelectedVisiblePositionRange(coreObject->visiblePositionRangeForRange(PlainTextRange(*position, 0))); + coreObject->setFocused(true); + // FIXME: We should set position to the actual inserted text length, which may be less than that requested. + if (document->frame()->editor()->insertTextWithoutSendingTextEvent(String::fromUTF8(string), false, 0)) + *position += length; +} + +void webkitAccessibleEditableTextCopyText(AtkEditableText*, gint, gint) +{ + notImplemented(); +} + +void webkitAccessibleEditableTextCutText(AtkEditableText*, gint, gint) +{ + notImplemented(); +} + +void webkitAccessibleEditableTextDeleteText(AtkEditableText* text, gint startPos, gint endPos) +{ + AccessibilityObject* coreObject = core(text); + // FIXME: Not implemented in WebCore + // coreObject->setSelectedTextRange(PlainTextRange(startPos, endPos - startPos)); + // coreObject->setSelectedText(String()); + + Document* document = coreObject->document(); + if (!document || !document->frame()) + return; + + coreObject->setSelectedVisiblePositionRange(coreObject->visiblePositionRangeForRange(PlainTextRange(startPos, endPos - startPos))); + coreObject->setFocused(true); + document->frame()->editor()->performDelete(); +} + +void webkitAccessibleEditableTextPasteText(AtkEditableText*, gint) +{ + notImplemented(); +} diff --git a/Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceEditableText.h b/Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceEditableText.h new file mode 100644 index 0000000..97d1265 --- /dev/null +++ b/Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceEditableText.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2008 Nuanti Ltd. + * Copyright (C) 2009 Jan Alonzo + * Copyright (C) 2011, 2012 Igalia S.L. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef WebKitAccessibleInterfaceEditableText_h +#define WebKitAccessibleInterfaceEditableText_h + +#include + +void webkitAccessibleEditableTextInterfaceInit(AtkEditableTextIface*); +gboolean webkitAccessibleEditableTextSetRunAttributes(AtkEditableText*, AtkAttributeSet*, gint startOffset, gint endOffset); +void webkitAccessibleEditableTextSetTextContents(AtkEditableText*, const gchar*); +void webkitAccessibleEditableTextInsertText(AtkEditableText*, const gchar*, gint length, gint* position); +void webkitAccessibleEditableTextCopyText(AtkEditableText*, gint startPos, gint endPos); +void webkitAccessibleEditableTextCutText(AtkEditableText*, gint startPos, gint endPos); +void webkitAccessibleEditableTextDeleteText(AtkEditableText*, gint startPos, gint endPos); +void webkitAccessibleEditableTextPasteText(AtkEditableText*, gint position); + +#endif // WebKitAccessibleInterfaceEditableText_h diff --git a/Source/WebCore/accessibility/gtk/WebKitAccessibleWrapperAtk.cpp b/Source/WebCore/accessibility/gtk/WebKitAccessibleWrapperAtk.cpp index fd05ed8..466fc36 100644 --- a/Source/WebCore/accessibility/gtk/WebKitAccessibleWrapperAtk.cpp +++ b/Source/WebCore/accessibility/gtk/WebKitAccessibleWrapperAtk.cpp @@ -66,6 +66,7 @@ #include "WebKitAccessibleInterfaceAction.h" #include "WebKitAccessibleInterfaceComponent.h" #include "WebKitAccessibleInterfaceDocument.h" +#include "WebKitAccessibleInterfaceEditableText.h" #include "WebKitAccessibleUtil.h" #include "htmlediting.h" #include "visible_units.h" @@ -122,11 +123,6 @@ static AccessibilityObject* core(AtkText* text) return core(ATK_OBJECT(text)); } -static AccessibilityObject* core(AtkEditableText* text) -{ - return core(ATK_OBJECT(text)); -} - static AccessibilityObject* core(AtkImage* image) { return core(ATK_OBJECT(image)); @@ -1846,82 +1842,6 @@ static void atk_text_interface_init(AtkTextIface* iface) iface->set_caret_offset = webkit_accessible_text_set_caret_offset; } -// EditableText - -static gboolean webkit_accessible_editable_text_set_run_attributes(AtkEditableText* text, AtkAttributeSet* attrib_set, gint start_offset, gint end_offset) -{ - notImplemented(); - return FALSE; -} - -static void webkit_accessible_editable_text_set_text_contents(AtkEditableText* text, const gchar* string) -{ - // FIXME: string nullcheck? - core(text)->setValue(String::fromUTF8(string)); -} - -static void webkit_accessible_editable_text_insert_text(AtkEditableText* text, const gchar* string, gint length, gint* position) -{ - // FIXME: string nullcheck? - - AccessibilityObject* coreObject = core(text); - // FIXME: Not implemented in WebCore - // coreObject->setSelectedTextRange(PlainTextRange(*position, 0)); - // coreObject->setSelectedText(String::fromUTF8(string)); - - Document* document = coreObject->document(); - if (!document || !document->frame()) - return; - - coreObject->setSelectedVisiblePositionRange(coreObject->visiblePositionRangeForRange(PlainTextRange(*position, 0))); - coreObject->setFocused(true); - // FIXME: We should set position to the actual inserted text length, which may be less than that requested. - if (document->frame()->editor()->insertTextWithoutSendingTextEvent(String::fromUTF8(string), false, 0)) - *position += length; -} - -static void webkit_accessible_editable_text_copy_text(AtkEditableText* text, gint start_pos, gint end_pos) -{ - notImplemented(); -} - -static void webkit_accessible_editable_text_cut_text(AtkEditableText* text, gint start_pos, gint end_pos) -{ - notImplemented(); -} - -static void webkit_accessible_editable_text_delete_text(AtkEditableText* text, gint start_pos, gint end_pos) -{ - AccessibilityObject* coreObject = core(text); - // FIXME: Not implemented in WebCore - // coreObject->setSelectedTextRange(PlainTextRange(start_pos, end_pos - start_pos)); - // coreObject->setSelectedText(String()); - - Document* document = coreObject->document(); - if (!document || !document->frame()) - return; - - coreObject->setSelectedVisiblePositionRange(coreObject->visiblePositionRangeForRange(PlainTextRange(start_pos, end_pos - start_pos))); - coreObject->setFocused(true); - document->frame()->editor()->performDelete(); -} - -static void webkit_accessible_editable_text_paste_text(AtkEditableText* text, gint position) -{ - notImplemented(); -} - -static void atk_editable_text_interface_init(AtkEditableTextIface* iface) -{ - iface->set_run_attributes = webkit_accessible_editable_text_set_run_attributes; - iface->set_text_contents = webkit_accessible_editable_text_set_text_contents; - iface->insert_text = webkit_accessible_editable_text_insert_text; - iface->copy_text = webkit_accessible_editable_text_copy_text; - iface->cut_text = webkit_accessible_editable_text_cut_text; - iface->delete_text = webkit_accessible_editable_text_delete_text; - iface->paste_text = webkit_accessible_editable_text_paste_text; -} - // Image static void webkit_accessible_image_get_image_position(AtkImage* image, gint* x, gint* y, AtkCoordType coordType) @@ -2295,8 +2215,7 @@ static const GInterfaceInfo AtkInterfacesInitFunctions[] = { {reinterpret_cast(webkitAccessibleActionInterfaceInit), 0, 0}, {(GInterfaceInitFunc)atk_selection_interface_init, (GInterfaceFinalizeFunc) 0, 0}, - {(GInterfaceInitFunc)atk_editable_text_interface_init, - (GInterfaceFinalizeFunc) 0, 0}, + {reinterpret_cast(webkitAccessibleEditableTextInterfaceInit), 0, 0}, {(GInterfaceInitFunc)atk_text_interface_init, (GInterfaceFinalizeFunc) 0, 0}, {reinterpret_cast(webkitAccessibleComponentInterfaceInit), 0, 0}, -- 2.7.4