mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 688438 - Fix the IME code to handle text controls correctly when checking for IME status; r=bzbarsky
--HG-- extra : rebase_source : 4c532f5ece3e88e907aabfef2197bced1223d9f2
This commit is contained in:
parent
8cfbed187e
commit
92c83507d3
@ -1348,7 +1348,12 @@ PRUint32
|
|||||||
nsIContent::GetDesiredIMEState()
|
nsIContent::GetDesiredIMEState()
|
||||||
{
|
{
|
||||||
if (!IsEditableInternal()) {
|
if (!IsEditableInternal()) {
|
||||||
return IME_STATUS_DISABLE;
|
// Check for the special case where we're dealing with elements which don't
|
||||||
|
// have the editable flag set, but are readwrite (such as text controls).
|
||||||
|
if (!IsElement() ||
|
||||||
|
!AsElement()->State().HasState(NS_EVENT_STATE_MOZ_READWRITE)) {
|
||||||
|
return IME_STATUS_DISABLE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// NOTE: The content for independent editors (e.g., input[type=text],
|
// NOTE: The content for independent editors (e.g., input[type=text],
|
||||||
// textarea) must override this method, so, we don't need to worry about
|
// textarea) must override this method, so, we don't need to worry about
|
||||||
|
@ -646,13 +646,24 @@ nsTextStateManager::ContentRemoved(nsIDocument* aDocument,
|
|||||||
new TextChangeEvent(mWidget, offset, offset + childOffset, offset));
|
new TextChangeEvent(mWidget, offset, offset + childOffset, offset));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool IsEditable(nsINode* node) {
|
||||||
|
if (node->IsEditable()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// |node| might be readwrite (for example, a text control)
|
||||||
|
if (node->IsElement() && node->AsElement()->State().HasState(NS_EVENT_STATE_MOZ_READWRITE)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static nsINode* GetRootEditableNode(nsPresContext* aPresContext,
|
static nsINode* GetRootEditableNode(nsPresContext* aPresContext,
|
||||||
nsIContent* aContent)
|
nsIContent* aContent)
|
||||||
{
|
{
|
||||||
if (aContent) {
|
if (aContent) {
|
||||||
nsINode* root = nsnull;
|
nsINode* root = nsnull;
|
||||||
nsINode* node = aContent;
|
nsINode* node = aContent;
|
||||||
while (node && node->IsEditable()) {
|
while (node && IsEditable(node)) {
|
||||||
root = node;
|
root = node;
|
||||||
node = node->GetNodeParent();
|
node = node->GetNodeParent();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user