diff --git a/protocol/wayland.dtd b/protocol/wayland.dtd
index ae8340d6..7e54b0f9 100644
--- a/protocol/wayland.dtd
+++ b/protocol/wayland.dtd
@@ -25,6 +25,7 @@
+
diff --git a/protocol/wayland.xml b/protocol/wayland.xml
index 513b8fd8..0e10f3ec 100644
--- a/protocol/wayland.xml
+++ b/protocol/wayland.xml
@@ -1117,7 +1117,7 @@
or drags initiated with other buttons than BTN_LEFT to specific
actions (e.g. "ask").
-
+
@@ -1205,7 +1205,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 cd5f7fea..2e5cfa87 100644
--- a/src/scanner.c
+++ b/src/scanner.c
@@ -738,6 +738,7 @@ start_element(void *data, const char *element_name, const char **atts)
const char *bitfield = NULL;
const char *frozen = NULL;
int i, version = 0;
+ bool valid_zero = false;
ctx->loc.line_number = XML_GetCurrentLineNumber(ctx->parser);
for (i = 0; atts[i]; i += 2) {
@@ -762,6 +763,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)
@@ -931,6 +940,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