Xi: include button state in XIButtonInfo.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2009-06-14 09:15:42 +10:00
parent 01241b4247
commit d5a15e65b7
2 changed files with 16 additions and 1 deletions

View File

@ -686,6 +686,7 @@ XISendDeviceChangedEvent(DeviceIntPtr device, DeviceIntPtr master, DeviceChanged
{
len += sizeof(xXIButtonInfo);
len += dce->buttons.num_buttons * sizeof(Atom); /* button names */
len += ((((dce->buttons.num_buttons + 7)/8) + 3)/4) * 4;
}
if (dce->num_valuators)
len += sizeof(xXIValuatorInfo) * dce->num_valuators;

View File

@ -205,6 +205,7 @@ SizeDeviceClasses(DeviceIntPtr dev)
{
len += sizeof(xXIButtonInfo);
len += dev->button->numButtons * sizeof(Atom);
len += ((((dev->button->numButtons + 7)/8) + 3)/4) * 4;
}
if (dev->key)
@ -228,11 +229,24 @@ SizeDeviceClasses(DeviceIntPtr dev)
int
ListButtonInfo(DeviceIntPtr dev, xXIButtonInfo* info)
{
unsigned char *bits;
int mask_len;
int i;
mask_len = (((dev->button->numButtons + 7)/8) + 3)/4; /* 4-byte units*/
info->type = ButtonClass;
info->num_buttons = dev->button->numButtons;
info->length = 2 + info->num_buttons;
info->length = 2 + mask_len + info->num_buttons;
info->sourceid = dev->button->sourceid;
bits = (unsigned char*)&info[1];
memset(bits, 0, mask_len * 4);
for (i = 0; dev && dev->button && i < dev->button->numButtons; i++)
if (BitIsOn(dev->button->down, i))
SetBit(bits, i);
/** XXX: button labels */
return info->length * 4;