mirror of
https://gitlab.freedesktop.org/xorg/lib/libxcb-errors.git
synced 2025-12-20 09:20:02 +01:00
Code generator: Add support for XGE events
This also pretends that XKB has XGE events since that extension has its own event multiplexing. Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
parent
5cf2876228
commit
a66bb6b232
2 changed files with 22 additions and 6 deletions
|
|
@ -30,9 +30,11 @@
|
||||||
|
|
||||||
struct static_extension_info_t {
|
struct static_extension_info_t {
|
||||||
uint16_t num_minor;
|
uint16_t num_minor;
|
||||||
|
uint16_t num_xge_events;
|
||||||
uint8_t num_events;
|
uint8_t num_events;
|
||||||
uint8_t num_errors;
|
uint8_t num_errors;
|
||||||
const char *strings_minor;
|
const char *strings_minor;
|
||||||
|
const char *strings_xge_events;
|
||||||
const char *strings_events;
|
const char *strings_events;
|
||||||
const char *strings_errors;
|
const char *strings_errors;
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ class Module(object):
|
||||||
self.errors = {}
|
self.errors = {}
|
||||||
self.requests = {}
|
self.requests = {}
|
||||||
self.events = {}
|
self.events = {}
|
||||||
|
self.xge_events = {}
|
||||||
|
|
||||||
root = parse(filename).getroot()
|
root = parse(filename).getroot()
|
||||||
if root.get("header") == "xproto":
|
if root.get("header") == "xproto":
|
||||||
|
|
@ -26,20 +27,32 @@ class Module(object):
|
||||||
if tag == "error" or tag == "errorcopy":
|
if tag == "error" or tag == "errorcopy":
|
||||||
self.errors[number] = name
|
self.errors[number] = name
|
||||||
else:
|
else:
|
||||||
if elt.get("xge") == "true":
|
is_xge = elt.get("xge") == "true"
|
||||||
print("%s: XGE event %s not handled correctly" % (self.name, name))
|
if tag == "eventcopy" and elt.get("ref") in self.xge_events.values():
|
||||||
|
is_xge = True
|
||||||
|
if is_xge:
|
||||||
|
self.xge_events[number] = name
|
||||||
|
else:
|
||||||
self.events[number] = name
|
self.events[number] = name
|
||||||
elif tag == "request":
|
elif tag == "request":
|
||||||
name = elt.get("name")
|
name = elt.get("name")
|
||||||
opcode = int(elt.get("opcode"))
|
opcode = int(elt.get("opcode"))
|
||||||
self.requests[opcode] = name
|
self.requests[opcode] = name
|
||||||
|
|
||||||
|
# Special case for XKB: It does its own event multiplexing, but this
|
||||||
|
# library internally pretends it uses XGE.
|
||||||
|
if self.name == "xkb":
|
||||||
|
self.xge_events = self.events
|
||||||
|
self.events = { 0: "XKB base event" }
|
||||||
|
|
||||||
|
if not self.is_ext:
|
||||||
|
self.events[35] = "GeGeneric"
|
||||||
|
self.xge_events = {}
|
||||||
|
|
||||||
self.errors_table = self.handle_type("error", self.errors)
|
self.errors_table = self.handle_type("error", self.errors)
|
||||||
self.requests_table = self.handle_type("request", self.requests)
|
self.requests_table = self.handle_type("request", self.requests)
|
||||||
self.events_table = self.handle_type("event", self.events)
|
self.events_table = self.handle_type("event", self.events)
|
||||||
if self.name == "xkb":
|
self.xge_events_table = self.handle_type("xge event", self.xge_events)
|
||||||
# FIXME: This should be fixed in the xml instead
|
|
||||||
self.events_table = [ "XKB base event" ]
|
|
||||||
|
|
||||||
def handle_type(self, kind, entries):
|
def handle_type(self, kind, entries):
|
||||||
# Do we have any entries at all?
|
# Do we have any entries at all?
|
||||||
|
|
@ -104,6 +117,7 @@ def emit_module(module):
|
||||||
output.write("%sconst struct static_extension_info_t %s%s_info = { // %s\n" % (t, prefix, module.name, module.xname))
|
output.write("%sconst struct static_extension_info_t %s%s_info = { // %s\n" % (t, prefix, module.name, module.xname))
|
||||||
format_strings("minor", module.requests_table)
|
format_strings("minor", module.requests_table)
|
||||||
format_strings("events", module.events_table)
|
format_strings("events", module.events_table)
|
||||||
|
format_strings("xge_events", module.xge_events_table)
|
||||||
format_strings("errors", module.errors_table)
|
format_strings("errors", module.errors_table)
|
||||||
output.write("\t.name = \"%s\",\n" % module.name)
|
output.write("\t.name = \"%s\",\n" % module.name)
|
||||||
output.write("};\n\n")
|
output.write("};\n\n")
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue