[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [PATCH] Add Python test for KeyboardDrawingDialog using introspection



Thanks, Vratislav

That is awsome. Committed and pushed!

On Thu, Apr 19, 2012 at 10:45 AM, Vratislav Podzimek
<vpodzime redhat com> wrote:
> [CCing anaconda-devel-list to show some promising progress]
>
> Hi Sergey,
> I've finally succeeded in running gkbd_keyboard_drawing_dialog from Python
> by using introspection. I think it would be nice to share it with others,
> because it took me quite a lot of time to figure out how to work with the
> libgnomekbd's introspection magic, so I'm sending this as a patch.
> However, the introspection is very bizarre. Because gkbd_keyboard_drawing is
> a prefix of gkbd_keyboard_drawing_dialog, the generated introspection has a
> class named KeyboardDrawing with two constructors -- new (constructing
> a new KeyboardDialog) and dialog_new (constructing a KeyboardDrawingDialog).
> When invoking KeyboardDrawing() as it is common in Python with introspection,
> you can't tell which one of those is invoked and thus what object you actually
> get.
> This is quite bizarre per se, but it is even worse. Because there is no
> KeyboardDrawingDialog class in the introspection, one can only invoke dialog's
> methods as e.g.
> KeyboardDrawing.dialog_set_layout(dialog, registry, layout)
>
> while with a proper introspection, it would be just
> dialog.set_layout(registry, layout)
>
> All of this is a result of having such prefixed names. I'm quite sure there
> must be a way to generate introspection more properly even with such names, but
> I don't know how to do it. For more details please see the Gkbd-3.0.gir file.
>
> --
> Vratislav Podzimek
>
> ---
>  test/python_test.py |   40 ++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 40 insertions(+)
>  create mode 100755 test/python_test.py
>
> diff --git a/test/python_test.py b/test/python_test.py
> new file mode 100755
> index 0000000..f09a3bf
> --- /dev/null
> +++ b/test/python_test.py
> @@ -0,0 +1,40 @@
> +#!/usr/bin/python
> +#
> +# Copyright (C) 2012  Red Hat, Inc.
> +#
> +# This copyrighted material is made available to anyone wishing to use,
> +# modify, copy, or redistribute it subject to the terms and conditions of
> +# the GNU General Public License v.2, or (at your option) any later version.
> +# This program is distributed in the hope that it will be useful, but WITHOUT
> +# ANY WARRANTY expressed or implied, including the implied warranties of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
> +# Public License for more details.  You should have received a copy of the
> +# GNU General Public License along with this program; if not, write to the
> +# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> +# 02110-1301, USA.  Any Red Hat trademarks that are incorporated in the
> +# source code or documentation are not subject to the GNU General Public
> +# License and may only be used or replicated with the express permission of
> +# Red Hat, Inc.
> +#
> +# Red Hat Author(s): Vratislav Podzimek <vpodzime redhat com>
> +#
> +
> +import sys
> +from gi.repository import Gkbd, Gtk, Xkl, Gdk, GdkX11
> +
> +if len(sys.argv) < 2:
> +    print "Layout expected as the first argument!"
> +    sys.exit(1)
> +
> +dialog = Gkbd.KeyboardDrawing.dialog_new()
> +dialog.connect("destroy", lambda x: Gtk.main_quit())
> +
> +display = GdkX11.x11_get_default_xdisplay()
> +engine = Xkl.Engine.get_instance(display)
> +registry = Xkl.ConfigRegistry.get_instance(engine)
> +registry.load(False)
> +
> +Gkbd.KeyboardDrawing.dialog_set_layout(dialog, registry, sys.argv[1])
> +
> +dialog.show_all()
> +Gtk.main()
> --
> 1.7.10
>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]