зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1524983 - Make nsFocusManager::Blur() hand off focus one level up only. r=NeilDeakin
Depends on D22974 Differential Revision: https://phabricator.services.mozilla.com/D22468 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
f31daadc47
Коммит
83788eac4c
|
@ -135,6 +135,35 @@ mozilla::ipc::IPCResult BrowserBridgeChild::RecvRequestFocus(
|
|||
return IPC_OK();
|
||||
}
|
||||
|
||||
mozilla::ipc::IPCResult BrowserBridgeChild::RecvMoveFocus(
|
||||
const bool& aForward, const bool& aForDocumentNavigation) {
|
||||
// Adapted from TabParent
|
||||
nsCOMPtr<nsIFocusManager> fm = nsFocusManager::GetFocusManager();
|
||||
if (!fm) {
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
RefPtr<Element> owner = mFrameLoader->GetOwnerContent();
|
||||
|
||||
if (!owner || !owner->OwnerDoc()) {
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
RefPtr<Element> dummy;
|
||||
|
||||
uint32_t type =
|
||||
aForward
|
||||
? (aForDocumentNavigation
|
||||
? static_cast<uint32_t>(nsIFocusManager::MOVEFOCUS_FORWARDDOC)
|
||||
: static_cast<uint32_t>(nsIFocusManager::MOVEFOCUS_FORWARD))
|
||||
: (aForDocumentNavigation
|
||||
? static_cast<uint32_t>(nsIFocusManager::MOVEFOCUS_BACKWARDDOC)
|
||||
: static_cast<uint32_t>(nsIFocusManager::MOVEFOCUS_BACKWARD));
|
||||
fm->MoveFocus(nullptr, owner, type, nsIFocusManager::FLAG_BYKEY,
|
||||
getter_AddRefs(dummy));
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
void BrowserBridgeChild::ActorDestroy(ActorDestroyReason aWhy) {
|
||||
mIPCOpen = false;
|
||||
}
|
||||
|
|
|
@ -52,6 +52,9 @@ class BrowserBridgeChild : public PBrowserBridgeChild {
|
|||
|
||||
mozilla::ipc::IPCResult RecvRequestFocus(const bool& aCanRaise);
|
||||
|
||||
mozilla::ipc::IPCResult RecvMoveFocus(const bool& aForward,
|
||||
const bool& aForDocumentNavigation);
|
||||
|
||||
void ActorDestroy(ActorDestroyReason aWhy) override;
|
||||
|
||||
private:
|
||||
|
|
|
@ -32,6 +32,12 @@ child:
|
|||
*/
|
||||
async RequestFocus(bool canRaise);
|
||||
|
||||
/**
|
||||
* When IPC parent / Web child sends this message, the IPC child / Web parent
|
||||
* should move focus to the next or previous focusable element or document.
|
||||
*/
|
||||
async MoveFocus(bool forward, bool forDocumentNavigation);
|
||||
|
||||
parent:
|
||||
// Destroy the remote web browser due to the nsFrameLoader going away.
|
||||
async __delete__();
|
||||
|
|
|
@ -482,7 +482,14 @@ void TabParent::ActorDestroy(ActorDestroyReason why) {
|
|||
|
||||
mozilla::ipc::IPCResult TabParent::RecvMoveFocus(
|
||||
const bool& aForward, const bool& aForDocumentNavigation) {
|
||||
nsCOMPtr<nsIFocusManager> fm = do_GetService(FOCUSMANAGER_CONTRACTID);
|
||||
BrowserBridgeParent* bridgeParent = GetBrowserBridgeParent();
|
||||
if (bridgeParent) {
|
||||
mozilla::Unused << bridgeParent->SendMoveFocus(aForward,
|
||||
aForDocumentNavigation);
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIFocusManager> fm = nsFocusManager::GetFocusManager();
|
||||
if (fm) {
|
||||
RefPtr<Element> dummy;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче