mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-26 12:12:10 +01:00
codegen: Use g_signal_emit to emit signals
We were using emit_by_name which implies looking up for the signal name, while the generated code can easily remember the signal ID and use it instead, allowing direct access to the signal emission.
This commit is contained in:
parent
39e018e151
commit
88d48a7a22
@ -1728,6 +1728,22 @@ class CodeGenerator:
|
|||||||
self.outfile.write(" &%s_%s.parent_struct,\n" % (prefix, a.name))
|
self.outfile.write(" &%s_%s.parent_struct,\n" % (prefix, a.name))
|
||||||
self.outfile.write(" NULL\n" "};\n" "\n")
|
self.outfile.write(" NULL\n" "};\n" "\n")
|
||||||
|
|
||||||
|
def generate_signals_enum_for_interface(self, i):
|
||||||
|
if not i.signals:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.outfile.write("enum\n{\n")
|
||||||
|
for s in i.signals:
|
||||||
|
self.outfile.write(f" {s.upper_id_name},\n")
|
||||||
|
self.outfile.write("};\n" "\n")
|
||||||
|
|
||||||
|
self.outfile.write(
|
||||||
|
"static unsigned "
|
||||||
|
f"{i.signals_enum_name}[{len(i.signals)}] = {{ 0 }};"
|
||||||
|
"\n"
|
||||||
|
"\n"
|
||||||
|
)
|
||||||
|
|
||||||
def generate_introspection_for_interface(self, i):
|
def generate_introspection_for_interface(self, i):
|
||||||
self.outfile.write(
|
self.outfile.write(
|
||||||
"/* ---- Introspection data for %s ---- */\n" "\n" % (i.name)
|
"/* ---- Introspection data for %s ---- */\n" "\n" % (i.name)
|
||||||
@ -2164,15 +2180,17 @@ class CodeGenerator:
|
|||||||
)
|
)
|
||||||
self.write_gtkdoc_deprecated_and_since_and_close(s, self.outfile, 2)
|
self.write_gtkdoc_deprecated_and_since_and_close(s, self.outfile, 2)
|
||||||
self.outfile.write(
|
self.outfile.write(
|
||||||
' g_signal_new ("%s",\n'
|
f" {i.signals_enum_name}[{s.upper_id_name}] =\n"
|
||||||
" G_TYPE_FROM_INTERFACE (iface),\n"
|
' g_signal_new ("%s",\n'
|
||||||
" G_SIGNAL_RUN_LAST,\n"
|
" G_TYPE_FROM_INTERFACE (iface),\n"
|
||||||
" G_STRUCT_OFFSET (%sIface, %s),\n"
|
" G_SIGNAL_RUN_LAST,\n"
|
||||||
" NULL,\n" # accumulator
|
" G_STRUCT_OFFSET (%sIface, %s),\n"
|
||||||
" NULL,\n" # accu_data
|
" NULL,\n" # accumulator
|
||||||
" g_cclosure_marshal_generic,\n"
|
" NULL,\n" # accu_data
|
||||||
" G_TYPE_NONE,\n"
|
" g_cclosure_marshal_generic,\n"
|
||||||
" %d" % (s.name_hyphen, i.camel_name, s.name_lower, len(s.args))
|
" G_TYPE_NONE,\n"
|
||||||
|
" %d"
|
||||||
|
% (s.name_hyphen, i.camel_name, s.name_lower, len(s.args))
|
||||||
)
|
)
|
||||||
for a in s.args:
|
for a in s.args:
|
||||||
self.outfile.write(", %s" % (a.gtype))
|
self.outfile.write(", %s" % (a.gtype))
|
||||||
@ -2496,7 +2514,10 @@ class CodeGenerator:
|
|||||||
for a in s.args:
|
for a in s.args:
|
||||||
self.outfile.write(",\n %sarg_%s" % (a.ctype_in, a.name))
|
self.outfile.write(",\n %sarg_%s" % (a.ctype_in, a.name))
|
||||||
self.outfile.write(
|
self.outfile.write(
|
||||||
")\n" "{\n" ' g_signal_emit_by_name (object, "%s"' % (s.name_hyphen)
|
")\n"
|
||||||
|
"{\n"
|
||||||
|
" g_signal_emit (object, "
|
||||||
|
f"{i.signals_enum_name}[{s.upper_id_name}], 0"
|
||||||
)
|
)
|
||||||
for a in s.args:
|
for a in s.args:
|
||||||
self.outfile.write(", arg_%s" % a.name)
|
self.outfile.write(", arg_%s" % a.name)
|
||||||
@ -5227,6 +5248,7 @@ class CodeGenerator:
|
|||||||
self.generate_body_preamble()
|
self.generate_body_preamble()
|
||||||
for i in self.ifaces:
|
for i in self.ifaces:
|
||||||
self.generate_interface_intro(i)
|
self.generate_interface_intro(i)
|
||||||
|
self.generate_signals_enum_for_interface(i)
|
||||||
self.generate_introspection_for_interface(i)
|
self.generate_introspection_for_interface(i)
|
||||||
self.generate_interface(i)
|
self.generate_interface(i)
|
||||||
self.generate_property_accessors(i)
|
self.generate_property_accessors(i)
|
||||||
|
@ -369,7 +369,11 @@ class Signal:
|
|||||||
if overridden_name:
|
if overridden_name:
|
||||||
name = overridden_name
|
name = overridden_name
|
||||||
self.name_lower = utils.camel_case_to_uscore(name).lower().replace("-", "_")
|
self.name_lower = utils.camel_case_to_uscore(name).lower().replace("-", "_")
|
||||||
|
self.name_upper = self.name_lower.upper()
|
||||||
self.name_hyphen = self.name_lower.replace("_", "-")
|
self.name_hyphen = self.name_lower.replace("_", "-")
|
||||||
|
self.upper_id_name = "_".join(
|
||||||
|
[cns_upper, containing_iface.name_upper, self.name_upper]
|
||||||
|
)
|
||||||
|
|
||||||
arg_count = 0
|
arg_count = 0
|
||||||
for a in self.args:
|
for a in self.args:
|
||||||
@ -540,3 +544,6 @@ class Interface:
|
|||||||
|
|
||||||
for a in self.annotations:
|
for a in self.annotations:
|
||||||
a.post_process(interface_prefix, cns, cns_upper, cns_lower, self)
|
a.post_process(interface_prefix, cns, cns_upper, cns_lower, self)
|
||||||
|
|
||||||
|
if self.signals:
|
||||||
|
self.signals_enum_name = "_".join([cns_upper, self.name_upper, "SIGNALS"])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user