summaryrefslogtreecommitdiff
path: root/tools/pm/WrapParser.pm
diff options
context:
space:
mode:
authorMurray Cumming <murrayc@usa.net>2004-01-29 20:50:37 +0000
committerMurray Cumming <murrayc@src.gnome.org>2004-01-29 20:50:37 +0000
commit79e4643b58443661842cf48035b25c61d67b337e (patch)
tree59bf7fe6aaa88da1cd1a67e0309124406a131ce2 /tools/pm/WrapParser.pm
parent2bc72bcc72d20a7801701adaf0cbfaceb7a3ed92 (diff)
downloadglibmm-79e4643b58443661842cf48035b25c61d67b337e.tar.gz
Add an optional custom_c_callback parameter to _WRAP_SIGNAL to allow
2004-01-29 Murray Cumming <murrayc@usa.net> * tools/pm/Parser.pm, Output.pm, tools/m4/signal.m4: Add an optional custom_c_callback parameter to _WRAP_SIGNAL to allow special code for the SelectionData& output parameter in Gtk::Widget signals. Hopefully we won't need too many more of these hacks - the m4 is becoming very hard to read, with all these nested ifelse() statements.
Diffstat (limited to 'tools/pm/WrapParser.pm')
-rw-r--r--tools/pm/WrapParser.pm32
1 files changed, 14 insertions, 18 deletions
diff --git a/tools/pm/WrapParser.pm b/tools/pm/WrapParser.pm
index e2166e2b..616f31f5 100644
--- a/tools/pm/WrapParser.pm
+++ b/tools/pm/WrapParser.pm
@@ -933,7 +933,8 @@ sub on_wrap_signal($)
my $bCustomDefaultHandler = 0;
my $bNoDefaultHandler = 0;
- if(scalar(@args) > 2) # If the optional argument is there.
+ my $bCustomCCallback = 0;
+ if(scalar(@args) > 2) # If optional arguments are there.
{
my $argRef = string_trim($args[2]);
if($argRef eq "custom_default_handler")
@@ -945,10 +946,15 @@ sub on_wrap_signal($)
{
$bNoDefaultHandler = 1;
}
+
+ if($argRef eq "custom_c_callback")
+ {
+ $bCustomCCallback = 1;
+ }
}
- $self->output_wrap_signal( $argCppDecl, $argCName, $$self{filename}, $$self{line_num}, $bCustomDefaultHandler, $bNoDefaultHandler);
+ $self->output_wrap_signal( $argCppDecl, $argCName, $$self{filename}, $$self{line_num}, $bCustomDefaultHandler, $bNoDefaultHandler, $bCustomCCallback);
}
# void on_wrap_vfunc()
@@ -1104,11 +1110,11 @@ sub output_wrap_check($$$$$$)
}
-# void output_wrap($CppDecl, $signal_name, $filename, $line_num, $bCustomDefaultHandler, $bNoDefaultHandler)
+# void output_wrap($CppDecl, $signal_name, $filename, $line_num, $bCustomDefaultHandler, $bNoDefaultHandler, $bCustomCCallback)
# Also used for vfunc.
-sub output_wrap_signal($$$$$$)
+sub output_wrap_signal($$$$$$$)
{
- my ($self, $CppDecl, $signal_name, $filename, $line_num, $bCustomDefaultHandler, $bNoDefaultHandler) = @_;
+ my ($self, $CppDecl, $signal_name, $filename, $line_num, $bCustomDefaultHandler, $bNoDefaultHandler, $bCustomCCallback) = @_;
#Some checks:
$self->output_wrap_check($CppDecl, $signal_name, $filename, $line_num, "WRAP_SIGNAL");
@@ -1117,7 +1123,7 @@ sub output_wrap_signal($$$$$$)
#Parse the method decaration and build an object that holds the details:
my $objCppSignal = &Function::new($CppDecl, $self);
- $$objCppSignal{class} = $$self{class}; #Remeber the class name for use in Outputter::output_wrap_signal().
+ $$objCppSignal{class} = $$self{class}; #Remember the class name for use in Outputter::output_wrap_signal().
# handle second argument:
@@ -1140,17 +1146,7 @@ sub output_wrap_signal($$$$$$)
}
}
- #If the C types and C++ types are different, then create a custom SignalProxy,
- #which will do the C-to-C++ conversion in its C callback.
-# my $no_type_conversion = $objCSignal->has_same_types($objCppSignal);
-# my $custom_signalproxy_name = "";
-# if($no_type_conversion ne 1)
-# {
-# $custom_signalproxy_name = $$objCppSignal{class} . "_" . $$objCppSignal{name};
-# $objOutputter->output_wrap_sig_custom($filename, $line_num, $objCSignal, $objCppSignal, $custom_signalproxy_name);
-# }
-
- $objOutputter->output_wrap_sig_decl($filename, $line_num, $objCSignal, $objCppSignal, $signal_name);
+ $objOutputter->output_wrap_sig_decl($filename, $line_num, $objCSignal, $objCppSignal, $signal_name, $bCustomCCallback);
if($bNoDefaultHandler eq 0)
{
@@ -1158,7 +1154,7 @@ sub output_wrap_signal($$$$$$)
my $bImplement = 1;
if($bCustomDefaultHandler) { $bImplement = 0; }
- $objOutputter->output_wrap_default_signal_handler_cc($filename, $line_num, $objCppSignal, $objCSignal, $bImplement);
+ $objOutputter->output_wrap_default_signal_handler_cc($filename, $line_num, $objCppSignal, $objCSignal, $bImplement, $bCustomCCallback);
}
}