Changeset 56639 in webkit
- Timestamp:
- Mar 26, 2010 1:19:15 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r56634 r56639 1 2010-03-25 Ojan Vafai <ojan@chromium.org> 2 3 Reviewed by Darin Adler. 4 5 shift+home/end and cmd+shift+left/right don't extend the selection correctly 6 https://bugs.webkit.org/show_bug.cgi?id=36539 7 8 * editing/selection/extend-after-mouse-selection.html: 9 * editing/selection/extend-selection-expected.txt: 10 Extending forward by lineboundary selects the whole line. Now extending backwards 11 by lineboundary after the whole line is selected is a noop instead of collapsed 12 the selection to the start. 13 * editing/selection/move-begin-end.html: 14 Just cleaned up this test. 15 * platform/mac/editing/selection/extend-after-mouse-selection-expected.txt: 16 1 17 2010-03-26 Brian Weinstein <bweinstein@apple.com> 2 18 -
trunk/LayoutTests/editing/selection/extend-after-mouse-selection.html
r56567 r56639 50 50 extendSelectionForwardByLineBoundaryCommand(); 51 51 52 if (onMacPlatform) { 53 // FIXME: This encodes what TextEdit does. Currently WebKit does the wrong thing. 54 // The selection should go from the beginning of startTarget to the end of the line that endTarget is on. 52 if (onMacPlatform) 55 53 assertSelectionAt(endTarget.nextSibling, 1, startTarget.firstChild, 0); 56 }else54 else 57 55 assertSelectionAt(startTarget.firstChild, 0, endTarget.nextSibling, 1); 58 56 59 57 extendSelectionBackwardByLineBoundaryCommand(); 60 58 61 if (onMacPlatform) { 62 // FIXME: This encodes what TextEdit does. Currently WebKit does the wrong thing. 63 // The selection should contain the both entire lines that endTarget and startTarget are on. 59 if (onMacPlatform) 64 60 assertSelectionAt(endTarget.nextSibling, 1, startTarget.previousSibling, 0); 65 }else61 else 66 62 assertSelectionAt(startTarget.firstChild, 0, document.getElementById('test'), 4); 67 63 } -
trunk/LayoutTests/editing/selection/extend-selection-expected.txt
r55990 r56639 396 396 Test 1, LTR: 397 397 Extending forward: "\nabc ABC xyz DEF def\n"[(1,1), (1,20)] 398 Extending backward: "\nabc ABC xyz DEF def\n"[(1,20) , (1,1)]398 Extending backward: "\nabc ABC xyz DEF def\n"[(1,20)] 399 399 Test 1, RTL: 400 400 Extending forward: "\nabc ABC xyz DEF def\n"[(1,1), (1,20)] 401 Extending backward: "\nabc ABC xyz DEF def\n"[(1,20) , (1,1)]401 Extending backward: "\nabc ABC xyz DEF def\n"[(1,20)] 402 402 Test 2, LTR: 403 403 Extending forward: "\nABC xyz DEF def GHI\n"[(1,1), (1,20)] 404 Extending backward: "\nABC xyz DEF def GHI\n"[(1,20) , (1,1)]404 Extending backward: "\nABC xyz DEF def GHI\n"[(1,20)] 405 405 Test 2, RTL: 406 406 Extending forward: "\nABC xyz DEF def GHI\n"[(1,1), (1,20)] 407 Extending backward: "\nABC xyz DEF def GHI\n"[(1,20) , (1,1)]407 Extending backward: "\nABC xyz DEF def GHI\n"[(1,20)] 408 408 Test 3, LTR: 409 409 Extending forward: "\nABC DEF ABC\n"[(1,1), (1,12)] 410 Extending backward: "\nABC DEF ABC\n"[(1,12) , (1,1)]410 Extending backward: "\nABC DEF ABC\n"[(1,12)] 411 411 Test 3, RTL: 412 412 Extending forward: "\nABC DEF ABC\n"[(1,1), (1,12)] 413 Extending backward: "\nABC DEF ABC\n"[(1,12) , (1,1)]413 Extending backward: "\nABC DEF ABC\n"[(1,12)] 414 414 Test 4, LTR: 415 415 Extending forward: "\nabc efd dabeb\n"[(1,1), (1,14)] 416 Extending backward: "\nabc efd dabeb\n"[(1,14) , (1,1)]416 Extending backward: "\nabc efd dabeb\n"[(1,14)] 417 417 Test 4, RTL: 418 418 Extending forward: "\nabc efd dabeb\n"[(1,1), (1,14)] 419 Extending backward: "\nabc efd dabeb\n"[(1,14) , (1,1)]419 Extending backward: "\nabc efd dabeb\n"[(1,14)] 420 420 Test 5, LTR: 421 421 Extending forward: "Lorem "[(0,0)], " amet"[(0,5)] 422 Extending backward: " amet"[(0,5)] , "Lorem "[(0,0)]422 Extending backward: " amet"[(0,5)] 423 423 Test 5, RTL: 424 424 Extending forward: "Lorem "[(0,0)], " amet"[(0,5)] 425 Extending backward: " amet"[(0,5)] , "Lorem "[(0,0)]425 Extending backward: " amet"[(0,5)] 426 426 Test 6, LTR: 427 427 Extending forward: "Lorem "[(0,0)], " amet"[(0,5)] 428 Extending backward: " amet"[(0,5)] , "Lorem "[(0,0)]428 Extending backward: " amet"[(0,5)] 429 429 Test 6, RTL: 430 430 Extending forward: "Lorem "[(0,0)], " amet"[(0,5)] 431 Extending backward: " amet"[(0,5)] , "Lorem "[(0,0)]431 Extending backward: " amet"[(0,5)] 432 432 Test 7, LTR: 433 433 Extending forward: "Lorem "[(0,0)], " amet"[(0,5)] 434 Extending backward: " amet"[(0,5)] , "Lorem "[(0,0)]434 Extending backward: " amet"[(0,5)] 435 435 Test 7, RTL: 436 436 Extending forward: "Lorem "[(0,0)], " amet"[(0,5)] 437 Extending backward: " amet"[(0,5)] , "Lorem "[(0,0)]437 Extending backward: " amet"[(0,5)] 438 438 Test 8, LTR: 439 439 Extending forward: "Lorem "[(0,0)], " amet"[(0,5)] 440 Extending backward: " amet"[(0,5)] , "Lorem "[(0,0)]440 Extending backward: " amet"[(0,5)] 441 441 Test 8, RTL: 442 442 Extending forward: "Lorem "[(0,0)], " amet"[(0,5)] 443 Extending backward: " amet"[(0,5)] , "Lorem "[(0,0)]443 Extending backward: " amet"[(0,5)] 444 444 Test 9, LTR: 445 445 Extending forward: "Lorem "[(0,0), (0,5)] 446 Extending backward: "Lorem "[(0,5) , (0,0)]446 Extending backward: "Lorem "[(0,5)] 447 447 Test 9, RTL: 448 448 Extending forward: "Lorem "[(0,0), (0,5)] 449 Extending backward: "Lorem "[(0,5) , (0,0)]449 Extending backward: "Lorem "[(0,5)] 450 450 Test 10, LTR: 451 451 Extending forward: "Lorem "[(0,0)], " amet"[(0,5)] 452 Extending backward: " amet"[(0,5)] , "Lorem "[(0,0)]452 Extending backward: " amet"[(0,5)] 453 453 Test 10, RTL: 454 454 Extending forward: "Lorem "[(0,0)], " amet"[(0,5)] 455 Extending backward: " amet"[(0,5)] , "Lorem "[(0,0)]455 Extending backward: " amet"[(0,5)] 456 456 Test 11, LTR: 457 457 Extending forward: "Lorem "[(0,0)], "ipsum dolor"[(0,11)] 458 Extending backward: "ipsum dolor"[(0,11)] , "Lorem "[(0,0)]458 Extending backward: "ipsum dolor"[(0,11)] 459 459 Test 11, RTL: 460 460 Extending forward: "Lorem "[(0,0)], "ipsum dolor"[(0,11)] 461 Extending backward: "ipsum dolor"[(0,11)] , "Lorem "[(0,0)]461 Extending backward: "ipsum dolor"[(0,11)] 462 462 Test 12, LTR: 463 463 Extending forward: "Lorem "[(0,0)], " amet"[(0,5)] 464 Extending backward: " amet"[(0,5)] , "Lorem "[(0,0)]464 Extending backward: " amet"[(0,5)] 465 465 Test 12, RTL: 466 466 Extending forward: "Lorem "[(0,0)], " amet"[(0,5)] 467 Extending backward: " amet"[(0,5)] , "Lorem "[(0,0)]467 Extending backward: " amet"[(0,5)] 468 468 Test 13, LTR: 469 469 Extending forward: "Lorem "[(0,0), (0,5)] 470 Extending backward: "Lorem "[(0,5) , (0,0)]470 Extending backward: "Lorem "[(0,5)] 471 471 Test 13, RTL: 472 472 Extending forward: "Lorem "[(0,0), (0,5)] 473 Extending backward: "Lorem "[(0,5) , (0,0)]473 Extending backward: "Lorem "[(0,5)] 474 474 Test 14, LTR: 475 475 Extending forward: "\n Just\n "[(2,2)], "\n BFDX\n"[(2,6)] 476 Extending backward: "\n BFDX\n"[(2,6)] , "\n Just\n "[(2,2)]476 Extending backward: "\n BFDX\n"[(2,6)] 477 477 Test 14, RTL: 478 478 Extending forward: "\n Just\n "[(2,2)], "\n BFDX\n"[(2,6)] 479 Extending backward: "\n BFDX\n"[(2,6)] , "\n Just\n "[(2,2)]479 Extending backward: "\n BFDX\n"[(2,6)] 480 480 Test 15, LTR: 481 481 Extending forward: "\n Just\n "[(2,2)], "\n ever\n"[(2,6)] 482 Extending backward: "\n ever\n"[(2,6)] , "\n Just\n "[(2,2)]482 Extending backward: "\n ever\n"[(2,6)] 483 483 Test 15, RTL: 484 484 Extending forward: "\n Just\n "[(2,2)], "\n ever\n"[(2,6)] 485 Extending backward: "\n ever\n"[(2,6)] , "\n Just\n "[(2,2)]485 Extending backward: "\n ever\n"[(2,6)] 486 486 Test 16, LTR: 487 487 Extending forward: "car means ABC."[(0,0), (0,14)] 488 Extending backward: "car means ABC."[(0,14) , (0,0)]488 Extending backward: "car means ABC."[(0,14)] 489 489 Test 16, RTL: 490 490 Extending forward: "car means ABC."[(0,0), (0,14)] 491 Extending backward: "car means ABC."[(0,14) , (0,0)]491 Extending backward: "car means ABC."[(0,14)] 492 492 Test 17, LTR: 493 493 Extending forward: "car DEF ABC."[(1,1), (1,13)] 494 Extending backward: "car DEF ABC."[(1,13) , (1,1)]494 Extending backward: "car DEF ABC."[(1,13)] 495 495 Test 17, RTL: 496 496 Extending forward: "car DEF ABC."[(1,1), (1,13)] 497 Extending backward: "car DEF ABC."[(1,13) , (1,1)]497 Extending backward: "car DEF ABC."[(1,13)] 498 498 Test 18, LTR: 499 499 Extending forward: "he said "car DEF ABC.""[(0,0), (0,24)] 500 Extending backward: "he said "car DEF ABC.""[(0,24) , (0,0)]500 Extending backward: "he said "car DEF ABC.""[(0,24)] 501 501 Test 18, RTL: 502 502 Extending forward: "he said "car DEF ABC.""[(0,0), (0,24)] 503 Extending backward: "he said "car DEF ABC.""[(0,24) , (0,0)]503 Extending backward: "he said "car DEF ABC.""[(0,24)] 504 504 Test 19, LTR: 505 505 Extending forward: "GHI JKL MNO 'he said "car DEF ABC"'?"[(0,0), (0,40)] 506 Extending backward: "GHI JKL MNO 'he said "car DEF ABC"'?"[(0,40) , (0,0)]506 Extending backward: "GHI JKL MNO 'he said "car DEF ABC"'?"[(0,40)] 507 507 Test 19, RTL: 508 508 Extending forward: "GHI JKL MNO 'he said "car DEF ABC"'?"[(0,0), (0,40)] 509 Extending backward: "GHI JKL MNO 'he said "car DEF ABC"'?"[(0,40) , (0,0)]509 Extending backward: "GHI JKL MNO 'he said "car DEF ABC"'?"[(0,40)] 510 510 Test 20, LTR: 511 511 Extending forward: "ABC abc DEF"[(0,0), (0,11)] 512 Extending backward: "ABC abc DEF"[(0,11) , (0,0)]512 Extending backward: "ABC abc DEF"[(0,11)] 513 513 Test 20, RTL: 514 514 Extending forward: "ABC abc DEF"[(0,0), (0,11)] 515 Extending backward: "ABC abc DEF"[(0,11) , (0,0)]515 Extending backward: "ABC abc DEF"[(0,11)] 516 516 Test 21, LTR: 517 517 Extending forward: "abcdefg abcdefg abcdefg a abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg "[(0,0), (0,8)] 518 Extending backward: "abcdefg abcdefg abcdefg a abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg "[(0,8) , (0,0)]518 Extending backward: "abcdefg abcdefg abcdefg a abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg "[(0,8)] 519 519 Test 21, RTL: 520 520 Extending forward: "abcdefg abcdefg abcdefg a abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg "[(0,0), (0,7)] 521 Extending backward: "abcdefg abcdefg abcdefg a abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg "[(0,7) , (0,0)]521 Extending backward: "abcdefg abcdefg abcdefg a abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg "[(0,7)] 522 522 Test 22, LTR: 523 523 Extending forward: "abcdefg abcdefg abcdefg a abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg "[(0,0), (0,8)] 524 Extending backward: "abcdefg abcdefg abcdefg a abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg "[(0,8) , (0,0)]524 Extending backward: "abcdefg abcdefg abcdefg a abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg "[(0,8)] 525 525 Test 22, RTL: 526 526 Extending forward: "abcdefg abcdefg abcdefg a abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg "[(0,0), (0,7)] 527 Extending backward: "abcdefg abcdefg abcdefg a abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg "[(0,7) , (0,0)]528 527 Extending backward: "abcdefg abcdefg abcdefg a abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg "[(0,7)] 528 -
trunk/LayoutTests/editing/selection/move-begin-end.html
r54980 r56639 1 <html>2 <head>3 1 <script> 4 if (window.layoutTestController) 2 if (window.layoutTestController) { 5 3 layoutTestController.dumpEditingCallbacks(); 4 layoutTestController.dumpAsText(); 5 } 6 7 var sel = window.getSelection(); 8 9 function logResult(str) { 10 if (str != 'SUCCESS') 11 str += ' baseOffset: ' + sel.baseOffset + ' extentOffset: ' + sel.extentOffset; 12 document.getElementById('result').innerHTML = str; 13 } 14 15 function runTest() { 16 if (!window.layoutTestController) { 17 log('This test must be run by DumpRenderTree!') 18 return; 19 } 20 21 var onMacPlatform = navigator.userAgent.search(/\bMac OS X\b/) != -1; 22 23 var area = document.getElementById('area'); 24 area.focus(); 25 26 // Position the caret at the beginning of the string. 27 eventSender.keyDown("leftArrow"); 28 29 // Now move to the end 30 if (onMacPlatform) 31 eventSender.keyDown("rightArrow", ["metaKey"]); 32 else 33 eventSender.keyDown("end"); 34 35 if (sel.baseOffset != 9 || sel.extentOffset != 9) { 36 logResult("Selection should be at the end."); 37 return; 38 } 39 40 // Now move back to the beginning 41 if (onMacPlatform) 42 eventSender.keyDown("leftArrow", ["metaKey"]); 43 else 44 eventSender.keyDown("home"); 45 46 if (sel.baseOffset != 0 || sel.extentOffset != 0) { 47 logResult("Selection should be at the beginning."); 48 return; 49 } 50 51 // Now move to the end, selecting 52 if (onMacPlatform) 53 eventSender.keyDown("rightArrow", ["metaKey", "shiftKey"]); 54 else 55 eventSender.keyDown("end",["shiftKey"]); 56 57 if (sel.baseOffset != 0 || sel.extentOffset != 9) { 58 logResult("Selection should contain the whole line and have forward directionality."); 59 return; 60 } 61 62 // Deselect but position the caret at the end 63 eventSender.keyDown("rightArrow"); 64 65 if (sel.baseOffset != 9 || sel.extentOffset != 9) { 66 logResult("Selection should be at the end."); 67 return; 68 } 69 70 // Now move to the beginning, selecting 71 if (onMacPlatform) 72 eventSender.keyDown("leftArrow", ["metaKey", "shiftKey"]); 73 else 74 eventSender.keyDown("home",["shiftKey"]); 75 76 if (sel.baseOffset != 9 || sel.extentOffset != 0) { 77 logResult("Selection should contain the whole line and have backward directionality."); 78 return; 79 } 80 81 logResult('SUCCESS'); 82 } 6 83 </script> 7 8 <script> 9 function runTest() { 10 if (window.layoutTestController) 11 layoutTestController.dumpAsText(); 12 else { 13 log('This test must be run by DumpRenderTree!') 14 return; 15 } 16 17 var onMacPlatform = false; 18 if (navigator.userAgent.search(/\bMac OS X\b/) != -1) 19 onMacPlatform = true; 20 21 var area = document.getElementById('area'); 22 area.focus(); 23 24 var sel = window.getSelection(); 25 // Position the caret at the beginning of the string. 26 eventSender.keyDown("leftArrow"); 27 28 // Now move to the end 29 if (onMacPlatform) 30 eventSender.keyDown("rightArrow", ["metaKey"]); 31 else 32 eventSender.keyDown("end"); 33 34 if (sel.baseOffset != 9 || sel.extentOffset != 9) 35 return; 36 37 // Now move back to the beginning 38 if (onMacPlatform) 39 eventSender.keyDown("leftArrow", ["metaKey"]); 40 else 41 eventSender.keyDown("home"); 42 43 if (sel.baseOffset != 0 || sel.extentOffset != 0) 44 return; 45 46 // Now move to the end, selecting 47 if (onMacPlatform) 48 eventSender.keyDown("rightArrow", ["metaKey", "shiftKey"]); 49 else 50 eventSender.keyDown("end",["shiftKey"]); 51 52 if (sel.baseOffset != 0 || sel.extentOffset != 9) 53 return; 54 55 // Deselect but position the caret at the end 56 eventSender.keyDown("rightArrow"); 57 58 if (sel.baseOffset != 9 || sel.extentOffset != 9) 59 return; 60 61 // Now move to the beginning, selecting 62 if (onMacPlatform) 63 eventSender.keyDown("leftArrow", ["metaKey", "shiftKey"]); 64 else 65 eventSender.keyDown("home",["shiftKey"]); 66 67 if (sel.baseOffset != 9 || sel.extentOffset != 0) 68 return; 69 70 document.getElementById('result').innerHTML = 'SUCCESS' 71 } 72 </script> 73 </head> 74 <body onload="runTest();"> 75 <div contenteditable id="area">Some text</div> 76 <div>This tests that moving the caret and selecting using Command+Left/Right arrows work correctly. If this text is successful, the text "SUCCESS" will be shown below.</div> 77 <div id="result">FAILURE</div> 78 </body> 79 </html> 84 <body onload="runTest();"> 85 <div contenteditable id="area">Some text</div> 86 <div>This tests that moving the caret and selecting using Command+Left/Right arrows work correctly. If this text is successful, the text "SUCCESS" will be shown below.</div> 87 <div id="result">FAILURE</div> 88 </body> -
trunk/LayoutTests/platform/mac/editing/selection/extend-after-mouse-selection-expected.txt
r54980 r56639 5 5 PASS Selection is [anchorNode: [object Text](ef) anchorOffset: 2 focusNode: [object Text](a ) focusOffset: 1 isCollapsed: false] 6 6 PASS Selection is [anchorNode: [object Text](ef) anchorOffset: 2 focusNode: [object Text](bc) focusOffset: 0 isCollapsed: false] 7 FAIL Selection is [anchorNode: [object Text]( ) anchorOffset: 0 focusNode: [object Text]( ) focusOffset: 1 isCollapsed: false] should be at anchorNode: [object Text] anchorOffset: 1 focusNode: [object Text] focusOffset: 0 8 FAIL Selection is [anchorNode: [object Text](ef) anchorOffset: 2 focusNode: [object Text](d ) focusOffset: 0 isCollapsed: false] should be at anchorNode: [object Text] anchorOffset: 1 focusNode: [object Text] focusOffset: 0 7 PASS Selection is [anchorNode: [object Text]( ) anchorOffset: 1 focusNode: [object Text](bc) focusOffset: 0 isCollapsed: false] 8 PASS Selection is [anchorNode: [object Text]( ) anchorOffset: 1 focusNode: [object Text](a ) focusOffset: 0 isCollapsed: false] 9 9 PASS successfullyParsed is true 10 10 -
trunk/WebCore/ChangeLog
r56631 r56639 1 2010-03-25 Ojan Vafai <ojan@chromium.org> 2 3 Reviewed by Darin Adler. 4 5 shift+home/end and cmd+shift+left/right don't extend the selection correctly 6 https://bugs.webkit.org/show_bug.cgi?id=36539 7 8 * WebCore.base.exp: 9 * editing/SelectionController.cpp: 10 (WebCore::SelectionController::modify): 11 * editing/SelectionController.h: 12 1 13 2010-03-26 Janne Koskinen <janne.p.koskinen@digia.com> 2 14 -
trunk/WebCore/editing/SelectionController.cpp
r56598 r56639 613 613 bool SelectionController::modify(EAlteration alter, EDirection dir, TextGranularity granularity, bool userTriggered) 614 614 { 615 Settings* settings = m_frame ? m_frame->settings() : 0; 616 return modify(alter, dir, granularity, userTriggered, settings); 617 } 618 619 static bool isBoundary(TextGranularity granularity) 620 { 621 return granularity == LineBoundary || granularity == ParagraphBoundary || granularity == DocumentBoundary; 622 } 623 624 bool SelectionController::modify(EAlteration alter, EDirection direction, TextGranularity granularity, bool userTriggered, Settings* settings) 625 { 615 626 if (userTriggered) { 616 627 SelectionController trialSelectionController; 617 628 trialSelectionController.setSelection(m_selection); 618 629 trialSelectionController.setIsDirectional(m_isDirectional); 619 trialSelectionController.modify(alter, dir , granularity, false);630 trialSelectionController.modify(alter, direction, granularity, false, settings); 620 631 621 632 bool change = m_frame->shouldChangeSelection(trialSelectionController.selection()); … … 624 635 } 625 636 626 willBeModified(alter, dir );627 628 VisiblePosition pos ;629 switch (dir ) {637 willBeModified(alter, direction); 638 639 VisiblePosition position; 640 switch (direction) { 630 641 case RIGHT: 631 642 if (alter == MOVE) 632 pos = modifyMovingRight(granularity);643 position = modifyMovingRight(granularity); 633 644 else 634 pos = modifyExtendingRight(granularity);645 position = modifyExtendingRight(granularity); 635 646 break; 636 647 case FORWARD: 637 648 if (alter == EXTEND) 638 pos = modifyExtendingForward(granularity);649 position = modifyExtendingForward(granularity); 639 650 else 640 pos = modifyMovingForward(granularity);651 position = modifyMovingForward(granularity); 641 652 break; 642 653 case LEFT: 643 654 if (alter == MOVE) 644 pos = modifyMovingLeft(granularity);655 position = modifyMovingLeft(granularity); 645 656 else 646 pos = modifyExtendingLeft(granularity);657 position = modifyExtendingLeft(granularity); 647 658 break; 648 659 case BACKWARD: 649 660 if (alter == EXTEND) 650 pos = modifyExtendingBackward(granularity);661 position = modifyExtendingBackward(granularity); 651 662 else 652 pos = modifyMovingBackward(granularity);653 break; 654 } 655 656 if (pos .isNull())663 position = modifyMovingBackward(granularity); 664 break; 665 } 666 667 if (position.isNull()) 657 668 return false; 658 669 … … 665 676 switch (alter) { 666 677 case MOVE: 667 moveTo(pos , userTriggered);678 moveTo(position, userTriggered); 668 679 break; 669 680 case EXTEND: 670 setExtent(pos, userTriggered); 671 break; 681 if (!settings || settings->editingBehavior() != EditingMacBehavior || m_selection.isCaret() || !isBoundary(granularity)) 682 setExtent(position, userTriggered); 683 else { 684 // Standard Mac behavior when extending to a boundary is grow the selection rather 685 // than leaving the base in place and moving the extent. Matches NSTextView. 686 if (direction == FORWARD || direction == RIGHT) 687 setEnd(position, userTriggered); 688 else 689 setStart(position, userTriggered); 690 } 672 691 } 673 692 … … 823 842 m_granularity = CharacterGranularity; 824 843 setSelection(VisibleSelection()); 844 } 845 846 void SelectionController::setStart(const VisiblePosition &pos, bool userTriggered) 847 { 848 if (m_selection.isBaseFirst()) 849 setBase(pos, userTriggered); 850 else 851 setExtent(pos, userTriggered); 852 } 853 854 void SelectionController::setEnd(const VisiblePosition &pos, bool userTriggered) 855 { 856 if (m_selection.isBaseFirst()) 857 setExtent(pos, userTriggered); 858 else 859 setBase(pos, userTriggered); 825 860 } 826 861 -
trunk/WebCore/editing/SelectionController.h
r56567 r56639 39 39 class RenderObject; 40 40 class RenderView; 41 class Settings; 41 42 class VisiblePosition; 42 43 … … 79 80 TextGranularity granularity() const { return m_granularity; } 80 81 82 void setStart(const VisiblePosition &, bool userTriggered = false); 83 void setEnd(const VisiblePosition &, bool userTriggered = false); 84 81 85 void setBase(const VisiblePosition&, bool userTriggered = false); 82 86 void setBase(const Position&, EAffinity, bool userTriggered = false); … … 148 152 VisiblePosition startForPlatform() const; 149 153 VisiblePosition endForPlatform() const; 154 155 bool modify(EAlteration, EDirection, TextGranularity, bool userTriggered, Settings*); 150 156 151 157 VisiblePosition modifyExtendingRight(TextGranularity);
Note: See TracChangeset
for help on using the changeset viewer.