mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
bug 1074869 - make atk deal with proxied focus events r=davidb
This commit is contained in:
parent
f635cbd2c0
commit
5d64fd76bf
@ -1307,6 +1307,16 @@ AccessibleWrap::HandleAccEvent(AccEvent* aEvent)
|
|||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
a11y::ProxyEvent(ProxyAccessible* aTarget, uint32_t aEventType)
|
||||||
|
{
|
||||||
|
AtkObject* wrapper = GetWrapperFor(aTarget);
|
||||||
|
if (aEventType == nsIAccessibleEvent::EVENT_FOCUS) {
|
||||||
|
atk_focus_tracker_notify(wrapper);
|
||||||
|
atk_object_notify_state_change(wrapper, ATK_STATE_FOCUSED, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
AccessibleWrap::FireAtkStateChangeEvent(AccEvent* aEvent,
|
AccessibleWrap::FireAtkStateChangeEvent(AccEvent* aEvent,
|
||||||
AtkObject* aObject)
|
AtkObject* aObject)
|
||||||
|
@ -480,6 +480,33 @@ EventQueue::CreateTextChangeEventFor(AccMutationEvent* aEvent)
|
|||||||
aEvent->mIsFromUserInput ? eFromUserInput : eNoUserInput);
|
aEvent->mIsFromUserInput ? eFromUserInput : eNoUserInput);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
EventQueue::SendIPCEvent(AccEvent* aEvent) const
|
||||||
|
{
|
||||||
|
DocAccessibleChild* ipcDoc = mDocument->IPCDoc();
|
||||||
|
uint64_t id = aEvent->GetAccessible()->IsDoc() ? 0 :
|
||||||
|
reinterpret_cast<uintptr_t>(aEvent->GetAccessible());
|
||||||
|
|
||||||
|
switch(aEvent->GetEventType()) {
|
||||||
|
case nsIAccessibleEvent::EVENT_SHOW:
|
||||||
|
ipcDoc->ShowEvent(downcast_accEvent(aEvent));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case nsIAccessibleEvent::EVENT_HIDE:
|
||||||
|
ipcDoc->SendHideEvent(id);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case nsIAccessibleEvent::EVENT_REORDER:
|
||||||
|
// reorder events on the application acc aren't necessary to tell the parent
|
||||||
|
// about new top level documents.
|
||||||
|
if (!aEvent->GetAccessible()->IsApplication())
|
||||||
|
ipcDoc->SendEvent(id, aEvent->GetEventType());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ipcDoc->SendEvent(id, aEvent->GetEventType());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// EventQueue: event queue
|
// EventQueue: event queue
|
||||||
|
|
||||||
@ -557,14 +584,7 @@ EventQueue::ProcessEventQueue()
|
|||||||
if (!mDocument)
|
if (!mDocument)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (IPCAccessibilityActive()) {
|
if (IPCAccessibilityActive())
|
||||||
DocAccessibleChild* ipcDoc = mDocument->IPCDoc();
|
SendIPCEvent(event);
|
||||||
if (event->mEventType == nsIAccessibleEvent::EVENT_SHOW)
|
|
||||||
ipcDoc->ShowEvent(downcast_accEvent(event));
|
|
||||||
else if (event->mEventType == nsIAccessibleEvent::EVENT_HIDE)
|
|
||||||
ipcDoc->SendHideEvent(reinterpret_cast<uintptr_t>(event->GetAccessible()));
|
|
||||||
else
|
|
||||||
ipcDoc->SendEvent(event->GetEventType());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,11 @@ private:
|
|||||||
AccSelChangeEvent* aThisEvent,
|
AccSelChangeEvent* aThisEvent,
|
||||||
uint32_t aThisIndex);
|
uint32_t aThisIndex);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notify the parent process of events being fired by this event queue.
|
||||||
|
*/
|
||||||
|
void SendIPCEvent(AccEvent* aEvent) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Coalesce text change events caused by sibling hide events.
|
* Coalesce text change events caused by sibling hide events.
|
||||||
*/
|
*/
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace a11y {
|
namespace a11y {
|
||||||
|
|
||||||
@ -60,6 +62,11 @@ void ProxyCreated(ProxyAccessible*);
|
|||||||
* disposed of and other action taken.
|
* disposed of and other action taken.
|
||||||
*/
|
*/
|
||||||
void ProxyDestroyed(ProxyAccessible*);
|
void ProxyDestroyed(ProxyAccessible*);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callied when an event is fired on a proxied accessible.
|
||||||
|
*/
|
||||||
|
void ProxyEvent(ProxyAccessible* aTarget, uint32_t aEventType);
|
||||||
} // namespace a11y
|
} // namespace a11y
|
||||||
} // namespace mozilla
|
} // namespace mozilla
|
||||||
|
|
||||||
|
@ -112,5 +112,23 @@ DocAccessibleParent::RecvHideEvent(const uint64_t& aRootID)
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
DocAccessibleParent::RecvEvent(const uint64_t& aID, const uint32_t& aEventType)
|
||||||
|
{
|
||||||
|
if (!aID) {
|
||||||
|
ProxyEvent(this, aEventType);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProxyEntry* e = mAccessibles.GetEntry(aID);
|
||||||
|
if (!e) {
|
||||||
|
NS_ERROR("no proxy for event!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProxyEvent(e->mProxy, aEventType);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,10 +39,8 @@ public:
|
|||||||
* Called when a message from a document in a child process notifies the main
|
* Called when a message from a document in a child process notifies the main
|
||||||
* process it is firing an event.
|
* process it is firing an event.
|
||||||
*/
|
*/
|
||||||
virtual bool RecvEvent(const uint32_t& aType) MOZ_OVERRIDE
|
virtual bool RecvEvent(const uint64_t& aID, const uint32_t& aType)
|
||||||
{
|
MOZ_OVERRIDE;
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual bool RecvShowEvent(const ShowEventData& aData) MOZ_OVERRIDE;
|
virtual bool RecvShowEvent(const ShowEventData& aData) MOZ_OVERRIDE;
|
||||||
virtual bool RecvHideEvent(const uint64_t& aRootID) MOZ_OVERRIDE;
|
virtual bool RecvHideEvent(const uint64_t& aRootID) MOZ_OVERRIDE;
|
||||||
|
@ -40,7 +40,7 @@ parent:
|
|||||||
* Notify the parent process the document in the child process is firing an
|
* Notify the parent process the document in the child process is firing an
|
||||||
* event.
|
* event.
|
||||||
*/
|
*/
|
||||||
Event(uint32_t type);
|
Event(uint64_t aID, uint32_t type);
|
||||||
ShowEvent(ShowEventData data);
|
ShowEvent(ShowEventData data);
|
||||||
HideEvent(uint64_t aRootID);
|
HideEvent(uint64_t aRootID);
|
||||||
|
|
||||||
|
@ -42,6 +42,11 @@ void
|
|||||||
ProxyDestroyed(ProxyAccessible*)
|
ProxyDestroyed(ProxyAccessible*)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ProxyEvent(ProxyAccessible*, uint32_t)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,3 +28,8 @@ void
|
|||||||
a11y::ProxyDestroyed(ProxyAccessible*)
|
a11y::ProxyDestroyed(ProxyAccessible*)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
a11y::ProxyEvent(ProxyAccessible*, uint32_t)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
@ -43,3 +43,8 @@ void
|
|||||||
a11y::ProxyDestroyed(ProxyAccessible*)
|
a11y::ProxyDestroyed(ProxyAccessible*)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
a11y::ProxyEvent(ProxyAccessible*, uint32_t)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user