@@ -51,6 +51,7 @@ fn parameter_types_and_values(
51
51
parameters : & [ ParsedFunctionParameter ] ,
52
52
type_names : & TypeNames ,
53
53
self_ty : & Name ,
54
+ mutable : bool ,
54
55
) -> Result < Parameters > {
55
56
let mut parameter_named_types_with_self = vec ! [ ] ;
56
57
let mut parameter_types_with_self = vec ! [ ] ;
@@ -66,10 +67,11 @@ fn parameter_types_and_values(
66
67
67
68
let parameter_named_types = parameter_named_types_with_self. join ( ", " ) ;
68
69
70
+ let is_const = if !mutable { " const" } else { "" } ;
69
71
// Insert the extra argument into the closure
70
72
let self_ty = self_ty. cxx_qualified ( ) ;
71
- parameter_named_types_with_self. insert ( 0 , format ! ( "{self_ty}& self" ) ) ;
72
- parameter_types_with_self. insert ( 0 , format ! ( "{self_ty}&" ) ) ;
73
+ parameter_named_types_with_self. insert ( 0 , format ! ( "{self_ty}{is_const} & self" ) ) ;
74
+ parameter_types_with_self. insert ( 0 , format ! ( "{self_ty}{is_const} &" ) ) ;
73
75
parameter_values_with_self. insert ( 0 , "self" . to_owned ( ) ) ;
74
76
75
77
Ok ( Parameters {
@@ -109,7 +111,8 @@ pub fn generate_cpp_signal(
109
111
let free_connect_ident_cpp = idents_helper. connect_name . cxx_unqualified ( ) ;
110
112
111
113
// Retrieve the parameters for the signal
112
- let parameters = parameter_types_and_values ( & signal. parameters , type_names, qobject_name) ?;
114
+ let parameters =
115
+ parameter_types_and_values ( & signal. parameters , type_names, qobject_name, signal. mutable ) ?;
113
116
let parameters_named_types = parameters. named_types ;
114
117
let parameters_named_types_with_self = parameters. named_types_with_self ;
115
118
let parameter_types_with_self = parameters. types_with_self ;
@@ -121,6 +124,8 @@ pub fn generate_cpp_signal(
121
124
let signal_handler_call = idents_helper. function_call ;
122
125
let signal_handler_drop = idents_helper. function_drop ;
123
126
let namespace = idents_helper. namespace ;
127
+ let reference_type = if !signal. mutable { " const &" } else { "&" } ;
128
+ let is_const = if !signal. mutable { " const" } else { "" } ;
124
129
125
130
let signal_handler_type = format ! ( "SignalHandler<::{namespace}::{param_struct} *>" ) ;
126
131
@@ -135,7 +140,7 @@ pub fn generate_cpp_signal(
135
140
// Generate the Q_SIGNAL if this is not an existing signal
136
141
if !signal. inherit {
137
142
generated. methods . push ( CppFragment :: Header ( format ! (
138
- "Q_SIGNAL void {signal_ident}({parameters_named_types});"
143
+ "Q_SIGNAL void {signal_ident}({parameters_named_types}){is_const} ;"
139
144
) ) ) ;
140
145
}
141
146
@@ -144,7 +149,7 @@ pub fn generate_cpp_signal(
144
149
r#"
145
150
namespace {namespace} {{
146
151
::QMetaObject::Connection
147
- {free_connect_ident_cpp}({qobject_ident_namespaced}& self, {signal_handler_alias_namespaced} closure, ::Qt::ConnectionType type);
152
+ {free_connect_ident_cpp}({qobject_ident_namespaced}{reference_type} self, {signal_handler_alias_namespaced} closure, ::Qt::ConnectionType type);
148
153
}} // namespace {namespace}
149
154
"#
150
155
} ,
@@ -177,7 +182,7 @@ pub fn generate_cpp_signal(
177
182
178
183
namespace {namespace} {{
179
184
::QMetaObject::Connection
180
- {free_connect_ident_cpp}({qobject_ident_namespaced}& self, {signal_handler_alias_namespaced} closure, ::Qt::ConnectionType type)
185
+ {free_connect_ident_cpp}({qobject_ident_namespaced}{reference_type} self, {signal_handler_alias_namespaced} closure, ::Qt::ConnectionType type)
181
186
{{
182
187
return ::QObject::connect(
183
188
&self,
0 commit comments