aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/dix
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server/dix')
-rw-r--r--xorg-server/dix/Makefile.am2
-rw-r--r--xorg-server/dix/Makefile.in13
-rw-r--r--xorg-server/dix/Xserver.d7
-rw-r--r--xorg-server/dix/colormap.c64
-rw-r--r--xorg-server/dix/eventconvert.c12
-rw-r--r--xorg-server/dix/events.c4
-rw-r--r--xorg-server/dix/getevents.c18
7 files changed, 105 insertions, 15 deletions
diff --git a/xorg-server/dix/Makefile.am b/xorg-server/dix/Makefile.am
index 13e5dedd7..23fe46007 100644
--- a/xorg-server/dix/Makefile.am
+++ b/xorg-server/dix/Makefile.am
@@ -54,6 +54,7 @@ Xserver-dtrace.h: $(srcdir)/Xserver.d
$(DTRACE) -C -h -o $@ -s $(srcdir)/Xserver.d \
|| cp Xserver-dtrace.h.in $@
+if !XQUARTZ
# Generate dtrace object code for probes in libdix
dtrace-dix.o: $(top_srcdir)/dix/Xserver.d $(am_libdix_la_OBJECTS)
$(DTRACE) -G -C -o $@ -s $(top_srcdir)/dix/Xserver.d .libs/*.o
@@ -63,6 +64,7 @@ noinst_PROGRAMS = dix.O
dix.O: dtrace-dix.o $(am_libdix_la_OBJECTS)
ld -r -o $@ .libs/*.o
endif
+endif
dix.c:
touch $@
diff --git a/xorg-server/dix/Makefile.in b/xorg-server/dix/Makefile.in
index 661851255..eff37155a 100644
--- a/xorg-server/dix/Makefile.in
+++ b/xorg-server/dix/Makefile.in
@@ -36,7 +36,7 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@XSERVER_DTRACE_TRUE@noinst_PROGRAMS = dix.O$(EXEEXT)
+@XQUARTZ_FALSE@@XSERVER_DTRACE_TRUE@noinst_PROGRAMS = dix.O$(EXEEXT)
subdir = dix
DIST_COMMON = $(dist_miscconfig_DATA) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
@@ -527,6 +527,9 @@ clean-noinstPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
+@XQUARTZ_TRUE@dix.O$(EXEEXT): $(dix_O_OBJECTS) $(dix_O_DEPENDENCIES)
+@XQUARTZ_TRUE@ @rm -f dix.O$(EXEEXT)
+@XQUARTZ_TRUE@ $(AM_V_CCLD)$(LINK) $(dix_O_OBJECTS) $(dix_O_LDADD) $(LIBS)
@XSERVER_DTRACE_FALSE@dix.O$(EXEEXT): $(dix_O_OBJECTS) $(dix_O_DEPENDENCIES)
@XSERVER_DTRACE_FALSE@ @rm -f dix.O$(EXEEXT)
@XSERVER_DTRACE_FALSE@ $(AM_V_CCLD)$(LINK) $(dix_O_OBJECTS) $(dix_O_LDADD) $(LIBS)
@@ -833,11 +836,11 @@ uninstall-am: uninstall-dist_miscconfigDATA
@XSERVER_DTRACE_TRUE@ || cp Xserver-dtrace.h.in $@
# Generate dtrace object code for probes in libdix
-@XSERVER_DTRACE_TRUE@dtrace-dix.o: $(top_srcdir)/dix/Xserver.d $(am_libdix_la_OBJECTS)
-@XSERVER_DTRACE_TRUE@ $(DTRACE) -G -C -o $@ -s $(top_srcdir)/dix/Xserver.d .libs/*.o
+@XQUARTZ_FALSE@@XSERVER_DTRACE_TRUE@dtrace-dix.o: $(top_srcdir)/dix/Xserver.d $(am_libdix_la_OBJECTS)
+@XQUARTZ_FALSE@@XSERVER_DTRACE_TRUE@ $(DTRACE) -G -C -o $@ -s $(top_srcdir)/dix/Xserver.d .libs/*.o
-@XSERVER_DTRACE_TRUE@dix.O: dtrace-dix.o $(am_libdix_la_OBJECTS)
-@XSERVER_DTRACE_TRUE@ ld -r -o $@ .libs/*.o
+@XQUARTZ_FALSE@@XSERVER_DTRACE_TRUE@dix.O: dtrace-dix.o $(am_libdix_la_OBJECTS)
+@XQUARTZ_FALSE@@XSERVER_DTRACE_TRUE@ ld -r -o $@ .libs/*.o
dix.c:
touch $@
diff --git a/xorg-server/dix/Xserver.d b/xorg-server/dix/Xserver.d
index e4c9b8320..cea97e908 100644
--- a/xorg-server/dix/Xserver.d
+++ b/xorg-server/dix/Xserver.d
@@ -29,8 +29,13 @@
/*
* Xserver dtrace provider definition
*/
-
+#ifdef __APPLE__
+#define string char *
+#define pid_t uint32_t
+#define zoneid_t uint32_t
+#else
#include <sys/types.h>
+#endif
provider Xserver {
/* reqType, data, length, client id, request buffer */
diff --git a/xorg-server/dix/colormap.c b/xorg-server/dix/colormap.c
index a5a006e60..d702b0204 100644
--- a/xorg-server/dix/colormap.c
+++ b/xorg-server/dix/colormap.c
@@ -2690,3 +2690,67 @@ IsMapInstalled(Colormap map, WindowPtr pWin)
xfree(pmaps);
return (found);
}
+
+struct colormap_lookup_data {
+ ScreenPtr pScreen;
+ VisualPtr visuals;
+};
+
+static void _colormap_find_resource(pointer value, XID id,
+ pointer cdata)
+{
+ struct colormap_lookup_data *cmap_data = cdata;
+ VisualPtr visuals = cmap_data->visuals;
+ ScreenPtr pScreen = cmap_data->pScreen;
+ ColormapPtr cmap = value;
+ int j;
+
+ j = cmap->pVisual - pScreen->visuals;
+ cmap->pVisual = &visuals[j];
+}
+
+/* something has realloced the visuals, instead of breaking
+ ABI fix it up here - glx and compsite did this wrong */
+Bool
+ResizeVisualArray(ScreenPtr pScreen, int new_visual_count,
+ DepthPtr depth)
+{
+ struct colormap_lookup_data cdata;
+ int numVisuals;
+ VisualPtr visuals;
+ XID *vids, vid;
+ int first_new_vid, first_new_visual, i;
+
+ first_new_vid = depth->numVids;
+ first_new_visual = pScreen->numVisuals;
+
+ vids = xrealloc(depth->vids, (depth->numVids + new_visual_count) * sizeof(XID));
+ if (!vids)
+ return FALSE;
+
+ /* its realloced now no going back if we fail the next one */
+ depth->vids = vids;
+
+ numVisuals = pScreen->numVisuals + new_visual_count;
+ visuals = xrealloc(pScreen->visuals, numVisuals * sizeof(VisualRec));
+ if (!visuals) {
+ return FALSE;
+ }
+
+ cdata.visuals = visuals;
+ cdata.pScreen = pScreen;
+ FindClientResourcesByType(serverClient, RT_COLORMAP, _colormap_find_resource, &cdata);
+
+ pScreen->visuals = visuals;
+
+ for (i = 0; i < new_visual_count; i++) {
+ vid = FakeClientID(0);
+ pScreen->visuals[first_new_visual + i].vid = vid;
+ vids[first_new_vid + i] = vid;
+ }
+
+ depth->numVids += new_visual_count;
+ pScreen->numVisuals += new_visual_count;
+
+ return TRUE;
+}
diff --git a/xorg-server/dix/eventconvert.c b/xorg-server/dix/eventconvert.c
index d91ba67c2..e25f3ee97 100644
--- a/xorg-server/dix/eventconvert.c
+++ b/xorg-server/dix/eventconvert.c
@@ -352,17 +352,17 @@ getValuatorEvents(DeviceEvent *ev, deviceValuator *xv)
xv->device_state = state;
switch (xv->num_valuators) {
case 6:
- xv->valuator5 = ev->valuators.data[i + 5];
+ xv->valuator5 = ev->valuators.data[xv->first_valuator + 5];
case 5:
- xv->valuator4 = ev->valuators.data[i + 4];
+ xv->valuator4 = ev->valuators.data[xv->first_valuator + 4];
case 4:
- xv->valuator3 = ev->valuators.data[i + 3];
+ xv->valuator3 = ev->valuators.data[xv->first_valuator + 3];
case 3:
- xv->valuator2 = ev->valuators.data[i + 2];
+ xv->valuator2 = ev->valuators.data[xv->first_valuator + 2];
case 2:
- xv->valuator1 = ev->valuators.data[i + 1];
+ xv->valuator1 = ev->valuators.data[xv->first_valuator + 1];
case 1:
- xv->valuator0 = ev->valuators.data[i + 0];
+ xv->valuator0 = ev->valuators.data[xv->first_valuator + 0];
}
if (i + 6 < num_valuators)
diff --git a/xorg-server/dix/events.c b/xorg-server/dix/events.c
index a79cf6d2f..d60b8a534 100644
--- a/xorg-server/dix/events.c
+++ b/xorg-server/dix/events.c
@@ -4414,10 +4414,12 @@ DeviceEnterLeaveEvent(
filter, grab);
} else {
if (!GetWindowXI2Mask(mouse, pWin, (xEvent*)event))
- return;
+ goto out;
DeliverEventsToWindow(mouse, pWin, (xEvent*)event, 1, filter,
NullGrab);
}
+
+out:
xfree(event);
}
diff --git a/xorg-server/dix/getevents.c b/xorg-server/dix/getevents.c
index 7ddf88bad..2df32e8f5 100644
--- a/xorg-server/dix/getevents.c
+++ b/xorg-server/dix/getevents.c
@@ -578,12 +578,13 @@ GetMaximumEventsNum(void) {
static void
clipAxis(DeviceIntPtr pDev, int axisNum, int *val)
{
- AxisInfoPtr axis = pDev->valuator->axes + axisNum;
- /* InitValuatoraAxisStruct ensures that (min < max). */
+ AxisInfoPtr axis;
if (axisNum >= pDev->valuator->numAxes)
return;
+ axis = pDev->valuator->axes + axisNum;
+
/* If a value range is defined, clip. If not, do nothing */
if (axis->max_value <= axis->min_value)
return;
@@ -780,6 +781,19 @@ positionSprite(DeviceIntPtr dev, int *x, int *y, float x_frac, float y_frac,
*screeny_frac = dev->last.remainder[1];
}
+ /* Hit the left screen edge? */
+ if (*screenx <= 0 && *screenx_frac < 0.0f)
+ {
+ *screenx_frac = 0.0f;
+ x_frac = 0.0f;
+ }
+ if (*screeny <= 0 && *screeny_frac < 0.0f)
+ {
+ *screeny_frac = 0.0f;
+ y_frac = 0.0f;
+ }
+
+
old_screenx = *screenx;
old_screeny = *screeny;
/* This takes care of crossing screens for us, as well as clipping