Commit Graph

49 Commits

Author SHA1 Message Date
Aryeh Gregor
2218f138da Bug 1355792 - Consider invisible nodes to be editable; r=masayuki
We can't depend on information from layout to be correct unless we've
flushed pending notifications, which we can't do at every editability
check.  So let's forget about layout.  Nobody knows why editability ever
depended on visibility in the first place.

This allows us to revert the additions from bug 795418 as well.

The original test-case submitted on the bug report was very big and
complicated, so I have a minimal test-case instead.  This might not
exactly correspond to the originally reported bug, but this fix works for
both the original and minimal test case.

MozReview-Commit-ID: LOKjlgiAEOT
2017-04-19 16:53:24 +03:00
Makoto Kato
1ad2ab26e7 Bug 1330912 - Part 3. Don't update dictionary during onfocus when spellcheck is unnecessary. r=masayuki
Such as <input type=password>, focused element doesn't use spellchecker, we should not call UpdateCurrentDictionary.  Also, when the attribute is changed, we should call UpdateCurrentDictionary if uninitialized.

MozReview-Commit-ID: LSfDTAszviE
2017-04-11 16:51:04 +09:00
Brian Birtles
4de61d72aa Bug 1315874 - Drop 'ForElement' from GetStyleContextForElementXXX methods; r=heycam
In the next patch we want to add a method called
GetUnanimatedStyleContextForElementNoFlush but that's much too long. Instead it
seems better to just drop 'ForElement' from all these methods since it should be
fairly obvious we are getting the style context for an element given that the
first argument is an element.

MozReview-Commit-ID: JQKaEuCKV2F
2017-04-05 14:39:23 +09:00
Aryeh Gregor
17b06d4b22 Bug 1175418 - Don't create unnecessary text nodes in editor; r=masayuki
MozReview-Commit-ID: LnioO8XoGQT
2017-03-29 18:28:21 +03:00
Olli Pettay
a23e01a1bd Bug 1350683 - Ensure the transaction processing. r=masayuki 2017-03-29 13:23:31 -04:00
Masayuki Nakano
b1e0f93335 Bug 1349138 Edit transactions should store their editor instance with strong reference r=smaug
Edit transactions should store their editor instance with strong reference and they should be released at destroying the editor.

MozReview-Commit-ID: D67KU8WFxyo
2017-03-21 19:00:36 +09:00
Masayuki Nakano
97096baf47 Bug 1349178 Make nsIEditor.transactionManager readonly r=m_kato
There are no app which replaces transaction manager of editor.  Additionally, replacing transaction manager of an editor with different editor or same editor but after initialized again due to some reasons may cause unexpected problems.

Therefore, this patch makes it readonly.

MozReview-Commit-ID: K7zepOjrzvC
2017-03-21 20:57:15 +09:00
Masayuki Nakano
5b2585407c Bug 1347092 part.3 Make EditorBase::CreateTxnForDeleteSelection() return already_AddRefed<EditAggregateTransaction> r=m_kato
MozReview-Commit-ID: DEeRPbH9JJK
2017-03-15 14:35:43 +09:00
Masayuki Nakano
bdb7139190 Bug 1347092 part.2 Make EditorBase::CreateTxnForDeleteInsertionPoint() return already_AddRefed<EditTransactionBase> r=m_kato
EditorBase::CreateTxnForDeleteInsertionPoint() appends DeleteTextTransaction or DeleteNodeTransaction to the given EditAggregateTransaction.  For consistency with other CreateTxnFor*() methods, this should just create a transaction and return it.  Then, the caller should append the transaction to EditAggregateTransaction.

MozReview-Commit-ID: 6sqEijicFHE
2017-03-14 22:01:36 +09:00
Masayuki Nakano
a90f6043e7 Bug 1347092 part.1 Make EditorBase::CreateTxnForDeleteNode() return already_AddRefed<DeleteNodeTransaction> r=m_kato
MozReview-Commit-ID: CyvzpoZmRoO
2017-03-14 20:50:24 +09:00
David Major
82dee330c1 Bug 1346078: Remove nsAString_internal and just use the nsAString name directly. r=bsmedberg
MozReview-Commit-ID: DWDEDMIVKm7
2017-03-10 15:17:23 +13:00
Masayuki Nakano
7461b5ee78 Bug 1345690 part.4 Rename JoinNodeTransaction::CheckValidity() to JoinNodeTransaction::CanDoIt() for consistency with other transaction classes r=m_kato
MozReview-Commit-ID: 3a5QXiofEL2
2017-03-10 13:46:27 +09:00
Masayuki Nakano
63e791a576 Bug 1345690 part.3 Rename DeleteTextTransaction::Init() to DeleteTextTransaction::CanDoIt() since it does not initialize anything and just checking if the text node is editable r=m_kato
MozReview-Commit-ID: EyqHjHF3Q8G
2017-03-10 13:38:28 +09:00
Masayuki Nakano
549254639d Bug 1345690 part.2 Make the constructor of DeleteRangeTransaction initialize all members instead of Init() r=m_kato
Similar to DeleteNodeTransaction, DeleteRangeTransaction should take all necessary information as its arguments.  However, different from DeleteNodeTransaction, this doesn't need to implement CanDoIt() since nobody checks the state.

MozReview-Commit-ID: 2Z9fNtGeJ9c
2017-03-09 11:19:39 +09:00
Masayuki Nakano
37b6dbbda4 Bug 1345690 part.1 Make the constructor of DeleteNodeTransaction initialize all necessary members instead of Init() r=m_kato
I'd like to make mNodeToDelete an owning-non-null member, but it's not cycle collector aware.  Therefore, this patch only changes mEditorBase from pointer to reference.

MozReview-Commit-ID: H3wxmN1t92s
2017-03-10 13:23:40 +09:00
Masayuki Nakano
e96dfb10d3 Bug 1337718 part.1 Make EditorBase::HandleKeyPressEvent() take WidgetKeyboardEvent* instead of nsIDOMKeyEvent* r=m_kato
MozReview-Commit-ID: 8QUiHPRf9AH
2017-02-08 20:18:17 +09:00
Carsten "Tomcat" Book
fc5f933936 merge mozilla-inbound to mozilla-central a=merge 2017-02-09 16:04:14 +01:00
Makoto Kato
119c53a769 Bug 1337698 - Part 1. PlaceholderTransaction should use UniquePtr. r=masayuki
MozReview-Commit-ID: 8xqAKRcKCLb
2017-02-09 14:26:10 +09:00
Masayuki Nakano
ede82193ce Bug 1336011 part.3 Create an alias of the type of mDocStateListeners r=smaug
MozReview-Commit-ID: L0TczDcH4t8
2017-02-07 22:52:23 +09:00
Masayuki Nakano
683a5bb41d Bug 1336011 part.2 Create an alias of the type of mEditorObservers r=smaug
MozReview-Commit-ID: 7LWl5F4C0Ge
2017-02-07 22:36:16 +09:00
Masayuki Nakano
2c67a3f36c Bug 1336011 part.1 EditorBase shouldn't refer mActionListeners directly in loops because it might be removed during a loop r=smaug
Items in mActionListeners may be removed during a call of a method of another item.  Therefore, all items should be copied to different array before each loop referring mActionListeners.

MozReview-Commit-ID: FA2xXdJ9SoR
2017-02-07 22:26:56 +09:00
Makoto Kato
99b503d3bb Bug 1336349 - Merge GetIsDocumentEditable implementation to EditorBase. r=masayuki
GetIsDocumentEditable is implemnted in EditorBase, TextEditor, and HTMLEditor.  This is virtual method, we won't use EditorBase::GetIsDocumentEditable.  Also, TextEditor::GetIsDocumentEditable and HTMLEditor::GetIsDocumentEditable are same implementation.  So we should merge this to EditorBase.

MozReview-Commit-ID: 62euqUaYAuY
2017-02-03 16:22:50 +09:00
Makoto Kato
8be4c60747 Bug 1335997 - Part 2. Don't use virtual method for NotifyDocumentListeners and ScrollSelectionIntoView. r=masayuki
Both methods don't override by TextEditor and HTMLEditor.  It is unnecessary to use as virtual method.

MozReview-Commit-ID: 6FNO78RauML
2017-02-02 13:56:57 +09:00
Masayuki Nakano
eec299de51 Bug 1314053 part.2 Change EditorBase::IsAcceptableInputEvent()'s argument from nsIDOMEvent* to WidgetGUIEvent* r=smaug
MozReview-Commit-ID: Jo6EwQubUAM
2017-01-17 17:17:06 +09:00
Makoto Kato
98d3c78e76 Bug 1328023 - Part 1. Don't use RangeUpdater except to composition transaction. r=masayuki
Part 3 fix of bug 1310912 is incorrect for not composition transaction.  PlaceholderTransation is for saving and restoring current selection for undo. So we shouldn't use range updater to normal transaction.

Composition transaction can modify multiple nodes and it merges text node for ime into single text node. So if current selection is into IME text node, it might be failed to restore selection by UndoTransaction. So we need update selection by range updater to work UndoTransaction.

Also, CompositionTransaction::UndoTransaction will set selection after committed text. So at finally, selection will set correct position that composition transaction wants.

MozReview-Commit-ID: 1NcH32YoKPQ
2017-01-30 17:25:43 +09:00
Makoto Kato
a04623be86 Bug 1334372 - Part 2. Don't use virtual method for CreateTxnForAddStyleSheet and CreateTxnForRemoveStyleSheet. r=masayuki
We don't have no overload method for both methods.  So we shouldn't use virtual.

And, other transaction methods return transaction object directly, we should change to it.

MozReview-Commit-ID: 7CXz4XeOobk
2017-01-27 13:29:00 +09:00
Makoto Kato
815612702b Bug 1334372 - Part 1. Use EditorBase directly in AddStyleSheetTransaction/RemoveStyleSheetTransaction. r=masayuki
Other transaction classes use EditorBase directly, but these transaction classes use nsIEditor.  To remove nsIDOMDocument XPCOM interface usage, I would like to use EditorBase directly.

MozReview-Commit-ID: 3alRd9Zj5aZ
2017-01-27 13:15:20 +09:00
Makoto Kato
b62259a7d8 Bug 1332984 - Clean up usage of nsIDOMCharacterData into editor. r=masayuki
Some uses nsIDOMCharacterData to get the attribute of text node.  But, by using Text object, we don't need nsIDOMCharacter.  So we should use Text object instead of nsIDOMCharacterData instead if possible.

MozReview-Commit-ID: 1cwTUcecFj3
2017-01-23 14:14:30 +09:00
Cameron McCormack
5f9911da79 Bug 1328832 - Part 2: Rename mozFlushType to mozilla::FlushType and make it an enum class. r=bzbarsky
MozReview-Commit-ID: D3fIngSHSsl
2017-01-05 15:31:56 +08:00
Cameron McCormack
a35ad172e6 Bug 1328832 - Part 1: Rename mozFlushType.h to FlushType.h. r=bzbarsky
MozReview-Commit-ID: 1ubwNkBEdfz
2017-01-05 14:54:02 +08:00
Makoto Kato
820f5efcdb Bug 1324996 - Part 2. Use nsIAtom to change attirbute if possible. r=masayuki
We can replace old nsIEditor API with nsIAtom version.

MozReview-Commit-ID: EMEANldtTo0
2016-12-20 20:53:00 +09:00
Makoto Kato
b8e6b24246 Bug 1324996 - Part 1. Implement nsIAtom version of SetAttribute/RemoveAttribute/CloneAttirubte. r=masayuki
Add nsIAtom version of the following.
 - CloneAttribute
 - RemoveAttribute
 - RemoveAttributeOrEquivalent
 - SetAttribute
 - SetAttributeOrEquivalent

MozReview-Commit-ID: 8CutpdyVuew

P1

MozReview-Commit-ID: 9MdmGcTqaxT
2016-12-20 19:24:08 +09:00
Makoto Kato
28f368d2ed Bug 1310912 - Part 5. InsertTextIntoTextNodeImpl should use IMETextNode for listener. r=masayuki
When using CompositionTransaction, text node will be inserted into IMETextNode, not aTextNode of parameter.  So we should use it for listener.

MozReview-Commit-ID: 72a3ZjF1wsz
2016-11-12 15:46:33 +09:00
Makoto Kato
fe4aab3f1e Bug 1310912 - Part 4. RangeUpdater should be called on DoTransaction. r=masayuki
Although PlaceholderTransaction will use the selection on Merge, it is too late to use UpdateRange.  Because RangeUpdater will be used after DoTransaction is finished.  So we should update selection on DoTransaction.

Also, part 1 fix doesn't update selection correctly via RangeUpdater when IME composition is multiple node.

MozReview-Commit-ID: 9so9tR8uQ6t
2016-11-12 14:56:33 +09:00
Makoto Kato
00970bd56b Bug 1310912 - Part 3. The selection into PlaceholderTransaction should be updated via RangeUpdater. r=masayuki
Since the selection into PlaceholderTransaction isn't updated via RangeUpdater, UndoTransaction may return error when selection/caret position is changed.  Then, redo is failed.

So we should add selection into PlaceholderTrancation to RangeUpdater.

MozReview-Commit-ID: LcUIiUExNhx
2016-11-10 21:10:50 +09:00
Masayuki Nakano
92543fd4ea Bug 1230473 If there is no TextComposition instance even when EditorBase receives eCompositionStart event, the editor should do nothing r=smaug
Even when editor receives eCompositionStart event, the active composition may have gone since web contents can listen to composition events before editor (so, web contents can commit the composition before "compositionstart" reaching focused editor).

Therefore, editor shouldn't crash as unexpected scenario.  Instead, it should do nothing in such case.

Note that when editor receives 2nd or later "compositionupdate" or "text" event, it should not modify composition.  However, currently, it does that.  This patch does NOT fix it since it's really rare case.  It should be fixed in another bug because this should be uplifted (crashing with some IMEs on Android is serious).

MozReview-Commit-ID: HIbMy4eFRMw
2016-11-08 00:36:32 +09:00
Masayuki Nakano
0319370e22 Bug 1311606 Rename |result| of nsresult variants to |rv| in editor r=smaug
For conforming to our coding rules, |result| of nsresult variants should be renamed to |rv|.

MozReview-Commit-ID: Bk8CyLAnvXQ
2016-10-25 00:43:49 +09:00
Masayuki Nakano
70065b8279 Bug 1311240 Fix odd "{" and "}" of control statements in editor for conforming to our coding rules r=smaug
Currently, editor code uses following style (or similar style) in a lot of places:

if (foo)
{

}
else
{

}

This patch fixes this as conforming to our coding rules, i.e., it becomes:

if (foo) {

} else {

}

Additionally, this fixes other odd control statements in the files which include above issue because it's difficult to find following issues with searching the files:

* if (foo) bar;
* if (foo) { bar; }
* if (foo)
    bar;

Finally, if it becomes much simpler than current code, this patch rewrites existing code with "early return style". But this case is only a few places because this is risky.

MozReview-Commit-ID: 2Gs26goWXrF
2016-10-24 11:27:45 +09:00
Masayuki Nakano
381c9c05ee Bug 1310618 Replace nsresult variables |res| with |rv| under editor/ r=Ehsan
In our coding rules, variable names of nsresult should be rv.  Indeed, when you see |rv| in the code, you must assume that its type if nsresult.

However, a lot of code under editor/ uses |res| for the variables of nsresult.  Let's replace |res| with |rv|.

And this patch improves following points:

1. When |rv| is set in both |if| and |else| block and they are check outside of them, this moves the check into each |if| and |else| block because even if the failure is notified with warning, you cannot see which case was performed and failed.  This change makes it clear.

2. When |return rv;| returns non-error code because |rv| is checked with NS_ENSURE_SUCCESS() immediately before, setting replacing it with |return NS_OK;| is clearer.

3. Move declaration of |nsresult rv| into smaller scope as far as possible.  This prevents setting rv to unexpected value and easier to check its value at reading the code.

MozReview-Commit-ID: 9MAqj7sFey3
2016-10-19 18:09:33 +09:00
Makoto Kato
1e84bf220b Bug 850043 - Part 1. Looking for better insertion point when using plain text editor. r=masayuki
When typing character, current selection node might be anonymous DIV, not text node.  So even if plain text, we might not get it.

We should get text node correctly when using plain text editor.

MozReview-Commit-ID: LmfYa7BqZnC
2016-10-17 14:22:46 +09:00
Olli Pettay
45a7bbd8ea Bug 1309720, ensure expected DOM tree operations when calling insertBefore, r=ehsan 2016-10-14 15:33:42 +03:00
Xidorn Quan
7d6c4129ab Bug 1304302 part 10 - Replace all uses of StyleSheetHandle. r=heycam
This commit is generated by the following commands with some minor
manual adjustment:

find . \( -name '*.h' -or -name '*.cpp' \) -not -path './layout/style/StyleSheet*' -exec sed -i -b \
  -e '/^\(#include\|using\)/s/StyleSheetHandle/StyleSheet/g' \
  -e 's/\(mozilla::\)\?StyleSheetHandle::RefPtr/RefPtr<\1StyleSheet>/g' \
  -e 's/StyleSheetHandle()/nullptr/g' \
  -e 's/->AsStyleSheet()//g' \
  -e 's/StyleSheetHandle/StyleSheet*/g' {} +
sed -i -b 's/sheet->AsVoidPtr()/sheet.get()/' layout/style/Loader.cpp
sed -i -b 's/AsHandle()/this/' layout/style/StyleSheet.cpp

MozReview-Commit-ID: 7abdvlKHukd
2016-09-26 22:03:25 +10:00
Manish Goregaokar
49b3b83008 Bug 1300337 - Replace None_ variants from nsStyleConsts.h with None; r=heycam,TYLin
MozReview-Commit-ID: CxHzbEzjLxT
2016-09-04 00:16:58 +05:30
Emilio Cobos Álvarez
2efcfaad38 Bug 1299066: Make NS_STYLE_DISPLAY_* an enum class. Prefer indexing instead of linear search in the frame constructor r=heycam,bz
The main renaming was generated with the following python script:

```

import sys
import re

CAMEL_CASE_REGEX = re.compile(r"(^|_|-)([A-Z])([A-Z]+)")
DISPLAY_REGEX = re.compile(r"\bNS_STYLE_DISPLAY_([^M][A-Z_]+)\b")

def to_camel_case(ident):
  return re.sub(CAMEL_CASE_REGEX,
                lambda m: m.group(2) + m.group(3).lower(), ident)

def constant_to_enum(constant):
  return "StyleDisplay::" + to_camel_case(constant) + ("_" if constant == "NONE" else "")

def process_line(line):
  return re.sub(DISPLAY_REGEX,
                lambda m: constant_to_enum(m.group(1)), line)

lines = []
with open(sys.argv[1], "r") as f:
  for line in f:
    lines.append(process_line(line))

with open(sys.argv[1], "w") as f:
  for line in lines:
    f.write(line)
```

And the following shell commands:

```
find . -name '*.cpp' -exec python display.py {} \;
find . -name '*.h' -exec python display.py {} \;
```

MozReview-Commit-ID: 91xYCbLC2Vf
2016-09-01 20:41:17 -07:00
Aryeh Gregor
0e511f9848 Bug 1295563 - Assert that editors can't be reinitialized during an edit action; r=masayuki
Many HTMLEditRules methods use the pattern of
  nsCOMPtr<nsIEditor> kungFuDeathGrip(mHTMLEditor);
at the beginning of the method, followed by using mHTMLEditor freely.
If Init() is then called on the editor, mHTMLEditor is set to null, so
it will crash.  Other bad stuff will probably happen too.

MozReview-Commit-ID: gUtaTAQJIh
2016-08-23 14:13:16 +03:00
Nicholas Nethercote
1f65390cc9 Bug 1293603 (part 2) - Make Run() declarations consistent. r=erahm.
This patch makes most Run() declarations in subclasses of nsIRunnable have the
same form: |NS_IMETHOD Run() override|.

As a result of these changes, I had to add |override| to a couple of other
functions to satisfy clang's -Winconsistent-missing-override warning.
2016-08-08 12:18:10 +10:00
Masayuki Nakano
f55cf1ebb4 Bug 1260651 part.61 Replace "etc" with "etc." r=mccr8
MozReview-Commit-ID: JFgd0t2bqzu
2016-07-08 14:15:21 +09:00
Masayuki Nakano
349d5d7916 Bug 1260651 part.60 editor/libeditor should export some headers which are required by other modules and other modules shouldn't use local include for them r=mccr8
MozReview-Commit-ID: FZSExwkHH2B
2016-07-08 14:03:31 +09:00
Masayuki Nakano
5307069dfd Bug 1260651 part.59 Rename nsEditor to mozilla::EditorBase (and also their file names) r=mccr8
This patch also renames:

EditorInputEventDispatcher -> mozilla::EditorInputEventDispatcher

And some variable names are renamed from aEditor or mEditor to aEditorBase or mEditorBase for making their types clearer.

MozReview-Commit-ID: 2FCXWpLMn8e
2016-07-08 13:10:13 +09:00