xkb: Add XkbCopySrvLedInfo, deep-copies a XkbSrvLedInfoRec.
This commit is contained in:
parent
b4380d8030
commit
4219e94c2f
|
@ -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 */,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/***====================================================================***/
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user