layouts.c



#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>

/*
 *   I suspect that the problem involved in this program could be solved using
 *   Xlib and/or Gdk libraries.
 *
 *   But... I can't identify the functions as well: (I only find tutorials for
 *   creating new layouts, assigning new values on keys,...)
 *
 *   Please, help me in any way. Thanks a lot!.
 */

GtkWidget *pLayout;
GtkWidget *pVariant;

void change_keyboard ()
{
/*
 *  Routine for applying the keyboard layout.
 *
 *           Just the same as $ setxkbmap -layout xx -variant xxxx
 *           in Bash Console.
 *
 */
}

void search_variants ()
{
/*
 *  Once Layout selected,
 *
 *            (1) search the *available* variants (if so...)
 *
 *            (2) elaborate the pVariant ComboBox List (append text...).
 *
 */

   gtk_combo_box_append_text (GTK_COMBO_BOX(pVariant), "Layout Variant");

}

void search_layouts()
{
/*
 *  Having the same keyboard characteristics as defined in
/etc/X11/xorg.conf, mainly:
 *
 *  Section "Input Device"
 *  ....
 *         Option "XkbRules" "xorg"
 *         Option "XkbModel" "pc105"
 *  EndSection
 *
 *  Getting a list of keyboard layouts as:
 *
 *    Andorra
 *    Afghanistan
 *    Arabic
 *    Albania
 *    Armenia
 *    Azerbaijan
 *    Belarus
 *  ....
 *
 *  For that, must I process /usr/share/X11/xkb/rules/xorg.lst directly or coud
 *  I use a more suitable function ? (Also for correspondences between
developped
 *  and abreviated forms -like Andorra and ad, Afghanistan and af,...).
 *
 *  After all, finally, elaborate the pLayout ComboBox List (append text...).
 *
 */

   gtk_combo_box_append_text (GTK_COMBO_BOX(pLayout), "Keyboard Layout");

}

int main (int argc, char **argv)
{
   GtkWidget *pWindow;
   GtkWidget *pHBox;
   GtkWidget *pApply;

   gtk_init (&argc, &argv);

   pWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   gtk_container_set_border_width (GTK_CONTAINER (pWindow), 5);
   g_signal_connect (G_OBJECT(pWindow),"delete-event",
                     G_CALLBACK(gtk_main_quit),0);

   pHBox = gtk_hbox_new (FALSE, 10);

   pLayout = gtk_combo_box_new_text ();
   search_layouts();
   gtk_combo_box_set_active (GTK_COMBO_BOX(pLayout), 0);
   g_signal_connect (G_OBJECT(pLayout), "changed",
                     G_CALLBACK(search_variants), 0);


   pVariant = gtk_combo_box_new_text ();
   search_variants();
   gtk_combo_box_set_active (GTK_COMBO_BOX(pVariant), 0);

   pApply = gtk_button_new_with_label ("< Apply >");
   g_signal_connect (G_OBJECT(pApply), "clicked",
                     G_CALLBACK(change_keyboard), 0);

   gtk_box_pack_start (GTK_BOX (pHBox), pLayout, TRUE, TRUE, 0);
   gtk_box_pack_start (GTK_BOX (pHBox), pVariant, TRUE, TRUE, 0);
   gtk_box_pack_start (GTK_BOX (pHBox), pApply, TRUE, TRUE, 0);

   gtk_container_add (GTK_CONTAINER(pWindow), pHBox);

   gtk_widget_show_all(pWindow);
   gtk_main();

   return 0;
}


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