[vala] Use g_signal_connect_object also for lambda expressions
- From: Jürg Billeter <juergbi src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [vala] Use g_signal_connect_object also for lambda expressions
- Date: Mon, 10 Aug 2009 19:17:48 +0000 (UTC)
commit 56626afbf5bc40ddf8f98cddb5f5c57e867d2057
Author: Jürg Billeter <j bitron ch>
Date: Mon Aug 10 21:14:08 2009 +0200
Use g_signal_connect_object also for lambda expressions
Fixes bug 591240.
codegen/valagsignalmodule.vala | 30 ++++++++++++++----------------
1 files changed, 14 insertions(+), 16 deletions(-)
---
diff --git a/codegen/valagsignalmodule.vala b/codegen/valagsignalmodule.vala
index fe7c864..fecfba6 100644
--- a/codegen/valagsignalmodule.vala
+++ b/codegen/valagsignalmodule.vala
@@ -441,11 +441,18 @@ internal class Vala.GSignalModule : GObjectModule {
}
}
+ bool in_gobject_instance (Method m) {
+ bool result = false;
+ if (m.binding == MemberBinding.INSTANCE) {
+ result = m.this_parameter.parameter_type.data_type.is_subtype_of (gobject_type);
+ }
+ return result;
+ }
+
CCodeExpression? emit_signal_assignment (Assignment assignment) {
var sig = (Signal) assignment.left.symbol_reference;
var m = (Method) assignment.right.symbol_reference;
- var target_type_symbol = m.parent_symbol as TypeSymbol;
string connect_func;
bool disconnect = false;
@@ -454,12 +461,8 @@ internal class Vala.GSignalModule : GObjectModule {
if (sig is DynamicSignal) {
connect_func = head.get_dynamic_signal_connect_wrapper_name ((DynamicSignal) sig);
} else {
- if (m.binding == MemberBinding.INSTANCE) {
- if (target_type_symbol != null && target_type_symbol.is_subtype_of (gobject_type)) {
- connect_func = "g_signal_connect_object";
- } else {
- connect_func = "g_signal_connect";
- }
+ if (in_gobject_instance (m)) {
+ connect_func = "g_signal_connect_object";
} else {
connect_func = "g_signal_connect";
}
@@ -570,7 +573,7 @@ internal class Vala.GSignalModule : GObjectModule {
ccall.add_argument (new CCodeIdentifier ("self"));
}
if (!disconnect && !(sig is DynamicSignal)
- && target_type_symbol != null && target_type_symbol.is_subtype_of (gobject_type)) {
+ && in_gobject_instance (m)) {
// g_signal_connect_object
// fifth argument: connect_flags
@@ -660,7 +663,6 @@ internal class Vala.GSignalModule : GObjectModule {
handler.accept (codegen);
var m = (Method) handler.symbol_reference;
- var target_type_symbol = m.parent_symbol as TypeSymbol;
string connect_func;
bool disconnect = (method_type.method_symbol.name == "disconnect");
@@ -670,12 +672,8 @@ internal class Vala.GSignalModule : GObjectModule {
if (sig is DynamicSignal) {
connect_func = head.get_dynamic_signal_connect_wrapper_name ((DynamicSignal) sig);
} else {
- if (m.binding == MemberBinding.INSTANCE) {
- if (target_type_symbol != null && target_type_symbol.is_subtype_of (gobject_type)) {
- connect_func = "g_signal_connect_object";
- } else {
- connect_func = "g_signal_connect";
- }
+ if (in_gobject_instance (m)) {
+ connect_func = "g_signal_connect_object";
} else {
connect_func = "g_signal_connect";
}
@@ -782,7 +780,7 @@ internal class Vala.GSignalModule : GObjectModule {
ccall.add_argument (new CCodeIdentifier ("self"));
}
if (!disconnect && !(sig is DynamicSignal)
- && target_type_symbol != null && target_type_symbol.is_subtype_of (gobject_type)) {
+ && in_gobject_instance (m)) {
// g_signal_connect_object
// fifth argument: connect_flags
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]