Usage Overview
  
    libeek is a library to create keyboard-like user interface.
    Since it is designed as simple as possible, it provides only two
    kind of objects.  One is keyboard element
    (objects derived from #EekElement) and another is
    keyboard layout engine (objects which
    implements the #EekLayout interface).
    A keyboard element represents either a keyboard
    (#EekKeyboard), a section (#EekSection), or a key (#EekKey).  Each
    element implements the Builder design pattern so that it can map
    itself to different UI widgets (#ClutterActor, #GtkDrawingArea,
    aso).
    A layout engine arranges keyboard elements using information
    from external configuration mechanisms (libxklavier, XKB,
    matchbox-keyboard layouts in XML, aso)
    Here is a sample code which demonstrates (1) keyboard
    elements are arranged with the system keyboard layout using
    libxklavier and (2) keyboard elements are mapped into
    #ClutterActor:
    
      
EekLayout *layout;
EekKeyboard *keyboard;
ClutterActor *actor;
/* Create a layout engine based on libxklavier configuration. */
layout = eek_xkl_layout_new ();
/* Create a keyboard from the given layout. */
keyboard = eek_keyboard_new (layout, initial_width, initial_height);
/* Create a ClutterActor. */
actor = eek_clutter_keyboard_new (eekboard->keyboard);
/* Add the actor to a stage. */
clutter_group_add (CLUTTER_GROUP(stage), actor);
      
    
    libeek currently supports GTK+ and Clutter as UI toolkits.
    To create a keyboard-like #GtkWidget instead of #ClutterActor,
    replace eek_clutter_keyboard_new() with eek_gtk_keyboard_new().
    Similarly, if you want to use XKB configuration directly (without
    libxklavier), you will only need to replace eek_xkl_layout_new ()
    with eek_xkb_layout_new().
    In the above example, a keyboard is represented as a tree of
    #EekElement -- #EekKeyboard contains one or more #EekSection's and
    #EekSection contains one or more #EekKey's.  Each element may emit
    events when user pushes the corresponding UI widget.
    
      Here is another sample code which demonstrates logical events on
      #EekElement:
    
    
      
/* Find a key element in the logical keyboard. */
EekKey *key = eek_keyboard_find_key_by_keycode (keyboard, 0x38);
g_signal_connect (key, "pressed", on_a_pressed);
      
    
    When user pushed a widget which looks like "a" key (i.e. keycode 0x38), on_a_pressed will be called.