diff options
author | Murray Cumming <murrayc@usa.net> | 2004-01-29 20:50:37 +0000 |
---|---|---|
committer | Murray Cumming <murrayc@src.gnome.org> | 2004-01-29 20:50:37 +0000 |
commit | 79e4643b58443661842cf48035b25c61d67b337e (patch) | |
tree | 59bf7fe6aaa88da1cd1a67e0309124406a131ce2 /tools/pm/WrapParser.pm | |
parent | 2bc72bcc72d20a7801701adaf0cbfaceb7a3ed92 (diff) | |
download | glibmm-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.pm | 32 |
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); } } |