OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/views/controls/textfield/textfield.h" | 5 #include "ui/views/controls/textfield/textfield.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
(...skipping 1449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1460 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION: | 1460 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION: |
1461 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_PARAGRAPH: | 1461 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_PARAGRAPH: |
1462 case ui::TextEditCommand:: | 1462 case ui::TextEditCommand:: |
1463 MOVE_TO_BEGINNING_OF_PARAGRAPH_AND_MODIFY_SELECTION: | 1463 MOVE_TO_BEGINNING_OF_PARAGRAPH_AND_MODIFY_SELECTION: |
1464 case ui::TextEditCommand::MOVE_TO_END_OF_DOCUMENT: | 1464 case ui::TextEditCommand::MOVE_TO_END_OF_DOCUMENT: |
1465 case ui::TextEditCommand::MOVE_TO_END_OF_DOCUMENT_AND_MODIFY_SELECTION: | 1465 case ui::TextEditCommand::MOVE_TO_END_OF_DOCUMENT_AND_MODIFY_SELECTION: |
1466 case ui::TextEditCommand::MOVE_TO_END_OF_LINE: | 1466 case ui::TextEditCommand::MOVE_TO_END_OF_LINE: |
1467 case ui::TextEditCommand::MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION: | 1467 case ui::TextEditCommand::MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION: |
1468 case ui::TextEditCommand::MOVE_TO_END_OF_PARAGRAPH: | 1468 case ui::TextEditCommand::MOVE_TO_END_OF_PARAGRAPH: |
1469 case ui::TextEditCommand::MOVE_TO_END_OF_PARAGRAPH_AND_MODIFY_SELECTION: | 1469 case ui::TextEditCommand::MOVE_TO_END_OF_PARAGRAPH_AND_MODIFY_SELECTION: |
1470 case ui::TextEditCommand::MOVE_PARAGRAPH_FORWARD_AND_MODIFY_SELECTION: | |
1471 case ui::TextEditCommand::MOVE_PARAGRAPH_BACKWARD_AND_MODIFY_SELECTION: | |
1470 case ui::TextEditCommand::MOVE_WORD_BACKWARD: | 1472 case ui::TextEditCommand::MOVE_WORD_BACKWARD: |
1471 case ui::TextEditCommand::MOVE_WORD_BACKWARD_AND_MODIFY_SELECTION: | 1473 case ui::TextEditCommand::MOVE_WORD_BACKWARD_AND_MODIFY_SELECTION: |
1472 case ui::TextEditCommand::MOVE_WORD_FORWARD: | 1474 case ui::TextEditCommand::MOVE_WORD_FORWARD: |
1473 case ui::TextEditCommand::MOVE_WORD_FORWARD_AND_MODIFY_SELECTION: | 1475 case ui::TextEditCommand::MOVE_WORD_FORWARD_AND_MODIFY_SELECTION: |
1474 case ui::TextEditCommand::MOVE_WORD_LEFT: | 1476 case ui::TextEditCommand::MOVE_WORD_LEFT: |
1475 case ui::TextEditCommand::MOVE_WORD_LEFT_AND_MODIFY_SELECTION: | 1477 case ui::TextEditCommand::MOVE_WORD_LEFT_AND_MODIFY_SELECTION: |
1476 case ui::TextEditCommand::MOVE_WORD_RIGHT: | 1478 case ui::TextEditCommand::MOVE_WORD_RIGHT: |
1477 case ui::TextEditCommand::MOVE_WORD_RIGHT_AND_MODIFY_SELECTION: | 1479 case ui::TextEditCommand::MOVE_WORD_RIGHT_AND_MODIFY_SELECTION: |
1478 return true; | 1480 return true; |
1479 case ui::TextEditCommand::UNDO: | 1481 case ui::TextEditCommand::UNDO: |
(...skipping 16 matching lines...) Expand all Loading... | |
1496 case ui::TextEditCommand::YANK: | 1498 case ui::TextEditCommand::YANK: |
1497 return editable; | 1499 return editable; |
1498 case ui::TextEditCommand::MOVE_DOWN: | 1500 case ui::TextEditCommand::MOVE_DOWN: |
1499 case ui::TextEditCommand::MOVE_DOWN_AND_MODIFY_SELECTION: | 1501 case ui::TextEditCommand::MOVE_DOWN_AND_MODIFY_SELECTION: |
1500 case ui::TextEditCommand::MOVE_PAGE_DOWN: | 1502 case ui::TextEditCommand::MOVE_PAGE_DOWN: |
1501 case ui::TextEditCommand::MOVE_PAGE_DOWN_AND_MODIFY_SELECTION: | 1503 case ui::TextEditCommand::MOVE_PAGE_DOWN_AND_MODIFY_SELECTION: |
1502 case ui::TextEditCommand::MOVE_PAGE_UP: | 1504 case ui::TextEditCommand::MOVE_PAGE_UP: |
1503 case ui::TextEditCommand::MOVE_PAGE_UP_AND_MODIFY_SELECTION: | 1505 case ui::TextEditCommand::MOVE_PAGE_UP_AND_MODIFY_SELECTION: |
1504 case ui::TextEditCommand::MOVE_UP: | 1506 case ui::TextEditCommand::MOVE_UP: |
1505 case ui::TextEditCommand::MOVE_UP_AND_MODIFY_SELECTION: | 1507 case ui::TextEditCommand::MOVE_UP_AND_MODIFY_SELECTION: |
1508 // On Mac, the textfield should respond to Up/Down arrows keys and | |
1509 // PageUp/PageDown. | |
1510 #if defined(OS_MACOSX) | |
1511 return true; | |
1512 #else | |
1513 return false; | |
1514 #endif | |
1506 case ui::TextEditCommand::INSERT_TEXT: | 1515 case ui::TextEditCommand::INSERT_TEXT: |
1507 case ui::TextEditCommand::SET_MARK: | 1516 case ui::TextEditCommand::SET_MARK: |
1508 case ui::TextEditCommand::UNSELECT: | 1517 case ui::TextEditCommand::UNSELECT: |
1509 case ui::TextEditCommand::INVALID_COMMAND: | 1518 case ui::TextEditCommand::INVALID_COMMAND: |
1510 return false; | 1519 return false; |
1511 } | 1520 } |
1512 NOTREACHED(); | 1521 NOTREACHED(); |
1513 return false; | 1522 return false; |
1514 } | 1523 } |
1515 | 1524 |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1623 break; | 1632 break; |
1624 case ui::TextEditCommand::MOVE_RIGHT: | 1633 case ui::TextEditCommand::MOVE_RIGHT: |
1625 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, false); | 1634 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, false); |
1626 break; | 1635 break; |
1627 case ui::TextEditCommand::MOVE_RIGHT_AND_MODIFY_SELECTION: | 1636 case ui::TextEditCommand::MOVE_RIGHT_AND_MODIFY_SELECTION: |
1628 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, true); | 1637 model_->MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, true); |
1629 break; | 1638 break; |
1630 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_DOCUMENT: | 1639 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_DOCUMENT: |
1631 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_LINE: | 1640 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_LINE: |
1632 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_PARAGRAPH: | 1641 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_PARAGRAPH: |
1642 case ui::TextEditCommand::MOVE_UP: | |
1643 case ui::TextEditCommand::MOVE_PAGE_UP: | |
1633 model_->MoveCursor(gfx::LINE_BREAK, begin, false); | 1644 model_->MoveCursor(gfx::LINE_BREAK, begin, false); |
1634 break; | 1645 break; |
1635 case ui::TextEditCommand:: | 1646 case ui::TextEditCommand:: |
1636 MOVE_TO_BEGINNING_OF_DOCUMENT_AND_MODIFY_SELECTION: | 1647 MOVE_TO_BEGINNING_OF_DOCUMENT_AND_MODIFY_SELECTION: |
1637 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION: | 1648 case ui::TextEditCommand::MOVE_TO_BEGINNING_OF_LINE_AND_MODIFY_SELECTION: |
1638 case ui::TextEditCommand:: | 1649 case ui::TextEditCommand:: |
1639 MOVE_TO_BEGINNING_OF_PARAGRAPH_AND_MODIFY_SELECTION: | 1650 MOVE_TO_BEGINNING_OF_PARAGRAPH_AND_MODIFY_SELECTION: |
1640 model_->MoveCursor(gfx::LINE_BREAK, begin, true); | 1651 model_->MoveCursor(gfx::LINE_BREAK, begin, true, |
1652 PlatformStyle::kLineSelectionBehavior); | |
msw
2016/08/11 23:46:37
I'd like to avoid the behavior enum if possible. C
karandeepb
2016/08/12 01:26:31
For CHARACTER_BREAK, the enum is not really releva
| |
1653 break; | |
1654 case ui::TextEditCommand::MOVE_PAGE_UP_AND_MODIFY_SELECTION: | |
1655 case ui::TextEditCommand::MOVE_UP_AND_MODIFY_SELECTION: | |
1656 model_->MoveCursor(gfx::LINE_BREAK, begin, true, | |
1657 gfx::SelectionReversedBehavior::SELECTION_START_NEW); | |
tapted
2016/08/11 03:44:08
nit: `::SelectionReversedBehavior` not needed, mor
msw
2016/08/11 23:46:38
Shouldn't these also extend the selection on mac?
karandeepb
2016/08/12 01:26:31
Nope, try yourself with Shift+Up/Down. And the Bli
karandeepb
2016/08/16 10:24:52
Done.
| |
1641 break; | 1658 break; |
1642 case ui::TextEditCommand::MOVE_TO_END_OF_DOCUMENT: | 1659 case ui::TextEditCommand::MOVE_TO_END_OF_DOCUMENT: |
1643 case ui::TextEditCommand::MOVE_TO_END_OF_LINE: | 1660 case ui::TextEditCommand::MOVE_TO_END_OF_LINE: |
1644 case ui::TextEditCommand::MOVE_TO_END_OF_PARAGRAPH: | 1661 case ui::TextEditCommand::MOVE_TO_END_OF_PARAGRAPH: |
1662 case ui::TextEditCommand::MOVE_DOWN: | |
1663 case ui::TextEditCommand::MOVE_PAGE_DOWN: | |
1645 model_->MoveCursor(gfx::LINE_BREAK, end, false); | 1664 model_->MoveCursor(gfx::LINE_BREAK, end, false); |
1646 break; | 1665 break; |
1647 case ui::TextEditCommand::MOVE_TO_END_OF_DOCUMENT_AND_MODIFY_SELECTION: | 1666 case ui::TextEditCommand::MOVE_TO_END_OF_DOCUMENT_AND_MODIFY_SELECTION: |
1648 case ui::TextEditCommand::MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION: | 1667 case ui::TextEditCommand::MOVE_TO_END_OF_LINE_AND_MODIFY_SELECTION: |
1649 case ui::TextEditCommand::MOVE_TO_END_OF_PARAGRAPH_AND_MODIFY_SELECTION: | 1668 case ui::TextEditCommand::MOVE_TO_END_OF_PARAGRAPH_AND_MODIFY_SELECTION: |
1650 model_->MoveCursor(gfx::LINE_BREAK, end, true); | 1669 model_->MoveCursor(gfx::LINE_BREAK, end, true, |
1670 PlatformStyle::kLineSelectionBehavior); | |
msw
2016/08/11 23:46:38
Can you define the platform-specific constants her
karandeepb
2016/08/12 01:26:31
Will do!
| |
1671 break; | |
1672 case ui::TextEditCommand::MOVE_PAGE_DOWN_AND_MODIFY_SELECTION: | |
1673 case ui::TextEditCommand::MOVE_DOWN_AND_MODIFY_SELECTION: | |
1674 model_->MoveCursor(gfx::LINE_BREAK, end, true, | |
1675 gfx::SelectionReversedBehavior::SELECTION_START_NEW); | |
msw
2016/08/11 23:46:38
Shouldn't these also extend the selection on mac?
karandeepb
2016/08/12 01:26:31
Nope, try yourself with Shift+Up/Down.
msw
2016/08/12 21:58:30
Wow, Mac's behavior is so odd; we definitely need
karandeepb
2016/08/16 10:24:52
Done.
| |
1676 break; | |
1677 case ui::TextEditCommand::MOVE_PARAGRAPH_BACKWARD_AND_MODIFY_SELECTION: | |
1678 model_->MoveCursor(gfx::LINE_BREAK, begin, true, gfx::SELECTION_CARET); | |
msw
2016/08/11 23:46:38
ditto: Why don't these (para fwd/back) extend the
karandeepb
2016/08/12 01:26:31
This is how Cocoa does it. Try with Alt+Shift+Up/D
| |
1679 break; | |
1680 case ui::TextEditCommand::MOVE_PARAGRAPH_FORWARD_AND_MODIFY_SELECTION: | |
1681 model_->MoveCursor(gfx::LINE_BREAK, end, true, gfx::SELECTION_CARET); | |
1651 break; | 1682 break; |
1652 case ui::TextEditCommand::MOVE_WORD_BACKWARD: | 1683 case ui::TextEditCommand::MOVE_WORD_BACKWARD: |
1653 model_->MoveCursor(gfx::WORD_BREAK, begin, false); | 1684 model_->MoveCursor(gfx::WORD_BREAK, begin, false); |
1654 break; | 1685 break; |
1655 case ui::TextEditCommand::MOVE_WORD_BACKWARD_AND_MODIFY_SELECTION: | 1686 case ui::TextEditCommand::MOVE_WORD_BACKWARD_AND_MODIFY_SELECTION: |
1656 model_->MoveCursor(gfx::WORD_BREAK, begin, true); | 1687 model_->MoveCursor(gfx::WORD_BREAK, begin, true, |
1688 PlatformStyle::kWordSelectionBehavior); | |
1657 break; | 1689 break; |
1658 case ui::TextEditCommand::MOVE_WORD_FORWARD: | 1690 case ui::TextEditCommand::MOVE_WORD_FORWARD: |
1659 model_->MoveCursor(gfx::WORD_BREAK, end, false); | 1691 model_->MoveCursor(gfx::WORD_BREAK, end, false); |
1660 break; | 1692 break; |
1661 case ui::TextEditCommand::MOVE_WORD_FORWARD_AND_MODIFY_SELECTION: | 1693 case ui::TextEditCommand::MOVE_WORD_FORWARD_AND_MODIFY_SELECTION: |
1662 model_->MoveCursor(gfx::WORD_BREAK, end, true); | 1694 model_->MoveCursor(gfx::WORD_BREAK, end, true, |
1695 PlatformStyle::kWordSelectionBehavior); | |
1663 break; | 1696 break; |
1664 case ui::TextEditCommand::MOVE_WORD_LEFT: | 1697 case ui::TextEditCommand::MOVE_WORD_LEFT: |
1665 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_LEFT, false); | 1698 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_LEFT, false); |
1666 break; | 1699 break; |
1667 case ui::TextEditCommand::MOVE_WORD_LEFT_AND_MODIFY_SELECTION: | 1700 case ui::TextEditCommand::MOVE_WORD_LEFT_AND_MODIFY_SELECTION: |
1668 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_LEFT, true); | 1701 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_LEFT, true, |
1702 PlatformStyle::kWordSelectionBehavior); | |
1669 break; | 1703 break; |
1670 case ui::TextEditCommand::MOVE_WORD_RIGHT: | 1704 case ui::TextEditCommand::MOVE_WORD_RIGHT: |
1671 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_RIGHT, false); | 1705 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_RIGHT, false); |
1672 break; | 1706 break; |
1673 case ui::TextEditCommand::MOVE_WORD_RIGHT_AND_MODIFY_SELECTION: | 1707 case ui::TextEditCommand::MOVE_WORD_RIGHT_AND_MODIFY_SELECTION: |
1674 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_RIGHT, true); | 1708 model_->MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_RIGHT, true, |
1709 PlatformStyle::kWordSelectionBehavior); | |
1675 break; | 1710 break; |
1676 case ui::TextEditCommand::UNDO: | 1711 case ui::TextEditCommand::UNDO: |
1677 text_changed = cursor_changed = model_->Undo(); | 1712 text_changed = cursor_changed = model_->Undo(); |
1678 break; | 1713 break; |
1679 case ui::TextEditCommand::REDO: | 1714 case ui::TextEditCommand::REDO: |
1680 text_changed = cursor_changed = model_->Redo(); | 1715 text_changed = cursor_changed = model_->Redo(); |
1681 break; | 1716 break; |
1682 case ui::TextEditCommand::CUT: | 1717 case ui::TextEditCommand::CUT: |
1683 text_changed = cursor_changed = Cut(); | 1718 text_changed = cursor_changed = Cut(); |
1684 break; | 1719 break; |
1685 case ui::TextEditCommand::COPY: | 1720 case ui::TextEditCommand::COPY: |
1686 Copy(); | 1721 Copy(); |
1687 break; | 1722 break; |
1688 case ui::TextEditCommand::PASTE: | 1723 case ui::TextEditCommand::PASTE: |
1689 text_changed = cursor_changed = Paste(); | 1724 text_changed = cursor_changed = Paste(); |
1690 break; | 1725 break; |
1691 case ui::TextEditCommand::SELECT_ALL: | 1726 case ui::TextEditCommand::SELECT_ALL: |
1692 SelectAll(false); | 1727 SelectAll(false); |
1693 break; | 1728 break; |
1694 case ui::TextEditCommand::TRANSPOSE: | 1729 case ui::TextEditCommand::TRANSPOSE: |
1695 text_changed = cursor_changed = model_->Transpose(); | 1730 text_changed = cursor_changed = model_->Transpose(); |
1696 break; | 1731 break; |
1697 case ui::TextEditCommand::YANK: | 1732 case ui::TextEditCommand::YANK: |
1698 text_changed = cursor_changed = model_->Yank(); | 1733 text_changed = cursor_changed = model_->Yank(); |
1699 break; | 1734 break; |
1700 case ui::TextEditCommand::MOVE_DOWN: | |
1701 case ui::TextEditCommand::MOVE_DOWN_AND_MODIFY_SELECTION: | |
1702 case ui::TextEditCommand::MOVE_PAGE_DOWN: | |
1703 case ui::TextEditCommand::MOVE_PAGE_DOWN_AND_MODIFY_SELECTION: | |
1704 case ui::TextEditCommand::MOVE_PAGE_UP: | |
1705 case ui::TextEditCommand::MOVE_PAGE_UP_AND_MODIFY_SELECTION: | |
1706 case ui::TextEditCommand::MOVE_UP: | |
1707 case ui::TextEditCommand::MOVE_UP_AND_MODIFY_SELECTION: | |
1708 case ui::TextEditCommand::INSERT_TEXT: | 1735 case ui::TextEditCommand::INSERT_TEXT: |
1709 case ui::TextEditCommand::SET_MARK: | 1736 case ui::TextEditCommand::SET_MARK: |
1710 case ui::TextEditCommand::UNSELECT: | 1737 case ui::TextEditCommand::UNSELECT: |
1711 case ui::TextEditCommand::INVALID_COMMAND: | 1738 case ui::TextEditCommand::INVALID_COMMAND: |
1712 NOTREACHED(); | 1739 NOTREACHED(); |
1713 break; | 1740 break; |
1714 } | 1741 } |
1715 | 1742 |
1716 cursor_changed |= GetSelectionModel() != selection_model; | 1743 cursor_changed |= GetSelectionModel() != selection_model; |
1717 if (cursor_changed) | 1744 if (cursor_changed) |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1976 RequestFocus(); | 2003 RequestFocus(); |
1977 model_->MoveCursorTo(mouse); | 2004 model_->MoveCursorTo(mouse); |
1978 if (!selection_clipboard_text.empty()) { | 2005 if (!selection_clipboard_text.empty()) { |
1979 model_->InsertText(selection_clipboard_text); | 2006 model_->InsertText(selection_clipboard_text); |
1980 UpdateAfterChange(true, true); | 2007 UpdateAfterChange(true, true); |
1981 } | 2008 } |
1982 OnAfterUserAction(); | 2009 OnAfterUserAction(); |
1983 } | 2010 } |
1984 | 2011 |
1985 } // namespace views | 2012 } // namespace views |
OLD | NEW |