---
name: "XkbResizeKeyType"
section: "3"
platform: "linux"
package: "libx11"
version: "1.8.14-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/XkbResizeKeyType"
---

# XkbResizeKeyType(3)

Change the number of levels in a key type

## NAME

XkbResizeKeyType - Change the number of levels in a key type

## SYNOPSIS

**Status XkbResizeKeyType** **(XkbDescPtr** *xkb***,** **int** *type\_ndx***,** **int** *map\_count***,** **Bool** *want\_preserve***,** **int** *new\_num\_lvls***);**

## ARGUMENTS

- *xkb*

  keyboard description containing client map to update

- *type\_ndx*

  index in xkb-\>map-\>types of type to change

- *map\_count*

  total # of map entries needed for the type

- *want\_preserve*

  True =\> list of preserved modifiers is necessary

- *new\_num\_lvls*

  new max # of levels for type

## DESCRIPTION

*XkbResizeKeyType* changes the type specified by *xkb-\>map-\>types\[type\_ndx\],* and reallocates the symbols and actions bound to all keys that use the type, if necessary. *XkbResizeKeyType* updates only the local copy of the types in *xkb;* to update the server's copy for the physical device, use *XkbSetMap* or *XkbChangeMap* after calling *XkbResizeKeyType.*

The *map\_count* parameter specifies the total number of map entries needed for the type, and can be zero or greater. If *map\_count* is zero, *XkbResizeKeyType* frees the existing *map* and *preserve* entries for the type if they exist and sets them to NULL.

The *want\_preserve* parameter specifies whether a *preserve* list for the key should be created. If *want\_preserve* is True, the *preserve* list with *map\_count* entries is allocated or reallocated if it already exists. Otherwise, if *want\_preserve* is False, the *preserve* field is freed if necessary and set to NULL.

The *new\_num\_lvls* parameter specifies the new maximum number of shift levels for the type and is used to calculate and resize the symbols and actions bound to all keys that use the type.

If *type\_ndx* does not specify a legal type, *new\_num\_lvls* is less than 1, or the *map\_count* is less than zero, *XkbResizeKeyType* returns BadValue. If *XkbResizeKeyType* encounters any problems with allocation, it returns BadAlloc. Otherwise, it returns Success.

## RETURN VALUES

- Success

  The *XkbResizeKeyType* function returns Success if *type\_ndx* specifies a legal type, *new\_num\_lvls* is greater than zero and *map\_count* is positive.

## DIAGNOSTICS

- **BadAlloc**

  Unable to allocate storage

- **BadValue**

  An argument is out of range

## SEE ALSO

[**XkbChangeMap**(3)](/XkbChangeMap/3.md), [**XkbSetMap**(3)](/XkbSetMap/3.md)
