xserver: Branch 'master' - 3 commits
Peter Hutterer
whot at kemper.freedesktop.org
Tue Dec 9 18:44:14 PST 2008
dix/getevents.c | 4 ---
dix/window.c | 17 --------------
include/input.h | 5 +++-
include/windowstr.h | 9 -------
mi/mieq.c | 62 ++++++++++++++++++++++++++--------------------------
xkb/ddxDevBtn.c | 15 ++++++++----
6 files changed, 45 insertions(+), 67 deletions(-)
New commits:
commit d281866b74f7067f2704c278fe9720eafc0ee5ef
Author: Peter Hutterer <peter.hutterer at redhat.com>
Date: Mon Dec 1 21:20:48 2008 +1000
mi: Clean up CopyGetMasterEvent, re-use the memory.
Alloc an EventList once and then re-use instead of allocing a new event each
time we need a master event.
There's a trick included: because all the event processing handlers only take
an xEvent, init a size 1 EventList and squash the events into this one.
Events that have count > 1 must be squished into an xEvent array anyway before
passing into the event handlers, so we don't lose anything here.
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
Acked-by: Daniel Stone <daniel at fooishbar.org>
diff --git a/mi/mieq.c b/mi/mieq.c
index a05c9eb..cb940e4 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -80,6 +80,7 @@ typedef struct _EventQueue {
} EventQueueRec, *EventQueuePtr;
static EventQueueRec miEventQueue;
+static EventListPtr masterEvents; /* for use in mieqProcessInputEvents */
Bool
mieqInit(void)
@@ -98,6 +99,17 @@ mieqInit(void)
FatalError("Could not allocate event queue.\n");
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);
return TRUE;
}
@@ -275,28 +287,21 @@ ChangeDeviceID(DeviceIntPtr dev, xEvent* event)
*/
void
CopyGetMasterEvent(DeviceIntPtr mdev, xEvent* original,
- xEvent** master, int count)
+ EventListPtr master, int count)
{
- if (count > 1) {
- *master = xcalloc(count, sizeof(xEvent));
- if (!*master)
- FatalError("[mi] No memory left for master event.\n");
- while(count--)
- {
- memcpy(&(*master)[count], &original[count], sizeof(xEvent));
- ChangeDeviceID(mdev, &(*master)[count]);
- }
- } else
- {
- int len = sizeof(xEvent);
- if (original->u.u.type == GenericEvent)
- len += GEV(original)->length * 4;
- *master = xalloc(len);
- if (!*master)
- FatalError("[mi] No memory left for master event.\n");
- memcpy(*master, original, len);
- ChangeDeviceID(mdev, *master);
- }
+ int len = count * sizeof(xEvent);
+
+ /* Assumption: GenericEvents always have count 1 */
+
+ if (GEV(original)->type == GenericEvent)
+ len += GEV(original)->length * 4;
+
+ if (master->evlen < len)
+ SetMinimumEventSize(master, 1, len);
+
+ memcpy(master->event, original, len);
+ while (count--)
+ ChangeDeviceID(mdev, &master->event[count]);
}
/* Call this from ProcessInputEvents(). */
@@ -308,8 +313,7 @@ mieqProcessInputEvents(void)
int x = 0, y = 0;
int type, nevents, evlen, i;
ScreenPtr screen;
- xEvent *event,
- *master_event = NULL;
+ xEvent *event;
DeviceIntPtr dev = NULL,
master = NULL;
@@ -358,10 +362,7 @@ mieqProcessInputEvents(void)
}
else {
if (master)
- CopyGetMasterEvent(master, event,
- &master_event, nevents);
- else
- master_event = NULL;
+ CopyGetMasterEvent(master, event, masterEvents, nevents);
/* If someone's registered a custom event handler, let them
* steal it. */
@@ -370,19 +371,18 @@ mieqProcessInputEvents(void)
handler(DequeueScreen(dev)->myNum, event, dev, nevents);
if (master)
handler(DequeueScreen(master)->myNum,
- master_event, master, nevents);
+ masterEvents->event, master, nevents);
} else
{
/* process slave first, then master */
dev->public.processInputProc(event, dev, nevents);
if (master)
- master->public.processInputProc(master_event, master,
+ master->public.processInputProc(masterEvents->event, master,
nevents);
}
xfree(event);
- xfree(master_event);
}
/* Update the sprite now. Next event may be from different device. */
diff --git a/xkb/ddxDevBtn.c b/xkb/ddxDevBtn.c
index b68a28b..585ad19 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;
}
commit 0b4fef6337d88ae8ef05b8b73941350a9007565c
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Wed Dec 10 11:35:09 2008 +1000
dix: move MAX_VALUATOR_EVENTS into include/input.h
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
diff --git a/dix/getevents.c b/dix/getevents.c
index 19e6fa7..f53f3c3 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -62,10 +62,6 @@
#include "extnsionst.h"
#include "listdev.h" /* for sizing up DeviceClassesChangedEvent */
-/* Maximum number of valuators, divided by six, rounded up, to get number
- * of events. */
-#define MAX_VALUATOR_EVENTS 6
-
/* Number of motion history events to store. */
#define MOTION_HISTORY_SIZE 256
diff --git a/include/input.h b/include/input.h
index 509ce3c..e14f698 100644
--- a/include/input.h
+++ b/include/input.h
@@ -69,7 +69,10 @@ SOFTWARE.
#define PtrAccelLightweight 2
#define PtrAccelDefault PtrAccelPredictable
-#define MAX_VALUATORS 36 /* XXX from comment in dix/getevents.c */
+#define MAX_VALUATORS 36
+/* Maximum number of valuators, divided by six, rounded up, to get number
+ * of events. */
+#define MAX_VALUATOR_EVENTS 6
#define NO_AXIS_LIMITS -1
diff --git a/mi/mieq.c b/mi/mieq.c
index aef6fae..a05c9eb 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -93,7 +93,7 @@ mieqInit(void)
miEventQueue.handlers[i] = NULL;
for (i = 0; i < QUEUE_SIZE; i++)
{
- EventListPtr evlist = InitEventList(7); /* 1 + MAX_VALUATOR_EVENTS */
+ EventListPtr evlist = InitEventList(1 + MAX_VALUATOR_EVENTS);
if (!evlist)
FatalError("Could not allocate event queue.\n");
miEventQueue.events[i].events = evlist;
commit b36c398b11321a908cfe217108b26a32ffc1d850
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Mon Dec 8 16:41:20 2008 +1000
dix: purge dead device-based window access code.
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
diff --git a/dix/window.c b/dix/window.c
index c038799..88ab5e9 100644
--- a/dix/window.c
+++ b/dix/window.c
@@ -413,12 +413,6 @@ CreateRootWindow(ScreenPtr pScreen)
return FALSE;
}
- pWin->optional->access.perm = NULL;
- pWin->optional->access.deny = NULL;
- pWin->optional->access.nperm = 0;
- pWin->optional->access.ndeny = 0;
- pWin->optional->access.defaultRule = 0;
-
pWin->optional->colormap = pScreen->defColormap;
pWin->optional->visual = pScreen->rootVisual;
@@ -832,9 +826,6 @@ DisposeWindowOptional (WindowPtr pWin)
pWin->optional->deviceCursors = NULL;
}
- xfree(pWin->optional->access.perm);
- xfree(pWin->optional->access.deny);
-
/* Remove generic event mask allocations */
if (pWin->optional->geMasks)
gmask = pWin->optional->geMasks->geClients;
@@ -3467,9 +3458,6 @@ CheckWindowOptionalNeed (WindowPtr w)
pNode = pNode->next;
}
}
- if (optional->access.nperm != 0 ||
- optional->access.ndeny != 0)
- return;
if (optional->geMasks != NULL)
return;
@@ -3530,11 +3518,6 @@ MakeWindowOptional (WindowPtr pWin)
optional->geMasks->eventMasks[i] = 0;
}
- optional->access.nperm = 0;
- optional->access.ndeny = 0;
- optional->access.perm = NULL;
- optional->access.deny = NULL;
- optional->access.defaultRule = 0;
parentOptional = FindWindowWithOptional(pWin)->optional;
optional->visual = parentOptional->visual;
if (!pWin->cursorIsNone)
diff --git a/include/windowstr.h b/include/windowstr.h
index ccd42a7..b39b351 100644
--- a/include/windowstr.h
+++ b/include/windowstr.h
@@ -89,14 +89,6 @@ typedef struct _GenericClientMasks {
GenericMaskPtr geClients;
} GenericClientMasksRec, *GenericClientMasksPtr;
-typedef struct _WindowAccessRec {
- int defaultRule; /* WindowAccessDenyAll */
- DeviceIntPtr* perm;
- int nperm;
- DeviceIntPtr* deny;
- int ndeny;
-} WindowAccessRec, *WindowAccessPtr;
-
typedef struct _WindowOpt {
VisualID visual; /* default: same as parent */
CursorPtr cursor; /* default: window.cursorNone */
@@ -114,7 +106,6 @@ typedef struct _WindowOpt {
struct _OtherInputMasks *inputMasks; /* default: NULL */
DevCursorList deviceCursors; /* default: NULL */
struct _GenericClientMasks *geMasks; /* default: NULL */
- WindowAccessRec access;
} WindowOptRec, *WindowOptPtr;
#define BackgroundPixel 2L
More information about the xorg-commit
mailing list