[master][PATCH] Use libxklavier's new methods instead of our nasty hack

David Shea dshea at redhat.com
Wed Dec 4 15:50:30 UTC 2013


On 12/04/2013 07:19 AM, Vratislav Podzimek wrote:
> Signed-off-by: Vratislav Podzimek <vpodzime at redhat.com>
> ---
>   anaconda.spec.in       |  5 +++--
>   pyanaconda/keyboard.py | 39 ++++++++++++---------------------------
>   2 files changed, 15 insertions(+), 29 deletions(-)
>
> diff --git a/anaconda.spec.in b/anaconda.spec.in
> index 4c68b31..9bd6c30 100644
> --- a/anaconda.spec.in
> +++ b/anaconda.spec.in
> @@ -41,6 +41,7 @@ Source0: %{name}-%{version}.tar.bz2
>   %define rpmver 4.10.0
>   %define libarchivever 3.0.4
>   %define langtablever 0.0.18-1
> +%define libxklavierver 5.4
>   
>   BuildRequires: audit-libs-devel
>   BuildRequires: gettext >= %{gettextver}
> @@ -55,7 +56,7 @@ BuildRequires: libXt-devel
>   BuildRequires: libXxf86misc-devel
>   BuildRequires: libgnomekbd-devel
>   BuildRequires: libnl-devel >= %{libnlver}
> -BuildRequires: libxklavier-devel
> +BuildRequires: libxklavier-devel >= %{libxklavierver}
>   BuildRequires: pango-devel
>   BuildRequires: pykickstart >= %{pykickstartver}
>   %if ! 0%{?rhel}
> @@ -105,7 +106,7 @@ Requires: python-IPy
>   Requires: python-nss
>   Requires: tigervnc-server-minimal
>   Requires: pytz
> -Requires: libxklavier
> +Requires: libxklavier >= %{libxklavierver}
>   Requires: libgnomekbd
>   Requires: realmd
>   Requires: teamd
> diff --git a/pyanaconda/keyboard.py b/pyanaconda/keyboard.py
> index 21505a2..0d607e6 100644
> --- a/pyanaconda/keyboard.py
> +++ b/pyanaconda/keyboard.py
> @@ -351,21 +351,6 @@ def background_XklWrapper_initialize():
>   
>       threadMgr.add(AnacondaThread(name=THREAD_XKL_WRAPPER_INIT, target=XklWrapper.get_instance))
>   
> -def item_str(s):
> -    """Convert a zero-terminated byte array to a proper str"""
> -
> -    # depending of version of libxklavier and the tools generating introspection
> -    # data the value of 's' can be either byte string or list of integers
> -    if type(s) == types.StringType:
> -        i = s.find(b'\x00')
> -        s = s[:i]
> -    elif type(s) == types.ListType:
> -        # XXX: this is the wrong case that should be fixed (rhbz#920595)
> -        i = s.index(0)
> -        s = "".join(chr(ctypes.c_uint8(char).value) for char in s[:i])
> -
> -    return s.decode("utf-8") #there are some non-ascii layout descriptions
> -
>   class XklWrapperError(KeyboardConfigError):
>       """Exception class for reporting libxklavier-related problems"""
>   
> @@ -442,11 +427,11 @@ class XklWrapper(object):
>   
>       def _get_lang_variant(self, c_reg, item, subitem, lang):
>           if subitem:
> -            name = item_str(item.name) + " (" + item_str(subitem.name) + ")"
> -            description = item_str(subitem.description)
> +            name = item.get_name() + " (" + subitem.get_name() + ")"
> +            description = subitem.get_description()
>           else:
> -            name = item_str(item.name)
> -            description = item_str(item.description)
> +            name = item.get_name()
> +            description = item.get_description()
>   
>           #if this layout has already been added for some other language,
>           #do not add it again (would result in duplicates in our lists)
> @@ -456,11 +441,11 @@ class XklWrapper(object):
>   
>       def _get_country_variant(self, c_reg, item, subitem, country):
>           if subitem:
> -            name = item_str(item.name) + " (" + item_str(subitem.name) + ")"
> -            description = item_str(subitem.description)
> +            name = item.get_name() + " (" + subitem.get_name() + ")"
> +            description = subitem.get_description()
>           else:
> -            name = item_str(item.name)
> -            description = item_str(item.description)
> +            name = item.get_name()
> +            description = item.get_description()
>   
>           # if the layout was not added with any language, add it with a country
>           if name not in self._layout_infos:
> @@ -468,20 +453,20 @@ class XklWrapper(object):
>                                                     description.encode("utf-8"))
>   
>       def _get_language_variants(self, c_reg, item, user_data=None):
> -        lang_name, lang_desc = item_str(item.name), item_str(item.description)
> +        lang_name, lang_desc = item.get_name(), item.get_description()
>   
>           c_reg.foreach_language_variant(lang_name, self._get_lang_variant, lang_desc)
>   
>       def _get_country_variants(self, c_reg, item, user_data=None):
> -        country_name, country_desc = item_str(item.name), item_str(item.description)
> +        country_name, country_desc = item.get_name(), item.get_description()
>   
>           c_reg.foreach_country_variant(country_name, self._get_country_variant,
>                                         country_desc)
>   
>       def _get_switch_option(self, c_reg, item, user_data=None):
>           """Helper function storing layout switching options in foreach cycle"""
> -        desc = item_str(item.description)
> -        name = item_str(item.name)
> +        desc = item.get_description()
> +        name = item.get_name()
>   
>           self._switch_opt_infos[name] = desc.encode("utf-8")
>   
You can kill the types and ctypes imports in keyboard.py, now, too. Ack.


More information about the anaconda-patches mailing list