Merge remote branch 'whot/for-keith'

This commit is contained in:
Keith Packard 2011-02-18 12:20:26 -08:00
commit 816d67de2b
9 changed files with 76 additions and 32 deletions

View File

@ -701,7 +701,7 @@ XIDeleteDeviceProperty (DeviceIntPtr device, Atom property, Bool fromClient)
int
XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
int format, int mode, unsigned long len,
pointer value, Bool sendevent)
const pointer value, Bool sendevent)
{
XIPropertyPtr prop;
int size_in_bytes;

View File

@ -129,7 +129,7 @@ ProcXIQueryPointer(ClientPtr client)
if (kbd)
{
state = &kbd->key->xkbInfo->prev_state;
state = &kbd->key->xkbInfo->state;
rep.mods.base_mods = state->base_mods;
rep.mods.latched_mods = state->latched_mods;
rep.mods.locked_mods = state->locked_mods;

View File

@ -808,7 +808,7 @@ InitInput(int argc, char **argv)
GetEventList(&xf86Events);
/* Call the PreInit function for each input device instance. */
/* Initialize all configured input devices */
for (pDev = xf86ConfigLayout.inputs; pDev && *pDev; pDev++) {
/* Replace obsolete keyboard driver with kbd */
if (!xf86NameCmp((*pDev)->driver, "keyboard")) {

View File

@ -69,7 +69,7 @@ extern _X_EXPORT int XIChangeDeviceProperty(
int /* format*/,
int /* mode*/,
unsigned long /* len*/,
pointer /* value*/,
const pointer /* value*/,
Bool /* sendevent*/
);

View File

@ -35,7 +35,7 @@ RRClientKnowsRates (ClientPtr pClient)
static int
ProcRRQueryVersion (ClientPtr client)
{
xRRQueryVersionReply rep;
xRRQueryVersionReply rep = {0};
register int n;
REQUEST(xRRQueryVersionReq);
rrClientPriv(client);

View File

@ -288,7 +288,7 @@ int
ProcRRCreateMode (ClientPtr client)
{
REQUEST(xRRCreateModeReq);
xRRCreateModeReply rep;
xRRCreateModeReply rep = {0};
WindowPtr pWin;
ScreenPtr pScreen;
rrScrPrivPtr pScrPriv;

View File

@ -1045,7 +1045,7 @@ XFixesCursorInit (void)
ScreenPtr pScreen = screenInfo.screens[i];
CursorScreenPtr cs;
cs = (CursorScreenPtr) malloc(sizeof (CursorScreenRec));
cs = (CursorScreenPtr) calloc(1, sizeof (CursorScreenRec));
if (!cs)
return FALSE;
Wrap (cs, pScreen, CloseScreen, CursorCloseScreen);

View File

@ -425,34 +425,78 @@ XkbRF_RulesPtr rules;
return complete;
}
XkbDescPtr
XkbCompileKeymap(DeviceIntPtr dev, XkbRMLVOSet *rmlvo)
static Bool
XkbRMLVOtoKcCGST(DeviceIntPtr dev, XkbRMLVOSet *rmlvo, XkbComponentNamesPtr kccgst)
{
XkbComponentNamesRec kccgst;
XkbRF_VarDefsRec mlvo;
XkbDescPtr xkb;
char name[PATH_MAX];
if (!dev || !rmlvo) {
LogMessage(X_ERROR, "XKB: No device or RMLVO specified\n");
return NULL;
}
mlvo.model = rmlvo->model;
mlvo.layout = rmlvo->layout;
mlvo.variant = rmlvo->variant;
mlvo.options = rmlvo->options;
/* XDNFR already logs for us. */
if (!XkbDDXNamesFromRules(dev, rmlvo->rules, &mlvo, &kccgst))
return XkbDDXNamesFromRules(dev, rmlvo->rules, &mlvo, kccgst);
}
/**
* Compile the given RMLVO keymap and return it. Returns the XkbDescPtr on
* success or NULL on failure. If the components compiled are not a superset
* or equal to need, the compiliation is treated as failure.
*/
static XkbDescPtr
XkbCompileKeymapForDevice(DeviceIntPtr dev, XkbRMLVOSet *rmlvo, int need)
{
XkbDescPtr xkb;
unsigned int provided;
XkbComponentNamesRec kccgst;
char name[PATH_MAX];
if (!XkbRMLVOtoKcCGST(dev, rmlvo, &kccgst))
return NULL;
/* XDLKBN too, but it might return 0 as well as allocating. */
if (!XkbDDXLoadKeymapByNames(dev, &kccgst, XkmAllIndicesMask, 0, &xkb, name,
PATH_MAX)) {
if (xkb)
provided = XkbDDXLoadKeymapByNames(dev, &kccgst, XkmAllIndicesMask, need,
&xkb, name, PATH_MAX);
if ((need & provided) != need) {
if (xkb) {
XkbFreeKeyboard(xkb, 0, TRUE);
return NULL;
xkb = NULL;
}
}
return xkb;
}
XkbDescPtr
XkbCompileKeymap(DeviceIntPtr dev, XkbRMLVOSet *rmlvo)
{
XkbDescPtr xkb;
unsigned int need;
if (!dev || !rmlvo) {
LogMessage(X_ERROR, "XKB: No device or RMLVO specified\n");
return NULL;
}
/* These are the components we really really need */
need = XkmSymbolsMask | XkmCompatMapMask | XkmTypesMask |
XkmKeyNamesMask | XkmVirtualModsMask;
xkb = XkbCompileKeymapForDevice(dev, rmlvo, need);
if (!xkb) {
XkbRMLVOSet dflts;
/* we didn't get what we really needed. And that will likely leave
* us with a keyboard that doesn't work. Use the defaults instead */
LogMessage(X_ERROR, "XKB: Failed to load keymap. Loading default "
"keymap instead.\n");
XkbGetRulesDflts(&dflts);
xkb = XkbCompileKeymapForDevice(dev, &dflts, 0);
XkbFreeRMLVOSet(&dflts, FALSE);
}
return xkb;

View File

@ -3644,7 +3644,7 @@ register int n;
swapl(&rep->indicators,n);
}
start = desc = malloc(length);
start = desc = calloc(1, length);
if ( !start )
return BadAlloc;
if (xkb->names) {
@ -5569,13 +5569,13 @@ ProcXkbGetKbdByName(ClientPtr client)
{
DeviceIntPtr dev;
DeviceIntPtr tmpd;
xkbGetKbdByNameReply rep;
xkbGetMapReply mrep;
xkbGetCompatMapReply crep;
xkbGetIndicatorMapReply irep;
xkbGetNamesReply nrep;
xkbGetGeometryReply grep;
XkbComponentNamesRec names;
xkbGetKbdByNameReply rep = {0};
xkbGetMapReply mrep = {0};
xkbGetCompatMapReply crep = {0};
xkbGetIndicatorMapReply irep = {0};
xkbGetNamesReply nrep = {0};
xkbGetGeometryReply grep = {0};
XkbComponentNamesRec names = {0};
XkbDescPtr xkb, new;
unsigned char * str;
char mapFile[PATH_MAX];