Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
XkbKeyAction(3)			 XKB FUNCTIONS		       XkbKeyAction(3)

       XkbKeyAction -  Returns the key action

       XkbAction XkbKeyAction (XkbDescPtr xkb, KeyCode keycode,	int idx);

       - xkb  Xkb description of interest

       - keycode
	      keycode of interest

       - idx  index for	group and shift	level

       A  key  action  defines the effect key presses and releases have	on the
       internal	state of the server. For example, the expected key action  as-
       sociated	 with  pressing	 the  Shift  key is to set the Shift modifier.
       There is	zero or	one key	action associated with each  keysym  bound  to
       each key.

       Just as the entire list of key symbols for the keyboard mapping is held
       in the syms field of the	client map, the	entire list of key actions for
       the  keyboard  mapping is held in the acts array	of the server map. The
       total size of acts is specified by size_acts, and the number of entries
       is specified by num_acts.

       The  key_acts  array, indexed by	keycode, describes the actions associ-
       ated with a key.	The key_acts array has min_key_code unused entries  at
       the start to allow direct indexing using	a keycode. If a	key_acts entry
       is zero,	it means the key does not have any actions associated with it.
       If  an  entry  is not zero, the entry represents	an index into the acts
       field of	the server map,	much as	the offset  field  of  a  KeySymMapRec
       structure is an index into the syms field of the	client map.

       The  reason  the	acts field is a	linear list of XkbActions is to	reduce
       the memory consumption associated with a	keymap.	  Because  Xkb	allows
       individual keys to have multiple	shift levels and a different number of
       groups per key, a single	two-dimensional	array of KeySyms would	poten-
       tially  be very large and sparse. Instead, Xkb provides a small two-di-
       mensional array of XkbActions for each key. To store all	of these indi-
       vidual  arrays,	Xkb concatenates each array together in	the acts field
       of the server map.

       The key action structures consist only of fields	of type	 char  or  un-
       signed  char.   This  is	done to	optimize data transfer when the	server
       sends bytes over	the wire. If the fields	are anything  but  bytes,  the
       server  has  to	sift  through  all of the actions and swap any nonbyte
       fields.	Because	they consist of	nothing	but bytes, it  can  just  copy
       them out.

       XkbKeyAction  returns  the  key action indexed by idx in	the two-dimen-
       sional array of key actions associated with the	key  corresponding  to
       keycode.idx  may	be computed from the group and shift level of interest
       as follows:

	   idx = group_index * key_width + shift_level

       The KeySymMapRec	structure is defined as	follows:

	   #define XkbNumKbdGroups	       4
	   #define XkbMaxKbdGroup	       (XkbNumKbdGroups-1)

	   typedef struct {		       /* map to keysyms for a single keycode
	       unsigned	char	   kt_index[XkbNumKbdGroups];  /* key type index for
       each group */
	       unsigned	char	   group_info; /* # of groups and out of range group
       handling	*/
	       unsigned	char	   width;      /* max #	of shift levels	for key	*/
	       unsigned	short	   offset;     /* index	to keysym table	in syms	array
       } XkbSymMapRec, *XkbSymMapPtr;

X Version 11			 libX11	1.6.12		       XkbKeyAction(3)


Want to link to this manual page? Use this URL:

home | help