summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRan Benita <ran234@gmail.com>2014-02-10 13:06:22 +0200
committerRan Benita <ran234@gmail.com>2014-02-10 13:15:58 +0200
commit2ecc0f8316bdbc41f81845fc9a5f0809c38a6229 (patch)
tree7b83605a5bf0d927b122286ac04561e60f1b6ab4
parentc11f05e064ea2676cfc8c644bd95c878db3a9130 (diff)
downloadlibxkbcommon-2ecc0f8316bdbc41f81845fc9a5f0809c38a6229.tar.gz
libxkbcommon-2ecc0f8316bdbc41f81845fc9a5f0809c38a6229.tar.bz2
libxkbcommon-2ecc0f8316bdbc41f81845fc9a5f0809c38a6229.zip
context: add xkb_context_sanitize_rule_names()
We want all the default logic in a test, so encapsulate it in this function, and make all the get_default_* functions static. Signed-off-by: Ran Benita <ran234@gmail.com>
-rw-r--r--src/context-priv.c29
-rw-r--r--src/context.h17
-rw-r--r--src/keymap.c23
3 files changed, 32 insertions, 37 deletions
diff --git a/src/context-priv.c b/src/context-priv.c
index 999ece9..c934201 100644
--- a/src/context-priv.c
+++ b/src/context-priv.c
@@ -112,7 +112,7 @@ xkb_context_get_buffer(struct xkb_context *ctx, size_t size)
#define DEFAULT_XKB_OPTIONS NULL
#endif
-const char *
+static const char *
xkb_context_get_default_rules(struct xkb_context *ctx)
{
const char *env = NULL;
@@ -123,7 +123,7 @@ xkb_context_get_default_rules(struct xkb_context *ctx)
return env ? env : DEFAULT_XKB_RULES;
}
-const char *
+static const char *
xkb_context_get_default_model(struct xkb_context *ctx)
{
const char *env = NULL;
@@ -134,7 +134,7 @@ xkb_context_get_default_model(struct xkb_context *ctx)
return env ? env : DEFAULT_XKB_MODEL;
}
-const char *
+static const char *
xkb_context_get_default_layout(struct xkb_context *ctx)
{
const char *env = NULL;
@@ -145,7 +145,7 @@ xkb_context_get_default_layout(struct xkb_context *ctx)
return env ? env : DEFAULT_XKB_LAYOUT;
}
-const char *
+static const char *
xkb_context_get_default_variant(struct xkb_context *ctx)
{
const char *env = NULL;
@@ -159,7 +159,7 @@ xkb_context_get_default_variant(struct xkb_context *ctx)
return env ? env : DEFAULT_XKB_VARIANT;
}
-const char *
+static const char *
xkb_context_get_default_options(struct xkb_context *ctx)
{
const char *env = NULL;
@@ -169,3 +169,22 @@ xkb_context_get_default_options(struct xkb_context *ctx)
return env ? env : DEFAULT_XKB_OPTIONS;
}
+
+void
+xkb_context_sanitize_rule_names(struct xkb_context *ctx,
+ struct xkb_rule_names *rmlvo)
+{
+ if (isempty(rmlvo->rules))
+ rmlvo->rules = xkb_context_get_default_rules(ctx);
+ if (isempty(rmlvo->model))
+ rmlvo->model = xkb_context_get_default_model(ctx);
+ /* Layout and variant are tied together, so don't try to use one from
+ * the caller and one from the environment. */
+ if (isempty(rmlvo->layout)) {
+ rmlvo->layout = xkb_context_get_default_layout(ctx);
+ rmlvo->variant = xkb_context_get_default_variant(ctx);
+ }
+ /* Options can be empty, so respect that if passed in. */
+ if (rmlvo->options == NULL)
+ rmlvo->options = xkb_context_get_default_options(ctx);
+}
diff --git a/src/context.h b/src/context.h
index 486f408..03e6d50 100644
--- a/src/context.h
+++ b/src/context.h
@@ -91,20 +91,9 @@ ATTR_PRINTF(4, 5) void
xkb_log(struct xkb_context *ctx, enum xkb_log_level level, int verbosity,
const char *fmt, ...);
-const char *
-xkb_context_get_default_rules(struct xkb_context *ctx);
-
-const char *
-xkb_context_get_default_model(struct xkb_context *ctx);
-
-const char *
-xkb_context_get_default_layout(struct xkb_context *ctx);
-
-const char *
-xkb_context_get_default_variant(struct xkb_context *ctx);
-
-const char *
-xkb_context_get_default_options(struct xkb_context *ctx);
+void
+xkb_context_sanitize_rule_names(struct xkb_context *ctx,
+ struct xkb_rule_names *rmlvo);
/*
* The format is not part of the argument list in order to avoid the
diff --git a/src/keymap.c b/src/keymap.c
index abf1387..892b7cf 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -137,28 +137,15 @@ xkb_keymap_new_from_names(struct xkb_context *ctx,
return NULL;
}
+ keymap = xkb_keymap_new(ctx, format, flags);
+ if (!keymap)
+ return NULL;
+
if (rmlvo_in)
rmlvo = *rmlvo_in;
else
memset(&rmlvo, 0, sizeof(rmlvo));
-
- if (isempty(rmlvo.rules))
- rmlvo.rules = xkb_context_get_default_rules(ctx);
- if (isempty(rmlvo.model))
- rmlvo.model = xkb_context_get_default_model(ctx);
- /* Layout and variant are tied together, so don't try to use one from
- * the caller and one from the environment. */
- if (isempty(rmlvo.layout)) {
- rmlvo.layout = xkb_context_get_default_layout(ctx);
- rmlvo.variant = xkb_context_get_default_variant(ctx);
- }
- /* Options can be empty, so respect that if passed in. */
- if (rmlvo.options == NULL)
- rmlvo.options = xkb_context_get_default_options(ctx);
-
- keymap = xkb_keymap_new(ctx, format, flags);
- if (!keymap)
- return NULL;
+ xkb_context_sanitize_rule_names(ctx, &rmlvo);
if (!ops->keymap_new_from_names(keymap, &rmlvo)) {
xkb_keymap_unref(keymap);