diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | libxklavier/xkl_config_item.h | 5 | ||||
-rw-r--r-- | libxklavier/xklavier_config.c | 23 | ||||
-rw-r--r-- | tests/test_config.c | 7 |
4 files changed, 35 insertions, 5 deletions
@@ -1,3 +1,8 @@ +2007-05-13 svu + + * libxklavier/xkl_config_item.h, libxklavier/xklavier_config.c, + tests/test_config.c: processing "vendor" element, if specified + 2007-03-22 svu * configure.in: make build process a bit smarter (in relation to diff --git a/libxklavier/xkl_config_item.h b/libxklavier/xkl_config_item.h index c9e52ef..6caf7f7 100644 --- a/libxklavier/xkl_config_item.h +++ b/libxklavier/xkl_config_item.h @@ -85,6 +85,11 @@ extern "C" { #define XCI_PROP_ALLOW_MULTIPLE_SELECTION "allowMultipleSelection" /** + * Extra property for the XklConfigItem, defining the vendor (used for models) + */ +#define XCI_PROP_VENDOR "vendor" + +/** * The XklConfigItem class, derived from GObject */ struct _XklConfigItemClass { diff --git a/libxklavier/xklavier_config.c b/libxklavier/xklavier_config.c index 847f69a..bc90bc4 100644 --- a/libxklavier/xklavier_config.c +++ b/libxklavier/xklavier_config.c @@ -42,6 +42,7 @@ static xmlXPathCompExprPtr option_groups_xpath; #define XML_TAG_DESCR "description" #define XML_TAG_SHORT_DESCR "shortDescription" +#define XML_TAG_VENDOR "vendor" enum { PROP_0, @@ -132,7 +133,7 @@ xkl_read_config_item(XklConfigRegistry * config, xmlNodePtr iptr, max_short_desc_priority = priority; } xmlFree(lang); - } else { /* No language specified for the description */ + } else { /* No language specified */ if (!g_ascii_strcasecmp (node_name, XML_TAG_DESCR)) @@ -140,6 +141,20 @@ xkl_read_config_item(XklConfigRegistry * config, xmlNodePtr iptr, else if (!g_ascii_strcasecmp (node_name, XML_TAG_SHORT_DESCR)) def_short_desc_element = ptr; + else if (!g_ascii_strcasecmp(node_name, + XML_TAG_VENDOR)) + { + /* Vendor is not localized */ + if (ptr->children != NULL) + g_object_set_data_full + (G_OBJECT(item), + XCI_PROP_VENDOR, + g_strdup((const gchar + *) ptr-> + children-> + content), + g_free); + } } } ptr = ptr->next; @@ -281,7 +296,8 @@ xkl_config_registry_find_object(XklConfigRegistry * config, nodes = xpath_obj->nodesetval; if (nodes != NULL && nodes->nodeTab != NULL && nodes->nodeNr > 0) { - rv = xkl_read_config_item(config, nodes->nodeTab[0], pitem); + rv = xkl_read_config_item(config, nodes->nodeTab[0], + pitem); if (pnode != NULL) { *pnode = *nodes->nodeTab; } @@ -408,7 +424,8 @@ xkl_xml_sax_start_element_ns(void *ctx, gchar *value = g_new0(gchar, len + 1); memcpy(value, attributes[i + 3], len); if (!g_ascii_strcasecmp((gchar *) attributes[i], "lang") - /* && ... */ ) { + /* && ... */ + ) { lang = value; break; } diff --git a/tests/test_config.c b/tests/test_config.c index ff75ee6..eade27e 100644 --- a/tests/test_config.c +++ b/tests/test_config.c @@ -85,8 +85,11 @@ static void print_model(XklConfigRegistry * config, const XklConfigItem * item, gpointer data) { - printf("[%s][%s][%s]\n", item->name, item->description, - item->short_description); + gchar *vendor = + (gchar *) g_object_get_data(G_OBJECT(item), XCI_PROP_VENDOR); + printf("[%s][%s][%s] by %s\n", item->name, item->description, + item->short_description, + vendor == NULL ? "unknown" : vendor); } static void |