Bug 1147551 - IPC Proxy for min/cur/max values, r=davidb

--HG--
extra : rebase_source : d0e107e696d07ae121cc752c451de890c8013970
This commit is contained in:
Olli Pettay 2015-03-27 00:06:38 +02:00
parent f5c6da7dce
commit 83952aa43e
6 changed files with 175 additions and 16 deletions

View File

@ -8,7 +8,7 @@
#include "AccessibleWrap.h"
#include "nsMai.h"
#include "ProxyAccessible.h"
#include "mozilla/FloatingPoint.h"
#include "mozilla/Likely.h"
@ -20,12 +20,17 @@ extern "C" {
static void
getCurrentValueCB(AtkValue *obj, GValue *value)
{
ProxyAccessible* proxy = nullptr;
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(obj));
if (!accWrap)
return;
if (!accWrap) {
proxy = GetProxy(ATK_OBJECT(obj));
if (!proxy) {
return;
}
}
memset (value, 0, sizeof (GValue));
double accValue = accWrap->CurValue();
double accValue = accWrap ? accWrap->CurValue() : proxy->CurValue();
if (IsNaN(accValue))
return;
@ -36,12 +41,17 @@ getCurrentValueCB(AtkValue *obj, GValue *value)
static void
getMaximumValueCB(AtkValue *obj, GValue *value)
{
ProxyAccessible* proxy = nullptr;
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(obj));
if (!accWrap)
return;
if (!accWrap) {
proxy = GetProxy(ATK_OBJECT(obj));
if (!proxy) {
return;
}
}
memset(value, 0, sizeof (GValue));
double accValue = accWrap->MaxValue();
double accValue = accWrap ? accWrap->MaxValue() : proxy->MaxValue();
if (IsNaN(accValue))
return;
@ -52,12 +62,17 @@ getMaximumValueCB(AtkValue *obj, GValue *value)
static void
getMinimumValueCB(AtkValue *obj, GValue *value)
{
ProxyAccessible* proxy = nullptr;
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(obj));
if (!accWrap)
return;
if (!accWrap) {
proxy = GetProxy(ATK_OBJECT(obj));
if (!proxy) {
return;
}
}
memset(value, 0, sizeof (GValue));
double accValue = accWrap->MinValue();
double accValue = accWrap ? accWrap->MinValue() : proxy->MinValue();
if (IsNaN(accValue))
return;
@ -68,12 +83,17 @@ getMinimumValueCB(AtkValue *obj, GValue *value)
static void
getMinimumIncrementCB(AtkValue *obj, GValue *minimumIncrement)
{
ProxyAccessible* proxy = nullptr;
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(obj));
if (!accWrap)
return;
if (!accWrap) {
proxy = GetProxy(ATK_OBJECT(obj));
if (!proxy) {
return;
}
}
memset(minimumIncrement, 0, sizeof (GValue));
double accValue = accWrap->Step();
double accValue = accWrap ? accWrap->Step() : proxy->Step();
if (IsNaN(accValue))
accValue = 0; // zero if the minimum increment is undefined
@ -84,12 +104,17 @@ getMinimumIncrementCB(AtkValue *obj, GValue *minimumIncrement)
static gboolean
setCurrentValueCB(AtkValue *obj, const GValue *value)
{
ProxyAccessible* proxy = nullptr;
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(obj));
if (!accWrap)
return FALSE;
if (!accWrap) {
proxy = GetProxy(ATK_OBJECT(obj));
if (!proxy) {
return FALSE;
}
}
double accValue =g_value_get_double(value);
return accWrap->SetCurValue(accValue);
return accWrap ? accWrap->SetCurValue(accValue) : proxy->SetCurValue(accValue);
}
}

View File

@ -1517,5 +1517,71 @@ DocAccessibleChild::RecvKeyboardShortcut(const uint64_t& aID,
return true;
}
bool
DocAccessibleChild::RecvCurValue(const uint64_t& aID,
double* aValue)
{
*aValue = UnspecifiedNaN<double>();
Accessible* acc = IdToAccessible(aID);
if (acc) {
*aValue = acc->CurValue();
}
return true;
}
bool
DocAccessibleChild::RecvSetCurValue(const uint64_t& aID,
const double& aValue,
bool* aRetVal)
{
*aRetVal = false;
Accessible* acc = IdToAccessible(aID);
if (acc) {
*aRetVal = acc->SetCurValue(aValue);
}
return true;
}
bool
DocAccessibleChild::RecvMinValue(const uint64_t& aID,
double* aValue)
{
*aValue = UnspecifiedNaN<double>();
Accessible* acc = IdToAccessible(aID);
if (acc) {
*aValue = acc->MinValue();
}
return true;
}
bool
DocAccessibleChild::RecvMaxValue(const uint64_t& aID,
double* aValue)
{
*aValue = UnspecifiedNaN<double>();
Accessible* acc = IdToAccessible(aID);
if (acc) {
*aValue = acc->MaxValue();
}
return true;
}
bool
DocAccessibleChild::RecvStep(const uint64_t& aID,
double* aStep)
{
*aStep = UnspecifiedNaN<double>();
Accessible* acc = IdToAccessible(aID);
if (acc) {
*aStep = acc->Step();
}
return true;
}
}
}

View File

@ -374,6 +374,22 @@ public:
virtual bool RecvKeyboardShortcut(const uint64_t& aID,
uint32_t* aKey,
uint32_t* aModifierMask) override;
virtual bool RecvCurValue(const uint64_t& aID,
double* aValue);
virtual bool RecvSetCurValue(const uint64_t& aID,
const double& aValue,
bool* aRetVal);
virtual bool RecvMinValue(const uint64_t& aID,
double* aValue);
virtual bool RecvMaxValue(const uint64_t& aID,
double* aValue);
virtual bool RecvStep(const uint64_t& aID,
double* aStep);
private:
Accessible* IdToAccessible(const uint64_t& aID) const;

View File

@ -198,6 +198,12 @@ child:
prio(high) sync ActionNameAt(uint64_t aID, uint8_t aIndex) returns(nsString aName);
prio(high) sync AccessKey(uint64_t aID) returns(uint32_t aKey, uint32_t aModifierMask);
prio(high) sync KeyboardShortcut(uint64_t aID) returns(uint32_t aKey, uint32_t aModifierMask);
prio(high) sync CurValue(uint64_t aID) returns(double aValue);
prio(high) sync SetCurValue(uint64_t aID, double aValue) returns(bool aRetVal);
prio(high) sync MinValue(uint64_t aID) returns(double aValue);
prio(high) sync MaxValue(uint64_t aID) returns(double aValue);
prio(high) sync Step(uint64_t aID) returns(double aStep);
};
}

View File

@ -845,5 +845,45 @@ ProxyAccessible::KeyboardShortcut()
return KeyBinding(key, modifierMask);
}
double
ProxyAccessible::CurValue()
{
double val = UnspecifiedNaN<double>();
unused << mDoc->SendCurValue(mID, &val);
return val;
}
bool
ProxyAccessible::SetCurValue(double aValue)
{
bool success = false;
unused << mDoc->SendSetCurValue(mID, aValue, &success);
return success;
}
double
ProxyAccessible::MinValue()
{
double val = UnspecifiedNaN<double>();
unused << mDoc->SendMinValue(mID, &val);
return val;
}
double
ProxyAccessible::MaxValue()
{
double val = UnspecifiedNaN<double>();
unused << mDoc->SendMaxValue(mID, &val);
return val;
}
double
ProxyAccessible::Step()
{
double step = UnspecifiedNaN<double>();
unused << mDoc->SendStep(mID, &step);
return step;
}
}
}

View File

@ -264,6 +264,12 @@ public:
KeyBinding AccessKey();
KeyBinding KeyboardShortcut();
double CurValue();
bool SetCurValue(double aValue);
double MinValue();
double MaxValue();
double Step();
/**
* Allow the platform to store a pointers worth of data on us.
*/