summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--libxklavier/xkl_config_item.h5
-rw-r--r--libxklavier/xklavier_config.c23
-rw-r--r--tests/test_config.c7
4 files changed, 35 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 41d742d..96891e5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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