summaryrefslogtreecommitdiff
path: root/xkb/ddxDevBtn.c
diff options
context:
space:
mode:
Diffstat (limited to 'xkb/ddxDevBtn.c')
-rw-r--r--xkb/ddxDevBtn.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/xkb/ddxDevBtn.c b/xkb/ddxDevBtn.c
index b68a28b2a..585ad198e 100644
--- a/xkb/ddxDevBtn.c
+++ b/xkb/ddxDevBtn.c
@@ -42,13 +42,14 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
extern int DeviceValuator;
+static EventListPtr masterEvents = NULL;
+
void
XkbDDXFakeDeviceButton(DeviceIntPtr dev,Bool press,int button)
{
int * devVal;
INT32 * evVal;
-xEvent events[2],
- *m_events = NULL; /* master dev */
+xEvent events[2];
deviceKeyButtonPointer *btn;
deviceValuator * val;
int x,y;
@@ -107,18 +108,22 @@ DeviceIntPtr master = NULL;
* cases, unless dev is both a keyboard and a mouse.
*/
if (!dev->isMaster && dev->u.master) {
+ if (!masterEvents)
+ {
+ masterEvents = InitEventList(1);
+ SetMinimumEventSize(masterEvents, 1, (1 + MAX_VALUATOR_EVENTS) * sizeof(xEvent));
+ }
master = dev->u.master;
if (!IsPointerDevice(master))
master = GetPairedDevice(dev->u.master);
- CopyGetMasterEvent(master, &events, &m_events, count);
+ CopyGetMasterEvent(master, &events, masterEvents, count);
}
(*dev->public.processInputProc)((xEventPtr)btn, dev, count);
if (master) {
- (*master->public.processInputProc)(m_events, master, count);
- xfree(m_events);
+ (*master->public.processInputProc)(masterEvents->event, master, count);
}
return;
}