aboutsummaryrefslogtreecommitdiff
path: root/xorg-server
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2013-10-21 07:48:16 +0200
committermarha <marha@users.sourceforge.net>2013-10-21 07:48:16 +0200
commitc665b6e88274f8bc603b0f14f92bf09d2023bd4d (patch)
treee6b3c81a76d0cc2df868263aeae0ab045eaf45b4 /xorg-server
parent91e353434f0a6859f404be05581f44d009ca5d6c (diff)
parent6d895f30ab93d71afddc612d8b007f2de7f04165 (diff)
downloadvcxsrv-c665b6e88274f8bc603b0f14f92bf09d2023bd4d.tar.gz
vcxsrv-c665b6e88274f8bc603b0f14f92bf09d2023bd4d.tar.bz2
vcxsrv-c665b6e88274f8bc603b0f14f92bf09d2023bd4d.zip
Merge remote-tracking branch 'origin/released'
* origin/released: fontconfig mesa xserver xkeyboard-config git update 21 okt 2013
Diffstat (limited to 'xorg-server')
-rw-r--r--xorg-server/Xext/saver.c6
-rw-r--r--xorg-server/Xext/sync.c121
-rw-r--r--xorg-server/configure.ac6
-rw-r--r--xorg-server/dix/dixfonts.c5
-rw-r--r--xorg-server/dix/events.c73
-rw-r--r--xorg-server/dix/globals.c1
-rw-r--r--xorg-server/dix/window.c4
-rw-r--r--xorg-server/exa/exa_migration_mixed.c11
-rw-r--r--xorg-server/exa/exa_mixed.c11
-rw-r--r--xorg-server/hw/dmx/glxProxy/glxsingle.c30
-rw-r--r--xorg-server/hw/dmx/glxProxy/glxvendor.c30
-rw-r--r--xorg-server/hw/xfree86/dixmods/Makefile.am2
-rw-r--r--xorg-server/include/dix.h11
-rw-r--r--xorg-server/include/dixstruct.h1
-rw-r--r--xorg-server/os/WaitFor.c2
-rw-r--r--xorg-server/os/xdmcp.c2
-rw-r--r--xorg-server/xkeyboard-config/Makefile.am2
-rw-r--r--xorg-server/xkeyboard-config/rules/base.xml.in7
-rw-r--r--xorg-server/xkeyboard-config/symbols/cn26
-rw-r--r--xorg-server/xkeyboard-config/symbols/rs46
20 files changed, 248 insertions, 149 deletions
diff --git a/xorg-server/Xext/saver.c b/xorg-server/Xext/saver.c
index cfe8daec5..e9633f4b3 100644
--- a/xorg-server/Xext/saver.c
+++ b/xorg-server/Xext/saver.c
@@ -398,9 +398,7 @@ ScreenSaverFreeSuspend(pointer value, XID id)
DeviceIntPtr dev;
UpdateCurrentTimeIf();
nt_list_for_each_entry(dev, inputInfo.devices, next)
- lastDeviceEventTime[dev->id] = currentTime;
- lastDeviceEventTime[XIAllDevices] = currentTime;
- lastDeviceEventTime[XIAllMasterDevices] = currentTime;
+ NoticeTime(dev, currentTime);
SetScreenSaverTimer();
}
}
@@ -684,7 +682,7 @@ ProcScreenSaverQueryInfo(ClientPtr client)
pPriv = GetScreenPrivate(pDraw->pScreen);
UpdateCurrentTime();
- lastInput = GetTimeInMillis() - lastDeviceEventTime[XIAllDevices].milliseconds;
+ lastInput = GetTimeInMillis() - LastEventTime(XIAllDevices).milliseconds;
rep.type = X_Reply;
diff --git a/xorg-server/Xext/sync.c b/xorg-server/Xext/sync.c
index 43ecd42cf..80190f0f0 100644
--- a/xorg-server/Xext/sync.c
+++ b/xorg-server/Xext/sync.c
@@ -697,6 +697,14 @@ SyncAwaitTriggerFired(SyncTrigger * pTrigger)
FreeResource(pAwaitUnion->header.delete_id, RT_NONE);
}
+static CARD64
+SyncUpdateCounter(SyncCounter *pCounter, CARD64 newval)
+{
+ CARD64 oldval = pCounter->value;
+ pCounter->value = newval;
+ return oldval;
+}
+
/* This function should always be used to change a counter's value so that
* any triggers depending on the counter will be checked.
*/
@@ -706,8 +714,7 @@ SyncChangeCounter(SyncCounter * pCounter, CARD64 newval)
SyncTriggerList *ptl, *pnext;
CARD64 oldval;
- oldval = pCounter->value;
- pCounter->value = newval;
+ oldval = SyncUpdateCounter(pCounter, newval);
/* run through triggers to see if any become true */
for (ptl = pCounter->sync.pTriglist; ptl; ptl = pnext) {
@@ -1017,6 +1024,11 @@ SyncComputeBracketValues(SyncCounter * pCounter)
psci->bracket_greater = pTrigger->test_value;
pnewgtval = &psci->bracket_greater;
}
+ else if (XSyncValueGreaterThan(pCounter->value, pTrigger->test_value) &&
+ XSyncValueGreaterThan(pTrigger->test_value, psci->bracket_less)) {
+ psci->bracket_less = pTrigger->test_value;
+ pnewltval = &psci->bracket_less;
+ }
}
else if (pTrigger->test_type == XSyncNegativeComparison &&
ct != XSyncCounterNeverDecreases) {
@@ -1026,52 +1038,53 @@ SyncComputeBracketValues(SyncCounter * pCounter)
psci->bracket_less = pTrigger->test_value;
pnewltval = &psci->bracket_less;
}
+ else if (XSyncValueLessThan(pCounter->value, pTrigger->test_value) &&
+ XSyncValueLessThan(pTrigger->test_value, psci->bracket_greater)) {
+ psci->bracket_greater = pTrigger->test_value;
+ pnewgtval = &psci->bracket_greater;
+ }
}
else if (pTrigger->test_type == XSyncNegativeTransition &&
ct != XSyncCounterNeverIncreases) {
- if (XSyncValueGreaterThan(pCounter->value, pTrigger->test_value) &&
- XSyncValueGreaterThan(pTrigger->test_value, psci->bracket_less))
- {
- psci->bracket_less = pTrigger->test_value;
- pnewltval = &psci->bracket_less;
+ if (XSyncValueGreaterOrEqual(pCounter->value, pTrigger->test_value) &&
+ XSyncValueGreaterThan(pTrigger->test_value, psci->bracket_less)) {
+ /*
+ * If the value is exactly equal to our threshold, we want one
+ * more event in the negative direction to ensure we pick up
+ * when the value is less than this threshold.
+ */
+ psci->bracket_less = pTrigger->test_value;
+ pnewltval = &psci->bracket_less;
}
- else if (XSyncValueEqual(pCounter->value, pTrigger->test_value) &&
- XSyncValueGreaterThan(pTrigger->test_value,
- psci->bracket_less)) {
- /*
- * The value is exactly equal to our threshold. We want one
- * more event in the negative direction to ensure we pick up
- * when the value is less than this threshold.
- */
- psci->bracket_less = pTrigger->test_value;
- pnewltval = &psci->bracket_less;
+ else if (XSyncValueLessThan(pCounter->value, pTrigger->test_value) &&
+ XSyncValueLessThan(pTrigger->test_value, psci->bracket_greater)) {
+ psci->bracket_greater = pTrigger->test_value;
+ pnewgtval = &psci->bracket_greater;
}
}
else if (pTrigger->test_type == XSyncPositiveTransition &&
ct != XSyncCounterNeverDecreases) {
- if (XSyncValueLessThan(pCounter->value, pTrigger->test_value) &&
- XSyncValueLessThan(pTrigger->test_value, psci->bracket_greater))
- {
- psci->bracket_greater = pTrigger->test_value;
- pnewgtval = &psci->bracket_greater;
+ if (XSyncValueLessOrEqual(pCounter->value, pTrigger->test_value) &&
+ XSyncValueLessThan(pTrigger->test_value, psci->bracket_greater)) {
+ /*
+ * If the value is exactly equal to our threshold, we
+ * want one more event in the positive direction to
+ * ensure we pick up when the value *exceeds* this
+ * threshold.
+ */
+ psci->bracket_greater = pTrigger->test_value;
+ pnewgtval = &psci->bracket_greater;
}
- else if (XSyncValueEqual(pCounter->value, pTrigger->test_value) &&
- XSyncValueLessThan(pTrigger->test_value,
- psci->bracket_greater)) {
- /*
- * The value is exactly equal to our threshold. We want one
- * more event in the positive direction to ensure we pick up
- * when the value *exceeds* this threshold.
- */
- psci->bracket_greater = pTrigger->test_value;
- pnewgtval = &psci->bracket_greater;
+ else if (XSyncValueGreaterThan(pCounter->value, pTrigger->test_value) &&
+ XSyncValueGreaterThan(pTrigger->test_value, psci->bracket_less)) {
+ psci->bracket_less = pTrigger->test_value;
+ pnewltval = &psci->bracket_less;
}
}
} /* end for each trigger */
- if (pnewgtval || pnewltval) {
- (*psci->BracketValues) ((pointer) pCounter, pnewltval, pnewgtval);
- }
+ (*psci->BracketValues) ((pointer) pCounter, pnewltval, pnewgtval);
+
}
/*
@@ -2618,7 +2631,7 @@ IdleTimeQueryValue(pointer pCounter, CARD64 * pValue_return)
}
else
deviceid = XIAllDevices;
- idle = GetTimeInMillis() - lastDeviceEventTime[deviceid].milliseconds;
+ idle = GetTimeInMillis() - LastEventTime(deviceid).milliseconds;
XSyncIntsToValue(pValue_return, idle, 0);
}
@@ -2637,7 +2650,7 @@ IdleTimeBlockHandler(pointer pCounter, struct timeval **wt, pointer LastSelectMa
return;
old_idle = counter->value;
- IdleTimeQueryValue(NULL, &idle);
+ IdleTimeQueryValue(counter, &idle);
counter->value = idle; /* push, so CheckTrigger works */
if (less && XSyncValueLessOrEqual(idle, *less)) {
@@ -2699,6 +2712,17 @@ IdleTimeBlockHandler(pointer pCounter, struct timeval **wt, pointer LastSelectMa
}
static void
+IdleTimeCheckBrackets(SyncCounter *counter, XSyncValue idle, XSyncValue *less, XSyncValue *greater)
+{
+ if ((greater && XSyncValueGreaterOrEqual(idle, *greater)) ||
+ (less && XSyncValueLessOrEqual(idle, *less))) {
+ SyncChangeCounter(counter, idle);
+ }
+ else
+ SyncUpdateCounter(counter, idle);
+}
+
+static void
IdleTimeWakeupHandler(pointer pCounter, int rc, pointer LastSelectMask)
{
SyncCounter *counter = pCounter;
@@ -2712,10 +2736,24 @@ IdleTimeWakeupHandler(pointer pCounter, int rc, pointer LastSelectMask)
IdleTimeQueryValue(pCounter, &idle);
- if ((greater && XSyncValueGreaterOrEqual(idle, *greater)) ||
- (less && XSyncValueLessOrEqual(idle, *less))) {
- SyncChangeCounter(counter, idle);
+ /*
+ There is no guarantee for the WakeupHandler to be called within a specific
+ timeframe. Idletime may go to 0, but by the time we get here, it may be
+ non-zero and alarms for a pos. transition on 0 won't get triggered.
+ https://bugs.freedesktop.org/show_bug.cgi?id=70476
+ */
+ if (LastEventTimeWasReset(priv->deviceid)) {
+ LastEventTimeToggleResetFlag(priv->deviceid, FALSE);
+ if (!XSyncValueIsZero(idle)) {
+ XSyncValue zero;
+ XSyncIntsToValue(&zero, 0, 0);
+ IdleTimeCheckBrackets(counter, zero, less, greater);
+ less = priv->value_less;
+ greater = priv->value_greater;
+ }
}
+
+ IdleTimeCheckBrackets(counter, idle, less, greater);
}
static void
@@ -2733,6 +2771,9 @@ IdleTimeBracketValues(pointer pCounter, CARD64 * pbracket_less,
IdleTimeWakeupHandler, pCounter);
}
else if (!registered && (pbracket_less || pbracket_greater)) {
+ /* Reset flag must be zero so we don't force a idle timer reset on
+ the first wakeup */
+ LastEventTimeToggleResetAll(FALSE);
RegisterBlockAndWakeupHandlers(IdleTimeBlockHandler,
IdleTimeWakeupHandler, pCounter);
}
diff --git a/xorg-server/configure.ac b/xorg-server/configure.ac
index 67ef3c24a..7b4e70fe7 100644
--- a/xorg-server/configure.ac
+++ b/xorg-server/configure.ac
@@ -26,9 +26,9 @@ dnl
dnl Process this file with autoconf to create configure.
AC_PREREQ(2.60)
-AC_INIT([xorg-server], 1.14.99.2, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="2013-10-04"
-RELEASE_NAME="Chicory Coffee"
+AC_INIT([xorg-server], 1.14.99.3, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+RELEASE_DATE="2013-10-18"
+RELEASE_NAME="Bundaberg"
AC_CONFIG_SRCDIR([Makefile.am])
AM_INIT_AUTOMAKE([foreign dist-bzip2])
diff --git a/xorg-server/dix/dixfonts.c b/xorg-server/dix/dixfonts.c
index 22c236553..dd7700860 100644
--- a/xorg-server/dix/dixfonts.c
+++ b/xorg-server/dix/dixfonts.c
@@ -1459,6 +1459,7 @@ doImageText(ClientPtr client, ITclosurePtr c)
GC *pGC;
unsigned char *data;
ITclosurePtr new_closure;
+ ITclosurePtr old_closure;
/* We're putting the client to sleep. We need to
save some state. Similar problem to that handled
@@ -1470,12 +1471,14 @@ doImageText(ClientPtr client, ITclosurePtr c)
err = BadAlloc;
goto bail;
}
+ old_closure = c;
*new_closure = *c;
c = new_closure;
data = malloc(c->nChars * itemSize);
if (!data) {
free(c);
+ c = old_closure;
err = BadAlloc;
goto bail;
}
@@ -1486,6 +1489,7 @@ doImageText(ClientPtr client, ITclosurePtr c)
if (!pGC) {
free(c->data);
free(c);
+ c = old_closure;
err = BadAlloc;
goto bail;
}
@@ -1498,6 +1502,7 @@ doImageText(ClientPtr client, ITclosurePtr c)
FreeScratchGC(pGC);
free(c->data);
free(c);
+ c = old_closure;
err = BadAlloc;
goto bail;
}
diff --git a/xorg-server/dix/events.c b/xorg-server/dix/events.c
index 191a49377..f61c7c7eb 100644
--- a/xorg-server/dix/events.c
+++ b/xorg-server/dix/events.c
@@ -262,6 +262,11 @@ InputInfo inputInfo;
EventSyncInfoRec syncEvents;
+static struct DeviceEventTime {
+ Bool reset;
+ TimeStamp time;
+} lastDeviceEventTime[MAXDEVICES];
+
/**
* The root window the given device is currently on.
*/
@@ -1046,33 +1051,73 @@ XineramaGetCursorScreen(DeviceIntPtr pDev)
#define TIMESLOP (5 * 60 * 1000) /* 5 minutes */
static void
-MonthChangedOrBadTime(InternalEvent *ev)
+MonthChangedOrBadTime(CARD32 *ms)
{
/* If the ddx/OS is careless about not processing timestamped events from
* different sources in sorted order, then it's possible for time to go
* backwards when it should not. Here we ensure a decent time.
*/
- if ((currentTime.milliseconds - ev->any.time) > TIMESLOP)
+ if ((currentTime.milliseconds - *ms) > TIMESLOP)
currentTime.months++;
else
- ev->any.time = currentTime.milliseconds;
+ *ms = currentTime.milliseconds;
+}
+
+void
+NoticeTime(const DeviceIntPtr dev, TimeStamp time)
+{
+ lastDeviceEventTime[XIAllDevices].time = currentTime;
+ lastDeviceEventTime[dev->id].time = currentTime;
+
+ LastEventTimeToggleResetFlag(dev->id, TRUE);
+ LastEventTimeToggleResetFlag(XIAllDevices, TRUE);
}
static void
-NoticeTime(InternalEvent *ev, DeviceIntPtr dev)
+NoticeTimeMillis(const DeviceIntPtr dev, CARD32 *ms)
{
- if (ev->any.time < currentTime.milliseconds)
- MonthChangedOrBadTime(ev);
- currentTime.milliseconds = ev->any.time;
- lastDeviceEventTime[XIAllDevices] = currentTime;
- lastDeviceEventTime[dev->id] = currentTime;
+ TimeStamp time;
+ if (*ms < currentTime.milliseconds)
+ MonthChangedOrBadTime(ms);
+ time.months = currentTime.months;
+ time.milliseconds = *ms;
+ NoticeTime(dev, time);
}
void
NoticeEventTime(InternalEvent *ev, DeviceIntPtr dev)
{
if (!syncEvents.playingEvents)
- NoticeTime(ev, dev);
+ NoticeTimeMillis(dev, &ev->any.time);
+}
+
+TimeStamp
+LastEventTime(int deviceid)
+{
+ return lastDeviceEventTime[deviceid].time;
+}
+
+Bool
+LastEventTimeWasReset(int deviceid)
+{
+ return lastDeviceEventTime[deviceid].reset;
+}
+
+void
+LastEventTimeToggleResetFlag(int deviceid, Bool state)
+{
+ lastDeviceEventTime[deviceid].reset = state;
+}
+
+void
+LastEventTimeToggleResetAll(Bool state)
+{
+ DeviceIntPtr dev;
+ nt_list_for_each_entry(dev, inputInfo.devices, next) {
+ LastEventTimeToggleResetFlag(dev->id, FALSE);
+ }
+ LastEventTimeToggleResetFlag(XIAllDevices, FALSE);
+ LastEventTimeToggleResetFlag(XIAllMasterDevices, FALSE);
}
/**************************************************************************
@@ -1096,7 +1141,7 @@ EnqueueEvent(InternalEvent *ev, DeviceIntPtr device)
if (!xorg_list_is_empty(&syncEvents.pending))
tail = xorg_list_last_entry(&syncEvents.pending, QdEventRec, next);
- NoticeTime((InternalEvent *)event, device);
+ NoticeTimeMillis(device, &ev->any.time);
/* Fix for key repeating bug. */
if (device->key != NULL && device->key->xkbInfo != NULL &&
@@ -5281,8 +5326,12 @@ InitEvents(void)
inputInfo.pointer = (DeviceIntPtr) NULL;
for (i = 0; i < MAXDEVICES; i++) {
+ DeviceIntRec dummy;
memcpy(&event_filters[i], default_filter, sizeof(default_filter));
- lastDeviceEventTime[i] = currentTime;
+
+ dummy.id = i;
+ NoticeTime(&dummy, currentTime);
+ LastEventTimeToggleResetFlag(i, FALSE);
}
syncEvents.replayDev = (DeviceIntPtr) NULL;
diff --git a/xorg-server/dix/globals.c b/xorg-server/dix/globals.c
index 332b91f5c..ad9145b01 100644
--- a/xorg-server/dix/globals.c
+++ b/xorg-server/dix/globals.c
@@ -122,7 +122,6 @@ Bool party_like_its_1989 = FALSE;
Bool whiteRoot = FALSE;
TimeStamp currentTime;
-TimeStamp lastDeviceEventTime[MAXDEVICES];
int defaultColorVisualClass = -1;
int monitorResolution = 0;
diff --git a/xorg-server/dix/window.c b/xorg-server/dix/window.c
index 804b54c32..112417ebf 100644
--- a/xorg-server/dix/window.c
+++ b/xorg-server/dix/window.c
@@ -3092,9 +3092,7 @@ dixSaveScreens(ClientPtr client, int on, int mode)
DeviceIntPtr dev;
UpdateCurrentTimeIf();
nt_list_for_each_entry(dev, inputInfo.devices, next)
- lastDeviceEventTime[dev->id] = currentTime;
- lastDeviceEventTime[XIAllDevices] = currentTime;
- lastDeviceEventTime[XIAllMasterDevices] = currentTime;
+ NoticeTime(dev, currentTime);
}
SetScreenSaverTimer();
}
diff --git a/xorg-server/exa/exa_migration_mixed.c b/xorg-server/exa/exa_migration_mixed.c
index 5e0bf152a..cf66327b3 100644
--- a/xorg-server/exa/exa_migration_mixed.c
+++ b/xorg-server/exa/exa_migration_mixed.c
@@ -233,10 +233,13 @@ exaPrepareAccessReg_mixed(PixmapPtr pPixmap, int index, RegionPtr pReg)
pPixmap->drawable.pScreen,
pPixmap);
- DamageRegister(&pPixmap->drawable, pExaPixmap->pDamage);
- /* This ensures that pending damage reflects the current operation. */
- /* This is used by exa to optimize migration. */
- DamageSetReportAfterOp(pExaPixmap->pDamage, TRUE);
+ if (pExaPixmap->pDamage) {
+ DamageRegister(&pPixmap->drawable, pExaPixmap->pDamage);
+ /* This ensures that pending damage reflects the current
+ * operation. This is used by exa to optimize migration.
+ */
+ DamageSetReportAfterOp(pExaPixmap->pDamage, TRUE);
+ }
if (has_gpu_copy) {
exaPixmapDirty(pPixmap, 0, 0, pPixmap->drawable.width,
diff --git a/xorg-server/exa/exa_mixed.c b/xorg-server/exa/exa_mixed.c
index 3e2dcf263..b43dfec42 100644
--- a/xorg-server/exa/exa_mixed.c
+++ b/xorg-server/exa/exa_mixed.c
@@ -106,10 +106,13 @@ exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth,
pPixmap->drawable.pScreen,
pPixmap);
- DamageRegister(&pPixmap->drawable, pExaPixmap->pDamage);
- /* This ensures that pending damage reflects the current operation. */
- /* This is used by exa to optimize migration. */
- DamageSetReportAfterOp(pExaPixmap->pDamage, TRUE);
+ if (pExaPixmap->pDamage) {
+ DamageRegister(&pPixmap->drawable, pExaPixmap->pDamage);
+ /* This ensures that pending damage reflects the current
+ * operation. This is used by exa to optimize migration.
+ */
+ DamageSetReportAfterOp(pExaPixmap->pDamage, TRUE);
+ }
}
}
diff --git a/xorg-server/hw/dmx/glxProxy/glxsingle.c b/xorg-server/hw/dmx/glxProxy/glxsingle.c
index abfb880a3..679a302ea 100644
--- a/xorg-server/hw/dmx/glxProxy/glxsingle.c
+++ b/xorg-server/hw/dmx/glxProxy/glxsingle.c
@@ -349,25 +349,29 @@ __glXForwardAllWithReply(__GLXclientState * cl, GLbyte * pc)
* get the reply from the back-end server
*/
_XReply(dpy, (xReply *) &be_reply, 0, False);
- be_buf_size = be_reply.length << 2;
- if (be_buf_size > 0) {
- be_buf = (char *) malloc(be_buf_size);
- if (be_buf) {
- _XRead(dpy, be_buf, be_buf_size);
+ if (s == from_screen) {
+ /* Save data from last reply to send on to client */
+ be_buf_size = be_reply.length << 2;
+ if (be_buf_size > 0) {
+ be_buf = malloc(be_buf_size);
+ if (be_buf) {
+ _XRead(dpy, be_buf, be_buf_size);
+ }
+ else {
+ /* Throw data on the floor */
+ _XEatDataWords(dpy, be_reply.length);
+ return BadAlloc;
+ }
}
- else {
- /* Throw data on the floor */
+ }
+ else {
+ /* Just discard data from all replies before the last one */
+ if (be_reply.length > 0)
_XEatDataWords(dpy, be_reply.length);
- return BadAlloc;
- }
}
UnlockDisplay(dpy);
SyncHandle();
-
- if (s > from_screen && be_buf_size > 0) {
- free(be_buf);
- }
}
/*
diff --git a/xorg-server/hw/dmx/glxProxy/glxvendor.c b/xorg-server/hw/dmx/glxProxy/glxvendor.c
index 50d505c4b..b475daf0f 100644
--- a/xorg-server/hw/dmx/glxProxy/glxvendor.c
+++ b/xorg-server/hw/dmx/glxProxy/glxvendor.c
@@ -332,25 +332,29 @@ __glXVForwardAllWithReply(__GLXclientState * cl, GLbyte * pc)
* get the reply from the back-end server
*/
_XReply(dpy, (xReply *) &be_reply, 0, False);
- be_buf_size = be_reply.length << 2;
- if (be_buf_size > 0) {
- be_buf = (char *) malloc(be_buf_size);
- if (be_buf) {
- _XRead(dpy, be_buf, be_buf_size);
+ if (s == from_screen) {
+ /* Save data from last reply to send on to client */
+ be_buf_size = be_reply.length << 2;
+ if (be_buf_size > 0) {
+ be_buf = malloc(be_buf_size);
+ if (be_buf) {
+ _XRead(dpy, be_buf, be_buf_size);
+ }
+ else {
+ /* Throw data on the floor */
+ _XEatDataWords(dpy, be_reply.length);
+ return BadAlloc;
+ }
}
- else {
- /* Throw data on the floor */
+ }
+ else {
+ /* Just discard data from all replies before the last one */
+ if (be_reply.length > 0)
_XEatDataWords(dpy, be_reply.length);
- return BadAlloc;
- }
}
UnlockDisplay(dpy);
SyncHandle();
-
- if (s > from_screen && be_buf_size > 0) {
- free(be_buf);
- }
}
/*
diff --git a/xorg-server/hw/xfree86/dixmods/Makefile.am b/xorg-server/hw/xfree86/dixmods/Makefile.am
index 9933bc88d..3c43640ec 100644
--- a/xorg-server/hw/xfree86/dixmods/Makefile.am
+++ b/xorg-server/hw/xfree86/dixmods/Makefile.am
@@ -32,7 +32,7 @@ libglx_la_LIBADD = $(top_builddir)/glx/libglx.la $(GLX_SYS_LIBS)
if AIGLX_DRI_LOADER
libglx_la_LIBADD += $(top_builddir)/glx/libglxdri.la
if NO_UNDEFINED
-libglx_la_LIBADD += ../dri/libdri.la ../dri2/libdri2.la
+libglx_la_LIBADD += $(LIBDRM_LIBS) $(PIXMAN_LIBS)
endif
endif
libglx_la_SOURCES = glxmodule.c
diff --git a/xorg-server/include/dix.h b/xorg-server/include/dix.h
index 171e56e11..fa7ccd4a3 100644
--- a/xorg-server/include/dix.h
+++ b/xorg-server/include/dix.h
@@ -315,8 +315,19 @@ extern _X_EXPORT WindowPtr
GetSpriteWindow(DeviceIntPtr pDev);
extern _X_EXPORT void
+NoticeTime(const DeviceIntPtr dev,
+ TimeStamp time);
+extern _X_EXPORT void
NoticeEventTime(InternalEvent *ev,
DeviceIntPtr dev);
+extern _X_EXPORT TimeStamp
+LastEventTime(int deviceid);
+extern _X_EXPORT Bool
+LastEventTimeWasReset(int deviceid);
+extern _X_EXPORT void
+LastEventTimeToggleResetFlag(int deviceid, Bool state);
+extern _X_EXPORT void
+LastEventTimeToggleResetAll(Bool state);
extern void
EnqueueEvent(InternalEvent * /* ev */ ,
diff --git a/xorg-server/include/dixstruct.h b/xorg-server/include/dixstruct.h
index 7226760e9..7065b0456 100644
--- a/xorg-server/include/dixstruct.h
+++ b/xorg-server/include/dixstruct.h
@@ -144,7 +144,6 @@ typedef struct _WorkQueue {
} WorkQueueRec;
extern _X_EXPORT TimeStamp currentTime;
-extern _X_EXPORT TimeStamp lastDeviceEventTime[MAXDEVICES];
extern _X_EXPORT int
CompareTimeStamps(TimeStamp /*a */ ,
diff --git a/xorg-server/os/WaitFor.c b/xorg-server/os/WaitFor.c
index 95762ef18..fc02b572f 100644
--- a/xorg-server/os/WaitFor.c
+++ b/xorg-server/os/WaitFor.c
@@ -567,7 +567,7 @@ NextDPMSTimeout(INT32 timeout)
static CARD32
ScreenSaverTimeoutExpire(OsTimerPtr timer, CARD32 now, pointer arg)
{
- INT32 timeout = now - lastDeviceEventTime[XIAllDevices].milliseconds;
+ INT32 timeout = now - LastEventTime(XIAllDevices).milliseconds;
CARD32 nextTimeout = 0;
#ifdef DPMSExtension
diff --git a/xorg-server/os/xdmcp.c b/xorg-server/os/xdmcp.c
index 66c846d44..c18e90248 100644
--- a/xorg-server/os/xdmcp.c
+++ b/xorg-server/os/xdmcp.c
@@ -1481,7 +1481,7 @@ recv_alive_msg(unsigned length)
if (SessionRunning && AliveSessionID == SessionID) {
/* backoff dormancy period */
state = XDM_RUN_SESSION;
- if ((GetTimeInMillis() - lastDeviceEventTime[XIAllDevices].milliseconds) >
+ if ((GetTimeInMillis() - LastEventTime(XIAllDevices).milliseconds) >
keepaliveDormancy * 1000) {
keepaliveDormancy <<= 1;
if (keepaliveDormancy > XDM_MAX_DORMANCY)
diff --git a/xorg-server/xkeyboard-config/Makefile.am b/xorg-server/xkeyboard-config/Makefile.am
index e0b3168bc..4cc825416 100644
--- a/xorg-server/xkeyboard-config/Makefile.am
+++ b/xorg-server/xkeyboard-config/Makefile.am
@@ -12,7 +12,7 @@ EXTRA_DIST=config.rpath COPYING README \
DISTCLEANFILES=intltool-extract intltool-merge intltool-update
-# ACLOCAL_AMFLAGS = -I m4
+ACLOCAL_AMFLAGS = -I m4
sync-po:
rsync -Lrtvz translationproject.org::tp/latest/xkeyboard-config/ po
diff --git a/xorg-server/xkeyboard-config/rules/base.xml.in b/xorg-server/xkeyboard-config/rules/base.xml.in
index 874b52eb6..64714675b 100644
--- a/xorg-server/xkeyboard-config/rules/base.xml.in
+++ b/xorg-server/xkeyboard-config/rules/base.xml.in
@@ -2528,10 +2528,11 @@
</variant>
<variant>
<configItem>
- <name>uig</name>
+ <name>ug</name>
+ <_shortDescription>ug</_shortDescription>
<_description>Uyghur</_description>
<languageList>
- <iso639Id>uig</iso639Id>
+ <iso639Id>ug</iso639Id>
</languageList>
</configItem>
</variant>
@@ -4411,7 +4412,7 @@
<variant>
<configItem>
<name>rue</name>
- <_description>Pannonian Rusyn (homophonic)</_description>
+ <_description>Pannonian Rusyn</_description>
<languageList>
<iso639Id>rue</iso639Id>
</languageList>
diff --git a/xorg-server/xkeyboard-config/symbols/cn b/xorg-server/xkeyboard-config/symbols/cn
index e6b2c525e..8c2ffe422 100644
--- a/xorg-server/xkeyboard-config/symbols/cn
+++ b/xorg-server/xkeyboard-config/symbols/cn
@@ -149,32 +149,21 @@ xkb_symbols "tib_asciinum" {
key <AE10> { [ 0, 0x1000f20, 0x1000f08, 0x1000f12 ] }; # 0 ༠ ༈ ༒
};
-// Uyghur Standard Keyboard map for XKB/X.org
+// Uyghur Standard Keyboard Map for XKB/X.Org
//
-// xkb version originally created by
-// Abdusalam Abdurahman <Abdusalam.Abdurahman@gmail.com>
-// slightly corrected according to feedback and submitted by
+// XKB version in collaboration by Muhemmed Abdullah <muhammad@yulghun.com>,
+// Abdussalam Abdurrahman <abdusalam.abdurahman@gmail.com>, and
// Ekrem Tomur <ekrem.tomur@gmail.com>
-partial alphanumeric_keys
-xkb_symbols "uig" {
+partial alphanumeric_keys
+xkb_symbols "ug" {
+ include "us(basic)"
name[Group1]= "Uyghur";
- key <TLDE> { [ grave, asciitilde ] };
-
- key <AE01> { [ 1, exclam ] }; // 1 !
- key <AE02> { [ 2, at ] }; // 2 @
- key <AE03> { [ 3, numbersign ] }; // 3 #
- key <AE04> { [ 4, dollar ] }; // 4 $
- key <AE05> { [ 5, percent ] }; // 5 %
- key <AE06> { [ 6, asciicircum ] }; // 6 ^
- key <AE07> { [ 7, ampersand ] }; // 7 &
- key <AE08> { [ 8, asterisk ] }; // 8 *
key <AE09> { [ 9, parenright ] }; // 9 )
key <AE10> { [ 0, parenleft ] }; // 0 (
key <AE11> { [ minus, 0x1002014 ] }; // - —
- key <AE12> { [ equal, plus ] }; // = +
key <AD01> { [ 0x1000686, VoidSymbol ] }; // چ
key <AD02> { [ 0x10006cb, VoidSymbol ] }; // ۋ
@@ -199,7 +188,6 @@ xkb_symbols "uig" {
key <AC08> { [ 0x1000643, 0x10006c6 ] }; // ك ۆ
key <AC09> { [ 0x1000644, VoidSymbol ] }; // ل
key <AC10> { [ Arabic_semicolon, colon ] }; // ؛ :
- key <AC11> { [ apostrophe, quotedbl ] }; // ' "
key <AB01> { [ 0x1000632, VoidSymbol ] }; // ز
key <AB02> { [ 0x1000634, VoidSymbol ] }; // ش
@@ -211,6 +199,4 @@ xkb_symbols "uig" {
key <AB08> { [ Arabic_comma, 0x100203a ] }; // ، ›
key <AB09> { [ period, 0x1002039 ] }; // . ‹
key <AB10> { [ 0x1000626, Arabic_question_mark ] }; // ئ ؟
-
- key <BKSL> { [ backslash, bar ] }; // \ |
};
diff --git a/xorg-server/xkeyboard-config/symbols/rs b/xorg-server/xkeyboard-config/symbols/rs
index 22ff2dae8..86b54632a 100644
--- a/xorg-server/xkeyboard-config/symbols/rs
+++ b/xorg-server/xkeyboard-config/symbols/rs
@@ -300,30 +300,28 @@ xkb_symbols "latinalternatequotes" {
};
xkb_symbols "rue" {
- // Homophonic layout for Pannonian Rusyn (spoken mainly in Serbia and
- // Croatia by the Rusyn people), based on Ukrainian homophonic.
- // Author: Ljubomir J. Papuga (Любомир Я. Папуґа) <papuga.rs@gmail.com>
-
- name[Group1]= "Pannonian Rusyn (homophonic)";
-
- include "ua(homophonic)"
-
- key <TLDE> { [ grave, asciitilde ] };
- key <AE03> { [ 3, doublelowquotemark ] };
- key <AE04> { [ 4, rightdoublequotemark ] };
- key <AE07> { [ 7, EuroSign ] };
- key <AE11> { [ 0x002D, emdash ] };
- key <AE12> { [ equal, plus ] };
-
- key <AD02> { [ Ukrainian_ie, Ukrainian_IE ] };
- key <AD06> { [ Cyrillic_yu, Cyrillic_YU ] };
- key <AD08> { [ Cyrillic_i, Cyrillic_I ] };
- key <AD11> { [ Cyrillic_sha, Cyrillic_SHA ] };
- key <AD12> { [ Cyrillic_shcha, Cyrillic_SHCHA ] };
-
- key <LSGT> { [ Ukrainian_yi, Ukrainian_YI ] };
- key <AB08> { [ comma, semicolon ] };
- key <AB09> { [ period, colon ] };
+ // Layout for Pannonian Rusyn (spoken mainly in Serbia and
+ // Croatia by the Rusyn people), based on Serbian Cyrillic layout.
+ // Authors:
+ // Ljubomir J. Papuga (Любомир Я. Папуґа) <papuga@zoho.com>
+ // Mihajlo Hornjak <smeceiotpad@gmail.com>
+
+ name[Group1]= "Pannonian Rusyn";
+
+ include "rs(basic)"
+
+ key <TLDE> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] }; // `
+
+ key <AD01> { [ Cyrillic_ya, Cyrillic_YA ] }; // q
+ key <AD02> { [ Ukrainian_ie, Ukrainian_IE ] }; // w
+ key <AD12> { [ Cyrillic_shcha, Cyrillic_SHCHA ] }; // ]
+
+ key <AC05> { [ Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN ] }; // g
+ key <AC07> { [ Cyrillic_shorti, Cyrillic_SHORTI ] }; // j
+ key <AC11> { [ Cyrillic_ghe, Cyrillic_GHE ] }; // '
+
+ key <AB01> { [ Cyrillic_yu, Cyrillic_YU ] }; // z
+ key <AB02> { [ Ukrainian_yi, Ukrainian_YI ] }; // x
};
// EXTRAS: