mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 10:44:56 +00:00
Bug 1077515 - part 12 - Remap arrow keys in nsFormFillController so that the caret works properly in vertical-mode <input> elements. r=roc
This commit is contained in:
parent
6a598abe4a
commit
780f34be85
@ -36,6 +36,7 @@
|
||||
#include "nsIDOMNSEditableElement.h"
|
||||
#include "nsContentUtils.h"
|
||||
#include "nsILoadContext.h"
|
||||
#include "nsIFrame.h"
|
||||
|
||||
using namespace mozilla::dom;
|
||||
|
||||
@ -948,6 +949,36 @@ nsFormFillController::KeyPress(nsIDOMEvent* aEvent)
|
||||
case nsIDOMKeyEvent::DOM_VK_DOWN:
|
||||
case nsIDOMKeyEvent::DOM_VK_LEFT:
|
||||
case nsIDOMKeyEvent::DOM_VK_RIGHT:
|
||||
{
|
||||
// Get the writing-mode of the relevant input element,
|
||||
// so that we can remap arrow keys if necessary.
|
||||
mozilla::WritingMode wm;
|
||||
if (mFocusedInputNode && mFocusedInputNode->IsElement()) {
|
||||
mozilla::dom::Element *elem = mFocusedInputNode->AsElement();
|
||||
nsIFrame *frame = elem->GetPrimaryFrame();
|
||||
if (frame) {
|
||||
wm = frame->GetWritingMode();
|
||||
}
|
||||
}
|
||||
if (wm.IsVertical()) {
|
||||
switch (k) {
|
||||
case nsIDOMKeyEvent::DOM_VK_LEFT:
|
||||
k = wm.IsVerticalLR() ? nsIDOMKeyEvent::DOM_VK_UP
|
||||
: nsIDOMKeyEvent::DOM_VK_DOWN;
|
||||
break;
|
||||
case nsIDOMKeyEvent::DOM_VK_RIGHT:
|
||||
k = wm.IsVerticalLR() ? nsIDOMKeyEvent::DOM_VK_DOWN
|
||||
: nsIDOMKeyEvent::DOM_VK_UP;
|
||||
break;
|
||||
case nsIDOMKeyEvent::DOM_VK_UP:
|
||||
k = nsIDOMKeyEvent::DOM_VK_LEFT;
|
||||
break;
|
||||
case nsIDOMKeyEvent::DOM_VK_DOWN:
|
||||
k = nsIDOMKeyEvent::DOM_VK_RIGHT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
mController->HandleKeyNavigation(k, &cancel);
|
||||
break;
|
||||
case nsIDOMKeyEvent::DOM_VK_ESCAPE:
|
||||
|
Loading…
Reference in New Issue
Block a user