Merge remote-tracking branch 'whot/for-keith'

This commit is contained in:
Keith Packard 2014-06-02 11:22:48 -07:00
commit ab47ec9636
5 changed files with 40 additions and 52 deletions

View File

@ -661,6 +661,8 @@ void
DeepCopyDeviceClasses(DeviceIntPtr from, DeviceIntPtr to, DeepCopyDeviceClasses(DeviceIntPtr from, DeviceIntPtr to,
DeviceChangedEvent *dce) DeviceChangedEvent *dce)
{ {
OsBlockSIGIO();
/* generic feedback classes, not tied to pointer and/or keyboard */ /* generic feedback classes, not tied to pointer and/or keyboard */
DeepCopyFeedbackClasses(from, to); DeepCopyFeedbackClasses(from, to);
@ -668,6 +670,8 @@ DeepCopyDeviceClasses(DeviceIntPtr from, DeviceIntPtr to,
DeepCopyKeyboardClasses(from, to); DeepCopyKeyboardClasses(from, to);
if ((dce->flags & DEVCHANGE_POINTER_EVENT)) if ((dce->flags & DEVCHANGE_POINTER_EVENT))
DeepCopyPointerClasses(from, to); DeepCopyPointerClasses(from, to);
OsReleaseSIGIO();
} }
/** /**

View File

@ -19,22 +19,6 @@ Section "InputClass"
Option "IgnoreRelativeAxes" "off" Option "IgnoreRelativeAxes" "off"
EndSection EndSection
# https://bugzilla.redhat.com/show_bug.cgi?id=612140
# please make Evoluent VerticalMouse 3 work out of the box
# Button mapping on this mouse is quirky
Section "InputClass"
Identifier "Evoluent VerticalMouse 3"
MatchProduct "Evoluent VerticalMouse 3"
# Sets following configuration:
# top button: left
# middle button: middle
# bottom button: right
# wheel click: middle
# thumb button: 8 (back)
Option "ButtonMapping" "1 2 2 4 5 6 7 3 8"
EndSection
# https://bugs.freedesktop.org/show_bug.cgi?id=55867 # https://bugs.freedesktop.org/show_bug.cgi?id=55867
# Bug 55867 - Doesn't know how to tag XI_TRACKBALL # Bug 55867 - Doesn't know how to tag XI_TRACKBALL
Section "InputClass" Section "InputClass"

View File

@ -97,7 +97,7 @@ Section "ServerFlags"
# Uncomment this to disable the <Ctrl><Alt><BS> server abort sequence # Uncomment this to disable the <Ctrl><Alt><BS> server abort sequence
# This allows clients to receive this key event. # This allows clients to receive this key event.
# Option "DontZap" "false" # Option "DontZap" "true"
# Uncomment this to disable the <Ctrl><Alt><KP_+>/<KP_-> mode switching # Uncomment this to disable the <Ctrl><Alt><KP_+>/<KP_-> mode switching
# sequences. This allows clients to receive these key events. # sequences. This allows clients to receive these key events.

View File

@ -223,9 +223,8 @@ turns on auto-repeat.
.B -retro .B -retro
starts the stipple with the classic stipple and cursor visible. The default starts the stipple with the classic stipple and cursor visible. The default
is to start with a black root window, and to suppress display of the cursor is to start with a black root window, and to suppress display of the cursor
until the first time an application calls XDefineCursor(). For the Xorg until the first time an application calls XDefineCursor(). For kdrive
server, this also sets the default for the DontZap option to FALSE. For servers, this implies -zap.
kdrive servers, this implies -zap.
.TP 8 .TP 8
.B \-s \fIminutes\fP .B \-s \fIminutes\fP
sets screen-saver timeout time in minutes. sets screen-saver timeout time in minutes.

View File

@ -342,7 +342,7 @@ out:
* which directives you use. * which directives you use.
*/ */
static int static int
pnprintf(char *string, size_t size, const char *f, va_list args) vpnprintf(char *string, int size_in, const char *f, va_list args)
{ {
int f_idx = 0; int f_idx = 0;
int s_idx = 0; int s_idx = 0;
@ -353,6 +353,7 @@ pnprintf(char *string, size_t size, const char *f, va_list args)
int i; int i;
uint64_t ui; uint64_t ui;
int64_t si; int64_t si;
size_t size = size_in;
for (; f_idx < f_len && s_idx < size - 1; f_idx++) { for (; f_idx < f_len && s_idx < size - 1; f_idx++) {
int length_modifier = 0; int length_modifier = 0;
@ -484,6 +485,19 @@ pnprintf(char *string, size_t size, const char *f, va_list args)
return s_idx; return s_idx;
} }
static int
pnprintf(char *string, int size, const char *f, ...)
{
int rc;
va_list args;
va_start(args, f);
rc = vpnprintf(string, size, f, args);
va_end(args);
return rc;
}
/* This function does the actual log message writes. It must be signal safe. /* This function does the actual log message writes. It must be signal safe.
* When attempting to call non-signal-safe functions, guard them with a check * When attempting to call non-signal-safe functions, guard them with a check
* of the inSignalContext global variable. */ * of the inSignalContext global variable. */
@ -597,7 +611,6 @@ LogMessageTypeVerbString(MessageType type, int verb)
void void
LogVMessageVerb(MessageType type, int verb, const char *format, va_list args) LogVMessageVerb(MessageType type, int verb, const char *format, va_list args)
{ {
static unsigned int warned;
const char *type_str; const char *type_str;
char buf[1024]; char buf[1024];
const size_t size = sizeof(buf); const size_t size = sizeof(buf);
@ -605,17 +618,8 @@ LogVMessageVerb(MessageType type, int verb, const char *format, va_list args)
size_t len = 0; size_t len = 0;
if (inSignalContext) { if (inSignalContext) {
if (warned < 3) { LogVMessageVerbSigSafe(type, verb, format, args);
BUG_WARN_MSG(inSignalContext, return;
"Warning: attempting to log data in a signal unsafe "
"manner while in signal context.\nPlease update to check "
"inSignalContext and/or use LogMessageVerbSigSafe() or "
"ErrorFSigSafe().\nThe offending log format message is:\n"
"%s\n", format);
warned++;
if (warned == 3)
LogMessageVerbSigSafe(X_WARNING, -1, "Warned %u times about sigsafe logging. Will be quiet now.\n", warned);
}
} }
type_str = LogMessageTypeVerbString(type, verb); type_str = LogMessageTypeVerbString(type, verb);
@ -687,7 +691,7 @@ LogVMessageVerbSigSafe(MessageType type, int verb, const char *format, va_list a
LogSWrite(verb, " ", 1, FALSE); LogSWrite(verb, " ", 1, FALSE);
} }
len = pnprintf(buf, sizeof(buf), format, args); len = vpnprintf(buf, sizeof(buf), format, args);
/* Force '\n' at end of truncated line */ /* Force '\n' at end of truncated line */
if (sizeof(buf) - len == 1) if (sizeof(buf) - len == 1)
@ -701,40 +705,37 @@ void
LogVHdrMessageVerb(MessageType type, int verb, const char *msg_format, LogVHdrMessageVerb(MessageType type, int verb, const char *msg_format,
va_list msg_args, const char *hdr_format, va_list hdr_args) va_list msg_args, const char *hdr_format, va_list hdr_args)
{ {
static unsigned int warned;
const char *type_str; const char *type_str;
char buf[1024]; char buf[1024];
const size_t size = sizeof(buf); const size_t size = sizeof(buf);
Bool newline; Bool newline;
size_t len = 0; size_t len = 0;
int (*vprintf_func)(char *, int, const char* _X_RESTRICT_KYWD f, va_list args)
if (inSignalContext) { _X_ATTRIBUTE_PRINTF(3, 0);
if (warned < 3) { int (*printf_func)(char *, int, const char* _X_RESTRICT_KYWD f, ...)
BUG_WARN_MSG(inSignalContext, _X_ATTRIBUTE_PRINTF(3, 4);
"Warning: attempting to log data in a signal unsafe "
"manner while in signal context.\nPlease update to check "
"inSignalContext and/or use LogMessageVerbSigSafe().\nThe "
"offending header and log message formats are:\n%s %s\n",
hdr_format, msg_format);
warned++;
if (warned == 3)
LogMessageVerbSigSafe(X_WARNING, -1, "Warned %u times about sigsafe logging. Will be quiet now.\n", warned);
}
}
type_str = LogMessageTypeVerbString(type, verb); type_str = LogMessageTypeVerbString(type, verb);
if (!type_str) if (!type_str)
return; return;
if (inSignalContext) {
vprintf_func = vpnprintf;
printf_func = pnprintf;
} else {
vprintf_func = Xvscnprintf;
printf_func = Xscnprintf;
}
/* if type_str is not "", prepend it and ' ', to message */ /* if type_str is not "", prepend it and ' ', to message */
if (type_str[0] != '\0') if (type_str[0] != '\0')
len += Xscnprintf(&buf[len], size - len, "%s ", type_str); len += printf_func(&buf[len], size - len, "%s ", type_str);
if (hdr_format && size - len > 1) if (hdr_format && size - len > 1)
len += Xvscnprintf(&buf[len], size - len, hdr_format, hdr_args); len += vprintf_func(&buf[len], size - len, hdr_format, hdr_args);
if (msg_format && size - len > 1) if (msg_format && size - len > 1)
len += Xvscnprintf(&buf[len], size - len, msg_format, msg_args); len += vprintf_func(&buf[len], size - len, msg_format, msg_args);
/* Force '\n' at end of truncated line */ /* Force '\n' at end of truncated line */
if (size - len == 1) if (size - len == 1)