diff --git a/protocol/wayland.dtd b/protocol/wayland.dtd
index b97372c5..62f4d778 100644
--- a/protocol/wayland.dtd
+++ b/protocol/wayland.dtd
@@ -24,6 +24,7 @@
+
diff --git a/protocol/wayland.xml b/protocol/wayland.xml
index 58e5649e..7c1677bd 100644
--- a/protocol/wayland.xml
+++ b/protocol/wayland.xml
@@ -1104,7 +1104,7 @@
or drags initiated with other buttons than BTN_LEFT to specific
actions (e.g. "ask").
-
+
@@ -1183,7 +1183,7 @@
use this information to adapt its behavior, e.g. choose
an appropriate cursor image.
-
+
diff --git a/src/scanner.c b/src/scanner.c
index 1b71e60c..fa81c1f3 100644
--- a/src/scanner.c
+++ b/src/scanner.c
@@ -737,6 +737,7 @@ start_element(void *data, const char *element_name, const char **atts)
const char *enumeration_name = NULL;
const char *bitfield = NULL;
int i, version = 0;
+ bool valid_zero = false;
ctx->loc.line_number = XML_GetCurrentLineNumber(ctx->parser);
for (i = 0; atts[i]; i += 2) {
@@ -761,6 +762,14 @@ start_element(void *data, const char *element_name, const char **atts)
deprecated_since = atts[i + 1];
if (strcmp(atts[i], "allow-null") == 0)
allow_null = atts[i + 1];
+ if (strcmp(atts[i], "valid-zero") == 0) {
+ if (strcmp(atts[i + 1], "true") == 0)
+ valid_zero = true;
+ else
+ fail(&ctx->loc,
+ "Invalid value for valid-zero: %s",
+ atts[i + 1]);
+ }
if (strcmp(atts[i], "enum") == 0)
enumeration_name = atts[i + 1];
if (strcmp(atts[i], "bitfield") == 0)
@@ -914,6 +923,9 @@ start_element(void *data, const char *element_name, const char **atts)
version, entry->since);
entry->deprecated_since = version;
+ if (ctx->enumeration->bitfield && !valid_zero && strcmp(entry->value, "0") == 0)
+ warn(&ctx->loc, "value 0 used in a bitfield entry");
+
if (summary)
entry->summary = xstrdup(summary);
else