On Thu, Jul 14, 2011 at 11:32:16AM +0800, Lai Jiangshan wrote: > Add virtkey lib for usage-improvment and keycode translating. > Add 4 internal API for the aim > > const char *virKeycodeSetTypeToString(int codeset); > int virKeycodeSetTypeFromString(const char *name); > int virParseKeyName(virKeycodeSet codeset, const char *keyname); > int virTranslateKeyCode(virKeycodeSet from_codeset, > virKeycodeSet to_offset, > int key_value); > > Signed-off-by: Lai Jiangshan <laijs@xxxxxxxxxxxxxx> > --- > include/libvirt/libvirt.h.in | 8 +++ > src/Makefile.am | 11 ++++- > src/libvirt_private.syms | 5 ++ > src/util/virtkey.c | 117 ++++++++++++++++++++++++++++++++++++++++++ > src/util/virtkey.h | 41 +++++++++++++++ Can we call these two 'virkeycode.h' and 'virkeycode.c' > src/util/virtkeymap-gen.py | 47 +++++++++++++++++ And 'virkeycode-mapgen.py' > diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in > index d5a7105..acfe9d9 100644 > --- a/include/libvirt/libvirt.h.in > +++ b/include/libvirt/libvirt.h.in > @@ -1778,6 +1778,14 @@ typedef enum { > VIR_KEYCODE_SET_ATSET1 = 2, > VIR_KEYCODE_SET_ATSET2 = 3, > VIR_KEYCODE_SET_ATSET3 = 4, > + VIR_KEYCODE_SET_OSX = 5, > + VIR_KEYCODE_SET_XT_KBD = 6, > + VIR_KEYCODE_SET_USB = 7, > + VIR_KEYCODE_SET_WIN32 = 8, > + VIR_KEYCODE_SET_XWIN_XT = 9, > + VIR_KEYCODE_SET_XFREE86_KBD_XT = 10, I have confirmed that "XT_KBD" is right for the QEMU keys, because this matches what we use for the VNC protocol. I would still like us to leave XWIN_XT and XFREE86_KBD_XT out of the headers for now. > diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms > index 3237d18..6611471 100644 > --- a/src/libvirt_private.syms > +++ b/src/libvirt_private.syms > @@ -1094,6 +1094,11 @@ virSetError; > virSetErrorLogPriorityFunc; > virStrerror; > > +# virtkey.h > +virKeycodeSetTypeToString; > +virKeycodeSetTypeFromString; > +virParseKeyName; > +virTranslateKeyCode; As a (newish) rule, all function name prefixes should match the source filename. So can you change these to virKeycodeValueFromString virKeycodeValueTranslate > +static unsigned int codeOffset[] = { > + [VIR_KEYCODE_SET_LINUX] = > + offsetof(struct keycode, linux_keycode), > + [VIR_KEYCODE_SET_XT] = > + offsetof(struct keycode, xt), > + [VIR_KEYCODE_SET_ATSET1] = > + offsetof(struct keycode, atset1), > + [VIR_KEYCODE_SET_ATSET2] = > + offsetof(struct keycode, atset2), > + [VIR_KEYCODE_SET_ATSET3] = > + offsetof(struct keycode, atset3), > + [VIR_KEYCODE_SET_OSX] = > + offsetof(struct keycode, os_x), > + [VIR_KEYCODE_SET_XT_KBD] = > + offsetof(struct keycode, xt_kbd), > + [VIR_KEYCODE_SET_USB] = > + offsetof(struct keycode, usb), > + [VIR_KEYCODE_SET_WIN32] = > + offsetof(struct keycode, win32), > + [VIR_KEYCODE_SET_XWIN_XT] = > + offsetof(struct keycode, xwin_xt), > + [VIR_KEYCODE_SET_XFREE86_KBD_XT] = > + offsetof(struct keycode, xfree86_kbd_xt), > +}; > + > +VIR_ENUM_IMPL(virKeycodeSet, VIR_KEYCODE_SET_LAST, > + "linux", > + "xt", > + "atset1", > + "atset2", > + "atset3", > + "os_x", > + "xt_kbd", > + "usb", > + "win32", > + "xwin_xt", > + "xfree86_kbd_xt"); Likewise leave out xin_xt and xfree86_kbd_xt > diff --git a/src/util/virtkey.h b/src/util/virtkey.h > new file mode 100644 > index 0000000..45c5f08 > --- /dev/null > +++ b/src/util/virtkey.h > @@ -0,0 +1,41 @@ > +#ifndef __UTIL_VIRTKEY_H__ > +#define __UTIL_VIRTKEY_H__ > + > +/* > + * Copyright (c) 2011 Lai Jiangshan > + * > + * This program is free software; you can redistribute it and/or modify it > + * under the terms of the GNU General Public License version 2 as published by > + * the Free Software Foundation. > + */ > + > +#include <config.h> > +#include "util.h" > +#include "libvirt/libvirt.h" > + > +struct keycode { > + const char *linux_name; > + const char *os_x_name; > + const char *win32_name; > + unsigned short linux_keycode; > + unsigned short os_x; > + unsigned short atset1; > + unsigned short atset2; > + unsigned short atset3; > + unsigned short xt; > + unsigned short xt_kbd; > + unsigned short usb; > + unsigned short win32; > + unsigned short xwin_xt; > + unsigned short xfree86_kbd_xt; > +}; > +extern struct keycode virtKeycodes[]; > +extern int virtKeycodesSize; None of these three declarations need to be in the header file since they are private impl details of the source fiel. > + > +VIR_ENUM_DECL(virKeycodeSet); > +int virParseKeyName(virKeycodeSet codeset, const char *keyname); > +int virTranslateKeyCode(virKeycodeSet from_codeset, > + virKeycodeSet to_offset, > + int key_value); > + > +#endif > diff --git a/src/util/virtkeymap-gen.py b/src/util/virtkeymap-gen.py Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list