static void
add_default_switcher_if_necessary ()
{
	gchar **layouts_list = xkb_layouts_get_selected_list();
	gchar **options_list = xkb_options_get_selected_list ();
	gboolean was_appended;

	options_list =
	    gkbd_keyboard_config_add_default_switch_option_if_necessary
	    (layouts_list, options_list, &was_appended);
	if (was_appended)
		xkb_options_set_selected_list (options_list);
	g_strfreev (options_list);
}
void
xkl_layout_chooser_add_default_switcher_if_necessary (GSList *
						      layouts_list)
{
	GSList *options_list = xkb_options_get_selected_list ();
	gboolean was_appended;

	options_list =
	    matekbd_keyboard_config_add_default_switch_option_if_necessary
	    (layouts_list, options_list, &was_appended);
	if (was_appended)
		xkb_options_set_selected_list (options_list);
	clear_xkb_elements_list (options_list);
}
/* Add optionname from the backend's selection list if it's not
   already in there. */
static void
xkb_options_select (gchar * optionname)
{
	gboolean already_selected = FALSE;
	GSList *options_list = xkb_options_get_selected_list ();
	GSList *option;
	for (option = options_list; option != NULL; option = option->next)
		if (!strcmp ((gchar *) option->data, optionname))
			already_selected = TRUE;

	if (!already_selected)
		options_list =
		    g_slist_append (options_list, g_strdup (optionname));
	xkb_options_set_selected_list (options_list);

	clear_xkb_elements_list (options_list);
}
/* Remove all occurrences of optionname from the backend's selection list */
static void
xkb_options_deselect (gchar * optionname)
{
	gchar **options_list = xkb_options_get_selected_list ();
	if (options_list != NULL) {
		gchar **option = options_list;
		while (*option != NULL) {
			gchar *id = *option;
			if (!strcmp (id, optionname)) {
				gkbd_strv_behead (option);
			} else
				option++;
		}
		xkb_options_set_selected_list (options_list);
	}
	g_strfreev (options_list);
}
/* Remove all occurences of optionname from the backend's selection list */
static void
xkb_options_deselect (gchar * optionname)
{
	GSList *options_list = xkb_options_get_selected_list ();
	GSList *nodetmp;
	GSList *option = options_list;
	while (option != NULL) {
		gchar *id = (char *) option->data;
		if (!strcmp (id, optionname)) {
			nodetmp = option->next;
			g_free (id);
			options_list =
			    g_slist_remove_link (options_list, option);
			g_slist_free_1 (option);
			option = nodetmp;
		} else
			option = option->next;
	}
	xkb_options_set_selected_list (options_list);
	clear_xkb_elements_list (options_list);
}
/* Add optionname from the backend's selection list if it's not
   already in there. */
static void
xkb_options_select (gchar * optionname)
{
	gboolean already_selected = FALSE;
	gchar **options_list;
	guint i;

	options_list = xkb_options_get_selected_list ();
	for (i = 0; options_list != NULL && options_list[i] != NULL; i++) {
		gchar *option = options_list[i];
		if (!strcmp (option, optionname)) {
			already_selected = TRUE;
			break;
		}
	}

	if (!already_selected) {
		options_list =
		    gkbd_strv_append (options_list, g_strdup (optionname));
		xkb_options_set_selected_list (options_list);
	}

	g_strfreev (options_list);
}