diff --git a/test/touch.c b/test/touch.c index 7b22ceddb..1f183a72a 100644 --- a/test/touch.c +++ b/test/touch.c @@ -35,27 +35,46 @@ #include "tests-common.h" +static void +free_device(DeviceIntPtr dev) +{ + free(dev->name); + free(dev->last.scroll); /* sigh, allocated but not freed by the valuator functions */ + for (int i = 0; i < dev->last.num_touches; i++) + valuator_mask_free(&dev->last.touches[i].valuators); + + free(dev->last.touches); /* sigh, allocated but not freed by the valuator functions */ + FreeDeviceClass(XIValuatorClass, (void**)&dev->valuator); + FreeDeviceClass(XITouchClass, (void**)&dev->touch); +} + static void touch_grow_queue(void) { DeviceIntRec dev; - ValuatorClassRec val; - TouchClassRec touch; + SpriteInfoRec sprite; size_t size, new_size; int i; + ScreenRec screen; + Atom labels[2] = { 0 }; + + screenInfo.screens[0] = &screen; memset(&dev, 0, sizeof(dev)); + dev.type = MASTER_POINTER; /* claim it's a master to stop ptracccel */ dev.name = xnfstrdup("test device"); dev.id = 2; - dev.valuator = &val; - val.numAxes = 5; - dev.touch = &touch; + + InitValuatorClassDeviceStruct(&dev, 2, labels, 10, Absolute); + InitTouchClassDeviceStruct(&dev, 5, XIDirectTouch, 2); + + memset(&sprite, 0, sizeof(sprite)); + dev.spriteInfo = &sprite; + inputInfo.devices = &dev; size = 5; - dev.last.num_touches = size; - dev.last.touches = calloc(dev.last.num_touches, sizeof(*dev.last.touches)); assert(dev.last.touches); for (i = 0; i < size; i++) { dev.last.touches[i].active = TRUE; @@ -91,27 +110,33 @@ touch_grow_queue(void) assert(t->ddx_id == 0); } - free(dev.name); + free_device(&dev); } static void touch_find_ddxid(void) { DeviceIntRec dev; + SpriteInfoRec sprite; DDXTouchPointInfoPtr ti, ti2; - ValuatorClassRec val; - TouchClassRec touch; int size = 5; int i; + Atom labels[2] = { 0 }; + ScreenRec screen; + + screenInfo.screens[0] = &screen; memset(&dev, 0, sizeof(dev)); + dev.type = MASTER_POINTER; /* claim it's a master to stop ptracccel */ dev.name = xnfstrdup("test device"); dev.id = 2; - dev.valuator = &val; - val.numAxes = 5; - dev.touch = &touch; - dev.last.num_touches = size; - dev.last.touches = calloc(dev.last.num_touches, sizeof(*dev.last.touches)); + + InitValuatorClassDeviceStruct(&dev, 2, labels, 10, Absolute); + InitTouchClassDeviceStruct(&dev, 5, XIDirectTouch, 2); + + memset(&sprite, 0, sizeof(sprite)); + dev.spriteInfo = &sprite; + inputInfo.devices = &dev; assert(dev.last.touches); @@ -159,32 +184,35 @@ touch_find_ddxid(void) ti = TouchFindByDDXID(&dev, 40, TRUE); assert(ti == &dev.last.touches[size+1]); - free(dev.name); + free_device(&dev); } static void touch_begin_ddxtouch(void) { DeviceIntRec dev; + SpriteInfoRec sprite; DDXTouchPointInfoPtr ti; - ValuatorClassRec val; - TouchClassRec touch; int ddx_id = 123; unsigned int last_client_id = 0; - int size = 5; + Atom labels[2] = { 0 }; + ScreenRec screen; + + screenInfo.screens[0] = &screen; memset(&dev, 0, sizeof(dev)); + dev.type = MASTER_POINTER; /* claim it's a master to stop ptracccel */ dev.name = xnfstrdup("test device"); dev.id = 2; - dev.valuator = &val; - val.numAxes = 5; - touch.mode = XIDirectTouch; - dev.touch = &touch; - dev.last.num_touches = size; - dev.last.touches = calloc(dev.last.num_touches, sizeof(*dev.last.touches)); inputInfo.devices = &dev; - assert(dev.last.touches); + InitValuatorClassDeviceStruct(&dev, 2, labels, 10, Absolute); + InitTouchClassDeviceStruct(&dev, 5, XIDirectTouch, 2); + + memset(&sprite, 0, sizeof(sprite)); + dev.spriteInfo = &sprite; + + assert(dev.last.touches); ti = TouchBeginDDXTouch(&dev, ddx_id); assert(ti); assert(ti->ddx_id == ddx_id); @@ -206,41 +234,36 @@ touch_begin_ddxtouch(void) assert(!ti->emulate_pointer); last_client_id = ti->client_id; - free(dev.name); + free_device(&dev); } static void touch_begin_touch(void) { DeviceIntRec dev; - TouchClassRec touch; - ValuatorClassRec val; TouchPointInfoPtr ti; int touchid = 12434; int sourceid = 23; SpriteInfoRec sprite; ScreenRec screen; + Atom labels[2] = { 0 }; screenInfo.screens[0] = &screen; memset(&dev, 0, sizeof(dev)); + dev.type = MASTER_POINTER; /* claim it's a master to stop ptracccel */ dev.name = xnfstrdup("test device"); dev.id = 2; - memset(&sprite, 0, sizeof(sprite)); - dev.spriteInfo = &sprite; - - memset(&touch, 0, sizeof(touch)); - touch.num_touches = 0; - - memset(&val, 0, sizeof(val)); - dev.valuator = &val; - val.numAxes = 2; - ti = TouchBeginTouch(&dev, sourceid, touchid, TRUE); assert(!ti); - dev.touch = &touch; + InitValuatorClassDeviceStruct(&dev, 2, labels, 10, Absolute); + InitTouchClassDeviceStruct(&dev, 5, XIDirectTouch, 2); + + memset(&sprite, 0, sizeof(sprite)); + dev.spriteInfo = &sprite; + ti = TouchBeginTouch(&dev, sourceid, touchid, TRUE); assert(ti); assert(ti->client_id == touchid); @@ -248,9 +271,9 @@ touch_begin_touch(void) assert(ti->sourceid == sourceid); assert(ti->emulate_pointer); - assert(touch.num_touches == 1); + assert(dev.touch->num_touches == 5); - free(dev.name); + free_device(&dev); } static void @@ -265,6 +288,7 @@ touch_init(void) screenInfo.screens[0] = &screen; memset(&dev, 0, sizeof(dev)); + dev.type = MASTER_POINTER; /* claim it's a master to stop ptracccel */ dev.name = xnfstrdup("test device"); memset(&sprite, 0, sizeof(sprite)); @@ -279,7 +303,7 @@ touch_init(void) assert(rc == TRUE); assert(dev.touch); - free(dev.name); + free_device(&dev); } int