Thanks, Vratislav That is awsome. Committed and pushed! On Thu, Apr 19, 2012 at 10:45 AM, Vratislav Podzimek <vpodzime@xxxxxxxxxx> 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@xxxxxxxxxx> > +# > + > +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 > _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list