2009-11-24 Joanmarie Diggs <joanmarie.diggs@gmail.com>
authoreric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 24 Nov 2009 18:47:14 +0000 (18:47 +0000)
committereric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 24 Nov 2009 18:47:14 +0000 (18:47 +0000)
        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25415
        [GTK][ATK] Please implement support for get_text_at_offset

        When building up the pango layout from text boxes, only append a
        newline char after verifying there are no more boxes on this line.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (getPangoLayoutForAtk):
2009-11-24  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25415
        [GTK][ATK] Please implement support for get_text_at_offset

        When building up the pango layout from text boxes, only append a
        newline char after verifying there are no more boxes on this line.

        * tests/testatk.c
        (test_webkit_atk_get_text_at_offset_newlines):
        (main):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@51342 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp
WebKit/gtk/ChangeLog
WebKit/gtk/tests/testatk.c

index a51686ba81aaf19f722f6bb70482b6a14b02378e..692a12ec58ebc84113e2cb2a4e769657184389d4 100644 (file)
@@ -1,3 +1,16 @@
+2009-11-24  Joanmarie Diggs  <joanmarie.diggs@gmail.com>
+
+        Reviewed by Xan Lopez.
+
+        https://bugs.webkit.org/show_bug.cgi?id=25415
+        [GTK][ATK] Please implement support for get_text_at_offset
+
+        When building up the pango layout from text boxes, only append a
+        newline char after verifying there are no more boxes on this line.
+
+        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
+        (getPangoLayoutForAtk):
+
 2009-11-24  Joseph Pecoraro  <joepeck@webkit.org>
 
         Reviewed by Pavel Feldman.
index d4f4ba8a47e02c8b1e76e69e81faa528eb2faa0b..308007c5d4a587dee3b7c2fc7f883fc891c12372 100644 (file)
@@ -890,7 +890,10 @@ static PangoLayout* getPangoLayoutForAtk(AtkText* textObject)
     while (box) {
         gchar* text = convertUniCharToUTF8(renderText->characters(), renderText->textLength(), box->start(), box->end());
         g_string_append(str, text);
-        g_string_append(str, "\n");
+        // Newline chars in the source result in separate text boxes, so check
+        // before adding a newline in the layout. See bug 25415 comment #78.
+        if (!box->nextOnLineExists())
+            g_string_append(str, "\n");
         box = box->nextTextBox();
     }
 
index fe33df1b9c53d4c9d3074c06e5ba299f1be3f535..0dad90c31cee0eb20db13e84404cd448b9048562 100644 (file)
@@ -1,3 +1,17 @@
+2009-11-24  Joanmarie Diggs  <joanmarie.diggs@gmail.com>
+
+        Reviewed by Xan Lopez.
+
+        https://bugs.webkit.org/show_bug.cgi?id=25415
+        [GTK][ATK] Please implement support for get_text_at_offset
+
+        When building up the pango layout from text boxes, only append a
+        newline char after verifying there are no more boxes on this line.
+
+        * tests/testatk.c
+        (test_webkit_atk_get_text_at_offset_newlines):
+        (main):
+
 2009-11-19  Pavel Feldman  <pfeldman@chromium.org>
 
         Reviewed by Gustavo Noronha Silva.
index e47898bb9c1b6cc7ee9d81ad9c8ee47c27028495..79bf75c0bdaeed7fb14b9a0222b08152c9397fe6 100644 (file)
@@ -28,6 +28,8 @@
 
 static const char* contents = "<html><body><p>This is a test. This is the second sentence. And this the third.</p></body></html>";
 
+static const char* contentsWithNewlines = "<html><body><p>This is a test. \n\nThis\n is the second sentence. And this the third.</p></body></html>";
+
 static gboolean bail_out(GMainLoop* loop)
 {
     if (g_main_loop_is_running(loop))
@@ -259,6 +261,39 @@ static void test_webkit_atk_get_text_at_offset(void)
     g_object_unref(webView);
 }
 
+static void test_webkit_atk_get_text_at_offset_newlines(void)
+{
+    WebKitWebView* webView;
+    AtkObject* obj;
+    GMainLoop* loop;
+    AtkText* text_obj;
+
+    webView = WEBKIT_WEB_VIEW(webkit_web_view_new());
+    g_object_ref_sink(webView);
+    GtkAllocation alloc = { 0, 0, 800, 600 };
+    gtk_widget_size_allocate(GTK_WIDGET(webView), &alloc);
+    webkit_web_view_load_string(webView, contentsWithNewlines, NULL, NULL, NULL);
+    loop = g_main_loop_new(NULL, TRUE);
+
+    g_timeout_add(100, (GSourceFunc)bail_out, loop);
+    g_main_loop_run(loop);
+
+    /* Get to the inner AtkText object */
+    obj = gtk_widget_get_accessible(GTK_WIDGET(webView));
+    g_assert(obj);
+    obj = atk_object_ref_accessible_child(obj, 0);
+    g_assert(obj);
+    obj = atk_object_ref_accessible_child(obj, 0);
+    g_assert(obj);
+
+    text_obj = ATK_TEXT(obj);
+    g_assert(ATK_IS_TEXT(text_obj));
+
+    run_get_text_tests(text_obj);
+
+    g_object_unref(webView);
+}
+
 int main(int argc, char** argv)
 {
     g_thread_init(NULL);
@@ -267,6 +302,7 @@ int main(int argc, char** argv)
     g_test_bug_base("https://bugs.webkit.org/");
     g_test_add_func("/webkit/atk/get_text_at_offset", test_webkit_atk_get_text_at_offset);
     g_test_add_func("/webkit/atk/get_text_at_offset_forms", test_webkit_atk_get_text_at_offset_forms);
+    g_test_add_func("/webkit/atk/get_text_at_offset_newlines", test_webkit_atk_get_text_at_offset_newlines);
     return g_test_run ();
 }