void
xkb_layout_preview_set_drawing_layout (GtkWidget * kbdraw,
				       const gchar * id)
{
#ifdef HAVE_X11_EXTENSIONS_XKB_H
	if (kbdraw != NULL) {
		if (id != NULL) {
			XklConfigRec *data;
			char **p, *layout, *variant;
			XkbComponentNamesRec component_names;

			data = xkl_config_rec_new ();
			if (xkl_config_rec_get_from_server (data, engine)) {
				if ((p = data->layouts) != NULL)
					g_strfreev (data->layouts);

				if ((p = data->variants) != NULL)
					g_strfreev (data->variants);

				data->layouts = g_new0 (char *, 2);
				data->variants = g_new0 (char *, 2);
				if (matekbd_keyboard_config_split_items
				    (id, &layout, &variant)
				    && variant != NULL) {
					data->layouts[0] =
					    (layout ==
					     NULL) ? NULL :
					    g_strdup (layout);
					data->variants[0] =
					    (variant ==
					     NULL) ? NULL :
					    g_strdup (variant);
				} else {
					data->layouts[0] =
					    (id ==
					     NULL) ? NULL : g_strdup (id);
					data->variants[0] = NULL;
				}

				if (xkl_xkb_config_native_prepare
				    (engine, data, &component_names)) {
					matekbd_keyboard_drawing_set_keyboard
					    (MATEKBD_KEYBOARD_DRAWING
					     (kbdraw), &component_names);

					xkl_xkb_config_native_cleanup
					    (engine, &component_names);
				}
			}
			g_object_unref (G_OBJECT (data));
		} else
gchar *
matekbd_indicator_config_get_images_file (MatekbdIndicatorConfig *
				       ind_config,
				       MatekbdKeyboardConfig *
				       kbd_config, int group)
{
	char *image_file = NULL;
	GtkIconInfo *icon_info = NULL;

	if (!ind_config->show_flags)
		return NULL;

	if ((kbd_config->layouts_variants != NULL) &&
	    (g_strv_length (kbd_config->layouts_variants) > group)) {
		char *full_layout_name =
		    kbd_config->layouts_variants[group];

		if (full_layout_name != NULL) {
			char *l, *v;
			matekbd_keyboard_config_split_items (full_layout_name,
							  &l, &v);
			if (l != NULL) {
				/* probably there is something in theme? */
				icon_info = gtk_icon_theme_lookup_icon
				    (ind_config->icon_theme, l, 48, 0);

				/* Unbelievable but happens */
				if (icon_info != NULL &&
				    gtk_icon_info_get_filename (icon_info) == NULL) {
					g_object_unref (icon_info);
					icon_info = NULL;
				}
			}
		}
	}
	/* fallback to the default value */
	if (icon_info == NULL) {
		icon_info = gtk_icon_theme_lookup_icon
		    (ind_config->icon_theme, "stock_dialog-error", 48, 0);
	}
	if (icon_info != NULL) {
		image_file =
		    g_strdup (gtk_icon_info_get_filename (icon_info));
		g_object_unref (icon_info);
	}

	return image_file;
}