Skip to content

Commit

Permalink
keymap: Add xkb_keymap_new_from_names2
Browse files Browse the repository at this point in the history
Currently `xkb_keymap_new_from_names` does not allow to specify the
keymap format, so provide a new function `xkb_keymap_new_from_names2`.
  • Loading branch information
wismill committed Jul 4, 2024
1 parent 8fad5b6 commit 6cbbe32
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 5 deletions.
24 changes: 23 additions & 1 deletion include/xkbcommon/xkbcommon.h
Original file line number Diff line number Diff line change
Expand Up @@ -909,14 +909,36 @@ xkb_keymap_is_supported_format(enum xkb_keymap_format format);
* @returns A keymap compiled according to the RMLVO names, or NULL if
* the compilation failed.
*
* @sa xkb_rule_names
* @sa xkb_rule_names xkb_keymap_new_from_names2
* @memberof xkb_keymap
*/
struct xkb_keymap *
xkb_keymap_new_from_names(struct xkb_context *context,
const struct xkb_rule_names *names,
enum xkb_keymap_compile_flags flags);

/**
* Create a keymap from RMLVO names using a specific keymap format.
*
* The primary keymap entry point: creates a new XKB keymap from a set of
* RMLVO (Rules + Model + Layouts + Variants + Options) names.
*
* @param context The context in which to create the keymap.
* @param names The RMLVO names to use. See xkb_rule_names.
* @param format The text format of the keymap file to compile.
* @param flags Optional flags for the keymap, or 0.
*
* @returns A keymap compiled according to the RMLVO names, or NULL if
* the compilation failed.
*
* @sa xkb_rule_names xkb_keymap_new_from_names
* @memberof xkb_keymap
*/
struct xkb_keymap *
xkb_keymap_new_from_names2(struct xkb_context *context,
const struct xkb_rule_names *names,
enum xkb_keymap_format format,
enum xkb_keymap_compile_flags flags);

/**
* Create a keymap from a keymap file.
Expand Down
17 changes: 13 additions & 4 deletions src/keymap.c
Original file line number Diff line number Diff line change
Expand Up @@ -142,13 +142,13 @@ xkb_keymap_is_supported_format(enum xkb_keymap_format format)
}

XKB_EXPORT struct xkb_keymap *
xkb_keymap_new_from_names(struct xkb_context *ctx,
const struct xkb_rule_names *rmlvo_in,
enum xkb_keymap_compile_flags flags)
xkb_keymap_new_from_names2(struct xkb_context *ctx,
const struct xkb_rule_names *rmlvo_in,
enum xkb_keymap_format format,
enum xkb_keymap_compile_flags flags)
{
struct xkb_keymap *keymap;
struct xkb_rule_names rmlvo;
const enum xkb_keymap_format format = XKB_KEYMAP_FORMAT_TEXT_V1;
const struct xkb_keymap_format_ops *ops;

ops = get_keymap_format_ops(format);
Expand Down Expand Up @@ -180,6 +180,15 @@ xkb_keymap_new_from_names(struct xkb_context *ctx,
return keymap;
}

XKB_EXPORT struct xkb_keymap *
xkb_keymap_new_from_names(struct xkb_context *ctx,
const struct xkb_rule_names *rmlvo_in,
enum xkb_keymap_compile_flags flags)
{
return xkb_keymap_new_from_names2(ctx, rmlvo_in,
XKB_KEYMAP_FORMAT_TEXT_V1, flags);
}

XKB_EXPORT struct xkb_keymap *
xkb_keymap_new_from_string(struct xkb_context *ctx,
const char *string,
Expand Down
1 change: 1 addition & 0 deletions xkbcommon.map
Original file line number Diff line number Diff line change
Expand Up @@ -124,4 +124,5 @@ V_1.8.0 {
global:
xkb_keymap_supported_formats;
xkb_keymap_is_supported_format;
xkb_keymap_new_from_names2;
} V_1.6.0;

0 comments on commit 6cbbe32

Please sign in to comment.