summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Wettstein <wettstein509@solnet.ch>2014-02-15 17:35:09 +0100
committerAlan Coopersmith <alan.coopersmith@oracle.com>2016-01-01 18:38:57 -0800
commit6223ec08213cb8cc546418690c27e0fdd4f0addd (patch)
tree40ed4a8e0f104fddd94d21885dc7584fc49257d8
parentde4f2307448583988a55a587cb6a3f43e4868378 (diff)
downloadxorg-lib-libxkbfile-6223ec08213cb8cc546418690c27e0fdd4f0addd.tar.gz
Add missing support for NoLock and NoUnlock flags
The LockMods, ISOLock and LockControls support an "affect" flag to selectively enable and disable locking and unlocking for these actions. This change adds output of these flags. Signed-off-by: Andreas Wettstein <wettstein509@solnet.ch> Reviewed-By: Ran Benita <ran234@gmail.com> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
-rw-r--r--src/xkbtext.c48
1 files changed, 46 insertions, 2 deletions
diff --git a/src/xkbtext.c b/src/xkbtext.c
index b5d4750..bf992e4 100644
--- a/src/xkbtext.c
+++ b/src/xkbtext.c
@@ -886,8 +886,22 @@ CopyModActionArgs(Display *dpy, XkbDescPtr xkb, XkbAction *action,
}
else
TryCopyStr(buf, "none", sz);
- if (act->type == XkbSA_LockMods)
+ if (act->type == XkbSA_LockMods) {
+ switch (act->flags & (XkbSA_LockNoUnlock | XkbSA_LockNoLock)) {
+ case XkbSA_LockNoLock:
+ TryCopyStr(buf, ",affect=unlock", sz);
+ break;
+ case XkbSA_LockNoUnlock:
+ TryCopyStr(buf, ",affect=lock", sz);
+ break;
+ case XkbSA_LockNoUnlock|XkbSA_LockNoLock:
+ TryCopyStr(buf, ",affect=neither", sz);
+ break;
+ default:
+ break;
+ }
return True;
+ }
if (act->flags & XkbSA_ClearLocks)
TryCopyStr(buf, ",clearLocks", sz);
if (act->flags & XkbSA_LatchToLock)
@@ -1049,8 +1063,12 @@ CopyISOLockArgs(Display *dpy, XkbDescPtr xkb, XkbAction *action,
TryCopyStr(buf, "none", sz);
}
TryCopyStr(buf, ",affect=", sz);
- if ((act->affect & XkbSA_ISOAffectMask) == 0)
+ if ((act->affect & XkbSA_ISOAffectMask) == 0) {
TryCopyStr(buf, "all", sz);
+ }
+ else if ((act->affect & XkbSA_ISOAffectMask) == XkbSA_ISOAffectMask) {
+ TryCopyStr(buf, "none", sz);
+ }
else {
int nOut = 0;
@@ -1074,6 +1092,18 @@ CopyISOLockArgs(Display *dpy, XkbDescPtr xkb, XkbAction *action,
nOut++;
}
}
+ switch (act->flags & (XkbSA_LockNoUnlock | XkbSA_LockNoLock)) {
+ case XkbSA_LockNoLock:
+ TryCopyStr(buf, "+unlock", sz);
+ break;
+ case XkbSA_LockNoUnlock:
+ TryCopyStr(buf, "+lock", sz);
+ break;
+ case XkbSA_LockNoUnlock | XkbSA_LockNoLock:
+ TryCopyStr(buf, "+neither", sz);
+ break;
+ default: ;
+ }
return True;
}
@@ -1183,6 +1213,20 @@ CopySetLockControlsArgs(Display *dpy, XkbDescPtr xkb, XkbAction *action,
nOut++;
}
}
+ if (action->type == XkbSA_LockControls) {
+ switch (act->flags & (XkbSA_LockNoUnlock | XkbSA_LockNoLock)) {
+ case XkbSA_LockNoLock:
+ TryCopyStr(buf, ",affect=unlock", sz);
+ break;
+ case XkbSA_LockNoUnlock:
+ TryCopyStr(buf, ",affect=lock", sz);
+ break;
+ case XkbSA_LockNoUnlock | XkbSA_LockNoLock:
+ TryCopyStr(buf, ",affect=neither", sz);
+ break;
+ default: ;
+ }
+ }
return True;
}