[Spice-devel] [PATCH linux/vd_agent 1/2] Set keyboard layout
Pavel Grunt
pgrunt at redhat.com
Tue Nov 4 23:53:59 PST 2014
This commit introduces a function for changing the keyboard
layout on the guest side.
---
configure.ac | 2 ++
src/vdagent-x11.c | 15 +++++++++++++++
src/vdagent-x11.h | 3 +++
3 files changed, 20 insertions(+)
diff --git a/configure.ac b/configure.ac
index 79905a8..a5916d1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -126,6 +126,8 @@ if test x"$enable_static_uinput" = "xyes" ; then
AC_DEFINE([WITH_STATIC_UINPUT], [1], [If defined, vdagentd will use a static uinput device] )
fi
+AC_CHECK_HEADERS([X11/XKBlib.h])
+
# If no CFLAGS are set, set some sane default CFLAGS
if test "$ac_test_CFLAGS" != set; then
DEFAULT_CFLAGS="-Wall -Werror -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4"
diff --git a/src/vdagent-x11.c b/src/vdagent-x11.c
index 752b337..a33eef9 100644
--- a/src/vdagent-x11.c
+++ b/src/vdagent-x11.c
@@ -31,6 +31,8 @@
Calling XPending when-ever we return to the mainloop also ensures any
pending writes are flushed. */
+#include <config.h>
+
#include <glib.h>
#include <stdlib.h>
#include <limits.h>
@@ -40,6 +42,9 @@
#include <unistd.h>
#include <X11/Xatom.h>
#include <X11/Xlib.h>
+#ifdef HAVE_X11_XKBLIB_H
+#include <X11/XKBlib.h>
+#endif
#include <X11/extensions/Xfixes.h>
#include "vdagentd-proto.h"
#include "vdagent-x11.h"
@@ -1352,3 +1357,13 @@ int vdagent_x11_has_icons_on_desktop(struct vdagent_x11 *x11)
return 0;
}
+
+void vdagent_x11_set_keyboard_description(struct vdagent_x11 *x11,
+ uint8_t *keyboard_desc)
+{
+#ifdef HAVE_X11_XKBLIB_H
+ XkbComponentNamesRec comp = {.symbols = (char *) keyboard_desc};
+
+ XkbGetKeyboardByName(x11->display, XkbUseCoreKbd, &comp, XkbGBN_SymbolsMask, XkbGBN_SymbolsMask, True);
+#endif
+}
diff --git a/src/vdagent-x11.h b/src/vdagent-x11.h
index d64a42a..3a3f7c1 100644
--- a/src/vdagent-x11.h
+++ b/src/vdagent-x11.h
@@ -50,4 +50,7 @@ void vdagent_x11_client_disconnected(struct vdagent_x11 *x11);
int vdagent_x11_has_icons_on_desktop(struct vdagent_x11 *x11);
+void vdagent_x11_set_keyboard_description(struct vdagent_x11 *x11,
+ uint8_t *keyboard_desc);
+
#endif
--
1.9.3
More information about the Spice-devel
mailing list