libeek: add convenience function to set/unset layout options
New functions: eek_xkl_layout_enable_option(), eek_xkl_layout_disable_option(), eek_xkl_layout_get_option().
This commit is contained in:
@ -441,6 +441,65 @@ eek_xkl_layout_set_options (EekXklLayout *layout,
|
|||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* eek_xkl_layout_enable_option:
|
||||||
|
* @layout: an #EekXklLayout
|
||||||
|
* @option: option name
|
||||||
|
*
|
||||||
|
* Set the option of @layout (in the Libxklavier terminology).
|
||||||
|
* Returns: %TRUE if the option is successfully set, %FALSE otherwise
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
eek_xkl_layout_enable_option (EekXklLayout *layout,
|
||||||
|
const gchar *option)
|
||||||
|
{
|
||||||
|
gchar **options, **_options;
|
||||||
|
gint i, j;
|
||||||
|
|
||||||
|
options = eek_xkl_layout_get_options (layout);
|
||||||
|
for (i = 0; options && options[i]; i++)
|
||||||
|
if (g_strcmp0 (options[i], option) == 0)
|
||||||
|
return TRUE;
|
||||||
|
_options = g_new0 (gchar *, (i + 2));
|
||||||
|
for (j = 0; j < i; j++)
|
||||||
|
_options[j] = g_strdup (options[j]);
|
||||||
|
_options[i] = g_strdup (option);
|
||||||
|
/* eek_xkl_layout_set_options() will free _options and its elements. */
|
||||||
|
return eek_xkl_layout_set_options (layout, _options);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* eek_xkl_layout_disable_option:
|
||||||
|
* @layout: an #EekXklLayout
|
||||||
|
* @option: option name
|
||||||
|
*
|
||||||
|
* Unset the option of @layout (in the Libxklavier terminology).
|
||||||
|
* Returns: %TRUE if the option is successfully unset, %FALSE otherwise
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
eek_xkl_layout_disable_option (EekXklLayout *layout,
|
||||||
|
const gchar *option)
|
||||||
|
{
|
||||||
|
gchar **options, **_options;
|
||||||
|
gint i, j, k;
|
||||||
|
|
||||||
|
options = eek_xkl_layout_get_options (layout);
|
||||||
|
if (!options)
|
||||||
|
return TRUE;
|
||||||
|
for (i = 0, k = 0; options[i]; i++)
|
||||||
|
if (g_strcmp0 (options[i], option) == 0)
|
||||||
|
k = i;
|
||||||
|
if (options[k] == NULL)
|
||||||
|
return TRUE;
|
||||||
|
_options = g_new0 (gchar *, i);
|
||||||
|
for (j = 0; j < k; j++)
|
||||||
|
_options[j] = g_strdup (options[j]);
|
||||||
|
for (j = k + 1; j < i; j++)
|
||||||
|
_options[j] = g_strdup (options[j]);
|
||||||
|
/* eek_xkl_layout_set_options() will free _options and its elements. */
|
||||||
|
return eek_xkl_layout_set_options (layout, _options);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* eek_xkl_layout_get_model:
|
* eek_xkl_layout_get_model:
|
||||||
* @layout: an #EekXklLayout
|
* @layout: an #EekXklLayout
|
||||||
@ -552,3 +611,25 @@ set_xkb_component_names (EekXklLayout *layout, XklConfigRec *config)
|
|||||||
}
|
}
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* eek_xkl_layout_get_option:
|
||||||
|
* @layout: an #EekXklLayout
|
||||||
|
* @option: option name
|
||||||
|
*
|
||||||
|
* Tell if the option of @layout (in the Libxklavier terminology) is set.
|
||||||
|
* Returns: %TRUE if the option is set, %FALSE otherwise
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
eek_xkl_layout_get_option (EekXklLayout *layout,
|
||||||
|
const gchar *option)
|
||||||
|
{
|
||||||
|
gchar **options;
|
||||||
|
gint i;
|
||||||
|
|
||||||
|
options = eek_xkl_layout_get_options (layout);
|
||||||
|
for (i = 0; options && options[i]; i++)
|
||||||
|
if (g_strcmp0 (options[i], option) == 0)
|
||||||
|
return TRUE;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|||||||
@ -68,12 +68,17 @@ gboolean eek_xkl_layout_set_variants (EekXklLayout *layout,
|
|||||||
gchar **variants);
|
gchar **variants);
|
||||||
gboolean eek_xkl_layout_set_options (EekXklLayout *layout,
|
gboolean eek_xkl_layout_set_options (EekXklLayout *layout,
|
||||||
gchar **options);
|
gchar **options);
|
||||||
|
gboolean eek_xkl_layout_enable_option (EekXklLayout *layout,
|
||||||
|
const gchar *option);
|
||||||
|
gboolean eek_xkl_layout_disable_option (EekXklLayout *layout,
|
||||||
|
const gchar *option);
|
||||||
|
|
||||||
gchar *eek_xkl_layout_get_model (EekXklLayout *layout);
|
gchar *eek_xkl_layout_get_model (EekXklLayout *layout);
|
||||||
gchar **eek_xkl_layout_get_layouts (EekXklLayout *layout);
|
gchar **eek_xkl_layout_get_layouts (EekXklLayout *layout);
|
||||||
gchar **eek_xkl_layout_get_variants
|
gchar **eek_xkl_layout_get_variants (EekXklLayout *layout);
|
||||||
(EekXklLayout *layout);
|
|
||||||
gchar **eek_xkl_layout_get_options (EekXklLayout *layout);
|
gchar **eek_xkl_layout_get_options (EekXklLayout *layout);
|
||||||
|
gboolean eek_xkl_layout_get_option (EekXklLayout *layout,
|
||||||
|
const gchar *option);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
#endif /* #ifndef EEK_XKL_LAYOUT_H */
|
#endif /* #ifndef EEK_XKL_LAYOUT_H */
|
||||||
|
|||||||
Reference in New Issue
Block a user