uterm: input: forward xkbcommon log messages

Instead of letting xkbcommon write to stderr, we now forward these
messages via the llog handler.

Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
This commit is contained in:
David Herrmann 2013-03-16 16:08:32 +01:00
parent 4bcf507302
commit a11d71a987

View File

@ -38,11 +38,48 @@
#include "uterm_input.h"
#include "uterm_input_internal.h"
#define LLOG_SUBSYSTEM "uterm_input_uxkb"
#define LLOG_SUBSYSTEM "uterm_uxkb"
extern const char _binary_src_uterm_input_fallback_xkb_bin_start[];
extern const char _binary_src_uterm_input_fallback_xkb_bin_end[];
static void uxkb_log(struct xkb_context *context, enum xkb_log_level level,
const char *format, va_list args)
{
struct uterm_input *input;
unsigned int sev;
input = xkb_context_get_user_data(context);
if (!input->llog)
return;
switch (level) {
case XKB_LOG_LEVEL_CRITICAL:
sev = LLOG_CRITICAL;
break;
case XKB_LOG_LEVEL_ERROR:
sev = LLOG_ERROR;
break;
case XKB_LOG_LEVEL_WARNING:
sev = LLOG_WARNING;
break;
case XKB_LOG_LEVEL_INFO:
sev = LLOG_INFO;
break;
case XKB_LOG_LEVEL_DEBUG:
/* fallthrough */
default:
sev = LLOG_DEBUG;
break;
}
input->llog(input->llog_data,
LLOG_DEFAULT,
sev,
format,
args);
}
int uxkb_desc_init(struct uterm_input *input,
const char *model,
const char *layout,
@ -68,6 +105,12 @@ int uxkb_desc_init(struct uterm_input *input,
return -ENOMEM;
}
/* Set logging function. You can use XKB_LOG_VERBOSITY and XKB_LOG_LEVEL
* to change the xkbcommon logger. That's why we don't touch the
* verbosity and level here. */
xkb_context_set_user_data(input->ctx, input);
xkb_context_set_log_fn(input->ctx, uxkb_log);
/* If a complete keymap file was given, first try that. */
if (keymap && *keymap) {
input->keymap = xkb_keymap_new_from_string(input->ctx,