mi: update master event copying to InternalEvents.
This is long overdue. The device events are InternalEvents now (and only one at a time), diminishing the need for an EventList for the master event. Furthermore, don't make masterEvent a static since this will interfere if mieqProcessDeviceEvent is called from somewhere else (e.g. XKB actions). Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
		
							parent
							
								
									f85619b14d
								
							
						
					
					
						commit
						3d3b8babd1
					
				
							
								
								
									
										2
									
								
								mi/mi.h
								
								
								
								
							
							
						
						
									
										2
									
								
								mi/mi.h
								
								
								
								
							| 
						 | 
					@ -224,7 +224,7 @@ extern _X_EXPORT void mieqProcessInputEvents(
 | 
				
			||||||
extern DeviceIntPtr CopyGetMasterEvent(
 | 
					extern DeviceIntPtr CopyGetMasterEvent(
 | 
				
			||||||
    DeviceIntPtr /* sdev */,
 | 
					    DeviceIntPtr /* sdev */,
 | 
				
			||||||
    InternalEvent* /* original */,
 | 
					    InternalEvent* /* original */,
 | 
				
			||||||
    EventListPtr /* mlist */
 | 
					    InternalEvent* /* copy */
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										37
									
								
								mi/mieq.c
								
								
								
								
							
							
						
						
									
										37
									
								
								mi/mieq.c
								
								
								
								
							| 
						 | 
					@ -78,7 +78,6 @@ typedef struct _EventQueue {
 | 
				
			||||||
} EventQueueRec, *EventQueuePtr;
 | 
					} EventQueueRec, *EventQueuePtr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static EventQueueRec miEventQueue;
 | 
					static EventQueueRec miEventQueue;
 | 
				
			||||||
static EventListPtr masterEvents; /* for use in mieqProcessInputEvents */
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef XQUARTZ
 | 
					#ifdef XQUARTZ
 | 
				
			||||||
#include  <pthread.h>
 | 
					#include  <pthread.h>
 | 
				
			||||||
| 
						 | 
					@ -117,16 +116,6 @@ mieqInit(void)
 | 
				
			||||||
        miEventQueue.events[i].events = evlist;
 | 
					        miEventQueue.events[i].events = evlist;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* XXX: mE is just 1 event long, if we have Motion + Valuator they are
 | 
					 | 
				
			||||||
     * squashed into the first event to make passing it into the event
 | 
					 | 
				
			||||||
     * processing handlers easier. This should be fixed when the processing
 | 
					 | 
				
			||||||
     * handlers switch to EventListPtr instead of xEvent */
 | 
					 | 
				
			||||||
    masterEvents = InitEventList(1);
 | 
					 | 
				
			||||||
    if (!masterEvents)
 | 
					 | 
				
			||||||
        FatalError("Could not allocated MD event queue.\n");
 | 
					 | 
				
			||||||
    SetMinimumEventSize(masterEvents, 1,
 | 
					 | 
				
			||||||
                        (1 + MAX_VALUATOR_EVENTS) * sizeof(xEvent));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    SetInputCheck(&miEventQueue.head, &miEventQueue.tail);
 | 
					    SetInputCheck(&miEventQueue.head, &miEventQueue.tail);
 | 
				
			||||||
    return TRUE;
 | 
					    return TRUE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -317,16 +306,15 @@ FixUpEventForMaster(DeviceIntPtr mdev, DeviceIntPtr sdev,
 | 
				
			||||||
 * Copy the given event into master.
 | 
					 * Copy the given event into master.
 | 
				
			||||||
 * @param sdev The slave device the original event comes from
 | 
					 * @param sdev The slave device the original event comes from
 | 
				
			||||||
 * @param original The event as it came from the EQ
 | 
					 * @param original The event as it came from the EQ
 | 
				
			||||||
 * @param master The event after being copied
 | 
					 * @param copy The event after being copied
 | 
				
			||||||
 * @return The master device or NULL if the device is a floating slave.
 | 
					 * @return The master device or NULL if the device is a floating slave.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
DeviceIntPtr
 | 
					DeviceIntPtr
 | 
				
			||||||
CopyGetMasterEvent(DeviceIntPtr sdev,
 | 
					CopyGetMasterEvent(DeviceIntPtr sdev,
 | 
				
			||||||
                   InternalEvent* original, EventListPtr mlist)
 | 
					                   InternalEvent* original, InternalEvent *copy)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    DeviceIntPtr mdev;
 | 
					    DeviceIntPtr mdev;
 | 
				
			||||||
    int len = original->any.length;
 | 
					    int len = original->any.length;
 | 
				
			||||||
    InternalEvent *mevent;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    CHECKEVENT(original);
 | 
					    CHECKEVENT(original);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -351,15 +339,9 @@ CopyGetMasterEvent(DeviceIntPtr sdev,
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    memcpy(copy, original, len);
 | 
				
			||||||
    if (mlist->evlen < len)
 | 
					    ChangeDeviceID(mdev, copy);
 | 
				
			||||||
        SetMinimumEventSize(mlist, 1, len);
 | 
					    FixUpEventForMaster(mdev, sdev, original, copy);
 | 
				
			||||||
 | 
					 | 
				
			||||||
    mevent = (InternalEvent*)mlist->event;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    memcpy(mevent, original, len);
 | 
					 | 
				
			||||||
    ChangeDeviceID(mdev, mevent);
 | 
					 | 
				
			||||||
    FixUpEventForMaster(mdev, sdev, original, mevent);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return mdev;
 | 
					    return mdev;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -378,6 +360,7 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
 | 
				
			||||||
    mieqHandler handler;
 | 
					    mieqHandler handler;
 | 
				
			||||||
    int x = 0, y = 0;
 | 
					    int x = 0, y = 0;
 | 
				
			||||||
    DeviceIntPtr master;
 | 
					    DeviceIntPtr master;
 | 
				
			||||||
 | 
					    InternalEvent mevent; /* master event */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    CHECKEVENT(event);
 | 
					    CHECKEVENT(event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -392,7 +375,7 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
 | 
				
			||||||
        NewCurrentScreen (dev, DequeueScreen(dev), x, y);
 | 
					        NewCurrentScreen (dev, DequeueScreen(dev), x, y);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else {
 | 
					    else {
 | 
				
			||||||
        master = CopyGetMasterEvent(dev, event, masterEvents);
 | 
					        master = CopyGetMasterEvent(dev, event, &mevent);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (master)
 | 
					        if (master)
 | 
				
			||||||
            master->u.lastSlave = dev;
 | 
					            master->u.lastSlave = dev;
 | 
				
			||||||
| 
						 | 
					@ -406,7 +389,7 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
 | 
				
			||||||
            /* Check for the SD's master in case the device got detached
 | 
					            /* Check for the SD's master in case the device got detached
 | 
				
			||||||
             * during event processing */
 | 
					             * during event processing */
 | 
				
			||||||
            if (master && dev->u.master)
 | 
					            if (master && dev->u.master)
 | 
				
			||||||
                handler(screenNum, (InternalEvent*)masterEvents->event, master);
 | 
					                handler(screenNum, &mevent, master);
 | 
				
			||||||
        } else
 | 
					        } else
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            /* process slave first, then master */
 | 
					            /* process slave first, then master */
 | 
				
			||||||
| 
						 | 
					@ -415,9 +398,7 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
 | 
				
			||||||
            /* Check for the SD's master in case the device got detached
 | 
					            /* Check for the SD's master in case the device got detached
 | 
				
			||||||
             * during event processing */
 | 
					             * during event processing */
 | 
				
			||||||
            if (master && dev->u.master)
 | 
					            if (master && dev->u.master)
 | 
				
			||||||
                master->public.processInputProc(
 | 
					                master->public.processInputProc(&mevent, master);
 | 
				
			||||||
                        (InternalEvent*)masterEvents->event,
 | 
					 | 
				
			||||||
                        master);
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue