summaryrefslogtreecommitdiff
path: root/libgnomekbd/gkbd-keyboard-drawing.c
diff options
context:
space:
mode:
authorSergey V. Udaltsov <svu@gnome.org>2011-02-04 19:51:55 +0000
committerSergey V. Udaltsov <svu@gnome.org>2011-02-04 19:51:55 +0000
commit2634d5b50340a7cc3cfb86f1ec09f5d271551335 (patch)
tree2a1a2f3cfd7e655568c72cf3d36e719bc920e042 /libgnomekbd/gkbd-keyboard-drawing.c
parent77bb317ff479ad8dc4a45b615462f9fb4d6031a2 (diff)
downloadlibgnomekbd-2634d5b50340a7cc3cfb86f1ec09f5d271551335.tar.gz
Improved keyboard drawing dialog
API is fixed, proper title taken from libxklavier meta data
Diffstat (limited to 'libgnomekbd/gkbd-keyboard-drawing.c')
-rw-r--r--libgnomekbd/gkbd-keyboard-drawing.c53
1 files changed, 39 insertions, 14 deletions
diff --git a/libgnomekbd/gkbd-keyboard-drawing.c b/libgnomekbd/gkbd-keyboard-drawing.c
index 4dbe6bf..1d1cd60 100644
--- a/libgnomekbd/gkbd-keyboard-drawing.c
+++ b/libgnomekbd/gkbd-keyboard-drawing.c
@@ -27,7 +27,6 @@
#include <memory.h>
#include <math.h>
#include <glib/gi18n-lib.h>
-#include <libxklavier/xklavier.h>
#include <gkbd-keyboard-drawing.h>
#include <gkbd-keyboard-drawing-marshal.h>
@@ -2575,9 +2574,11 @@ gkbd_keyboard_drawing_dialog_set_group (GtkWidget * dialog, gint group)
if (xkl_xkb_config_native_prepare
(engine, xkl_data, &component_names)) {
- gkbd_keyboard_drawing_set_keyboard
+ if (!gkbd_keyboard_drawing_set_keyboard
(GKBD_KEYBOARD_DRAWING (kbdraw),
- &component_names);
+ &component_names))
+ gkbd_keyboard_drawing_set_keyboard
+ (GKBD_KEYBOARD_DRAWING (kbdraw), NULL);
xkl_xkb_config_native_cleanup (engine,
&component_names);
}
@@ -2682,11 +2683,15 @@ gkbd_keyboard_drawing_set_layout (GkbdKeyboardDrawing * drawing,
if (xkl_xkb_config_native_prepare
(engine, data, &component_names)) {
- gkbd_keyboard_drawing_set_keyboard
- (drawing, &component_names);
+ if (!gkbd_keyboard_drawing_set_keyboard (drawing, &component_names))
+ gkbd_keyboard_drawing_set_keyboard
+ (drawing, NULL);
xkl_xkb_config_native_cleanup
(engine, &component_names);
+ } else {
+ xkl_debug (0,
+ "Could not find the keyboard\n");
}
}
g_object_unref (G_OBJECT (data));
@@ -2698,21 +2703,41 @@ gkbd_keyboard_drawing_set_layout (GkbdKeyboardDrawing * drawing,
void
gkbd_keyboard_drawing_dialog_set_layout (GtkWidget * dialog,
- const gchar * layout)
+ XklConfigRegistry * registry,
+ const gchar * full_layout)
{
- Display *display;
- Atom atom;
- const gchar *group_name;
+ const gchar *group_name = "?";
+ XklConfigItem *xki = xkl_config_item_new ();
+ gchar *layout = NULL, *variant = NULL;
+
GkbdKeyboardDrawing *kbdraw =
GKBD_KEYBOARD_DRAWING (g_object_get_data
(G_OBJECT (dialog), "kbdraw"));
- if (layout == NULL || layout[0] == 0)
+ if (full_layout == NULL || full_layout[0] == 0)
return;
- display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
- gkbd_keyboard_drawing_set_layout (kbdraw, layout);
- atom = kbdraw->xkb->names->groups[0];
- group_name = XGetAtomName (display, atom);
+ gkbd_keyboard_drawing_set_layout (kbdraw, full_layout);
+
+ if (gkbd_keyboard_config_split_items
+ (full_layout, &layout, &variant)) {
+ if (variant != NULL) {
+ strncpy (xki->name, variant,
+ XKL_MAX_CI_NAME_LENGTH);
+ xki->name[XKL_MAX_CI_NAME_LENGTH - 1] = 0;
+ if (xkl_config_registry_find_variant
+ (registry, layout, xki))
+ group_name = xki->description;
+ } else {
+ strncpy (xki->name, layout,
+ XKL_MAX_CI_NAME_LENGTH);
+ xki->name[XKL_MAX_CI_NAME_LENGTH - 1] = 0;
+ if (xkl_config_registry_find_layout
+ (registry, xki))
+ group_name = xki->description;
+ }
+ }
+
gkbd_keyboard_drawing_dialog_set_group_name (dialog, group_name);
+ g_object_unref (xki);
}