xkb: Add XkbCopySrvLedInfo, deep-copies a XkbSrvLedInfoRec.

This commit is contained in:
Peter Hutterer 2008-04-13 08:27:31 +09:30
parent b4380d8030
commit 4219e94c2f
2 changed files with 47 additions and 0 deletions

View File

@ -576,6 +576,14 @@ extern XkbSrvLedInfoPtr XkbAllocSrvLedInfo(
unsigned int /* needed_parts */
);
extern XkbSrvLedInfoPtr XkbCopySrvLedInfo(
DeviceIntPtr /* dev */,
XkbSrvLedInfoPtr /* src */,
KbdFeedbackPtr /* kf */,
LedFeedbackPtr /* lf */
);
extern XkbSrvLedInfoPtr XkbFindSrvLedInfo(
DeviceIntPtr /* dev */,
unsigned int /* class */,

View File

@ -615,6 +615,45 @@ XkbFreeSrvLedInfo(XkbSrvLedInfoPtr sli)
return;
}
/*
* XkbSrvLedInfoPtr
* XkbCopySrvLedInfo(dev,src,kf,lf)
*
* Takes the given XkbSrvLedInfoPtr and duplicates it. A deep copy is made,
* thus the new copy behaves like the original one and can be freed with
* XkbFreeSrvLedInfo.
*/
XkbSrvLedInfoPtr
XkbCopySrvLedInfo( DeviceIntPtr from,
XkbSrvLedInfoPtr src,
KbdFeedbackPtr kf,
LedFeedbackPtr lf)
{
XkbSrvLedInfoPtr sli_new;
if (!src)
goto finish;
sli_new = _XkbTypedCalloc(1, XkbSrvLedInfoRec);
if (!sli_new)
goto finish;
memcpy(src, sli_new, sizeof(XkbSrvLedInfoRec));
if (sli_new->class == KbdFeedbackClass)
sli_new->fb.kf = kf;
else
sli_new->fb.lf = lf;
if (sli_new->flags & XkbSLI_IsDefault) {
sli_new->names= _XkbTypedCalloc(XkbNumIndicators,Atom);
sli_new->maps= _XkbTypedCalloc(XkbNumIndicators,XkbIndicatorMapRec);
} /* else sli_new->names/maps is pointing to
dev->key->xkbInfo->desc->names->indicators;
dev->key->xkbInfo->desc->names->indicators; */
finish:
return sli_new;
}
/***====================================================================***/