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;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -53,27 +53,32 @@ struct _EekXklLayoutClass
 | 
				
			|||||||
    gpointer pdummy[24];
 | 
					    gpointer pdummy[24];
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GType      eek_xkl_layout_get_type     (void) G_GNUC_CONST;
 | 
					GType      eek_xkl_layout_get_type       (void) G_GNUC_CONST;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EekLayout *eek_xkl_layout_new          (void);
 | 
					EekLayout *eek_xkl_layout_new            (void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
gboolean   eek_xkl_layout_set_config   (EekXklLayout *layout,
 | 
					gboolean   eek_xkl_layout_set_config     (EekXklLayout *layout,
 | 
				
			||||||
                                        XklConfigRec *config);
 | 
					                                          XklConfigRec *config);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
gboolean   eek_xkl_layout_set_model    (EekXklLayout *layout,
 | 
					gboolean   eek_xkl_layout_set_model      (EekXklLayout *layout,
 | 
				
			||||||
                                        const gchar  *model);
 | 
					                                          const gchar  *model);
 | 
				
			||||||
gboolean   eek_xkl_layout_set_layouts  (EekXklLayout *layout,
 | 
					gboolean   eek_xkl_layout_set_layouts    (EekXklLayout *layout,
 | 
				
			||||||
                                        gchar       **layouts);
 | 
					                                          gchar       **layouts);
 | 
				
			||||||
gboolean   eek_xkl_layout_set_variants (EekXklLayout *layout,
 | 
					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