[glibmm] gmmproc: _WRAP_SIGNAL: Add support for detail_name



commit 47897b6ea1804cc0cf2235cefa44a3cdbf23ab03
Author: Kjell Ahlstedt <kjell ahlstedt bredband net>
Date:   Sat May 23 08:19:47 2015 +0200

    gmmproc: _WRAP_SIGNAL: Add support for detail_name
    
    * tools/m4/signal.m4:
    * tools/pm/Output.pm:
    * tools/pm/WrapParser.pm: Add support for optional 'detail_name $name' and
    'two_signal_methods' parameter in _WRAP_SIGNAL. Bug #749034.

 tools/m4/signal.m4     |   34 +++++++++++++++++++++++++++++++++-
 tools/pm/Output.pm     |   12 +++++++-----
 tools/pm/WrapParser.pm |   46 ++++++++++++++++++++++++++++------------------
 3 files changed, 68 insertions(+), 24 deletions(-)
---
diff --git a/tools/m4/signal.m4 b/tools/m4/signal.m4
index 1e0ddb0..cb8cdf0 100644
--- a/tools/m4/signal.m4
+++ b/tools/m4/signal.m4
@@ -13,15 +13,29 @@ dnl               $8 = `custom_c_callback (boolean)',
 dnl               $9 = `deprecated' (boolean),
 dnl               $10 = `refdoc_comment',
 dnl               $11 = ifdef,
-dnl               $12 = exceptionHandler)
+dnl               $12 = exceptionHandler,
+dnl               $13 = detail_name,
+dnl               $14 = two_signal_methods (boolean))
 
 define(`_SIGNAL_PROXY',`
 ifelse(`$11',,,`#ifdef $11'
 )dnl
 ifelse(`$9',,,`_DEPRECATE_IFDEF_START
 ')dnl
+ifelse($13,,`dnl no detail_name
 $10
   Glib::SignalProxy`'_NUM($6)< $5`'_COMMA_PREFIX($6) > signal_$4`'();
+',dnl detail_name
+$14,0,`dnl
+$10
+  Glib::SignalProxyDetailed`'_NUM($6)< $5`'_COMMA_PREFIX($6) > signal_$4`'(const Glib::ustring& $13 = 
Glib::ustring());
+',`dnl detail_name and two_signal_methods
+$10
+  Glib::SignalProxy`'_NUM($6)< $5`'_COMMA_PREFIX($6) > signal_$4`'();
+
+$10
+  Glib::SignalProxyDetailed`'_NUM($6)< $5`'_COMMA_PREFIX($6) > signal_$4`'(const Glib::ustring& $13);
+')dnl end detail_name
 ifelse(`$9',,,`_DEPRECATE_IFDEF_END
 ')dnl
 ifelse(`$11',,,`#endif // $11
@@ -146,10 +160,28 @@ ifelse(`$11',,,`#ifdef $11'
 )dnl
 ifelse(`$9',,,`_DEPRECATE_IFDEF_START
 ')dnl
+ifelse($13,,`dnl no detail_name
+Glib::SignalProxy`'_NUM($6)< $5`'_COMMA_PREFIX($6) > __CPPNAME__::signal_$4`'()
+{
+  return Glib::SignalProxy`'_NUM($6)< $5`'_COMMA_PREFIX($6) >(this, &__CPPNAME__`'_signal_$4_info);
+}
+',dnl detail_name
+$14,0,`dnl
+Glib::SignalProxyDetailed`'_NUM($6)< $5`'_COMMA_PREFIX($6) > __CPPNAME__::signal_$4`'(const Glib::ustring& 
$13)
+{
+  return Glib::SignalProxyDetailed`'_NUM($6)< $5`'_COMMA_PREFIX($6) >(this, &__CPPNAME__`'_signal_$4_info, 
$13);
+}
+',`dnl detail_name and two_signal_methods
 Glib::SignalProxy`'_NUM($6)< $5`'_COMMA_PREFIX($6) > __CPPNAME__::signal_$4`'()
 {
   return Glib::SignalProxy`'_NUM($6)< $5`'_COMMA_PREFIX($6) >(this, &__CPPNAME__`'_signal_$4_info);
 }
+
+Glib::SignalProxyDetailed`'_NUM($6)< $5`'_COMMA_PREFIX($6) > __CPPNAME__::signal_$4`'(const Glib::ustring& 
$13)
+{
+  return Glib::SignalProxyDetailed`'_NUM($6)< $5`'_COMMA_PREFIX($6) >(this, &__CPPNAME__`'_signal_$4_info, 
$13);
+}
+')dnl end detail_name
 ifelse(`$9',,,`_DEPRECATE_IFDEF_END
 ')dnl
 ifelse(`$11',,,`#endif // $11
diff --git a/tools/pm/Output.pm b/tools/pm/Output.pm
index dc1fe83..e145489 100644
--- a/tools/pm/Output.pm
+++ b/tools/pm/Output.pm
@@ -585,12 +585,12 @@ sub output_wrap_create($$$)
 
 # void output_wrap_sig_decl($filename, $line_num, $objCSignal, $objCppfunc, $signal_name,
 #   $bCustomCCallback, $ifdef, $commentblock, $deprecated, $deprecation_docs,
-#   $newin, $exceptionHandler)
-sub output_wrap_sig_decl($$$$$$$$$$$$)
+#   $newin, $exceptionHandler, $detail_name, $bTwoSignalMethods)
+sub output_wrap_sig_decl($$$$$$$$$$$$$$)
 {
   my ($self, $filename, $line_num, $objCSignal, $objCppfunc, $signal_name,
       $bCustomCCallback, $ifdef, $commentblock, $deprecated, $deprecation_docs,
-      $newin, $exceptionHandler) = @_;
+      $newin, $exceptionHandler, $detail_name, $bTwoSignalMethods) = @_;
 
 # _SIGNAL_PROXY(c_signal_name, c_return_type, `<c_arg_types_and_names>',
 #               cpp_signal_name, cpp_return_type, `<cpp_arg_types>',`<c_args_to_cpp>',
@@ -637,7 +637,7 @@ sub output_wrap_sig_decl($$$$$$$$$$$$)
   my $conversions =
     convert_args_c_to_cpp($objCSignal, $objCppfunc, $line_num);
 
-  my $str = sprintf("_SIGNAL_PROXY(%s,%s,\`%s\',%s,%s,\`%s\',\`%s\',\`%s\',%s,\`%s\',%s,%s)dnl\n",
+  my $str = sprintf("_SIGNAL_PROXY(%s,%s,\`%s\',%s,%s,\`%s\',\`%s\',\`%s\',%s,\`%s\',%s,%s,%s,%s)dnl\n",
     $signal_name,
     $$objCSignal{rettype},
     $objCSignal->args_types_and_names_without_object(),
@@ -649,7 +649,9 @@ sub output_wrap_sig_decl($$$$$$$$$$$$)
     $deprecated,
     $doxycomment,
     $ifdef,
-    $exceptionHandler
+    $exceptionHandler,
+    $detail_name, # If a detailed name is supported (signal_name::detail_name)
+    $bTwoSignalMethods # If separate signal_xxx() methods for detailed and general name.
   );
 
   $self->append($str);
diff --git a/tools/pm/WrapParser.pm b/tools/pm/WrapParser.pm
index 56dbf45..f14ad57 100644
--- a/tools/pm/WrapParser.pm
+++ b/tools/pm/WrapParser.pm
@@ -1233,11 +1233,13 @@ sub on_wrap_signal($$)
   my $bNoDefaultHandler = 0;
   my $bCustomCCallback = 0;
   my $bRefreturn = 0;
-  my $ifdef;
+  my $ifdef = "";
   my $argDeprecated = "";
   my $deprecation_docs = "";
   my $newin = "";
   my $exceptionHandler = "";
+  my $detail_name = "";
+  my $bTwoSignalMethods = 0;
 
   while($#args >= 2) # If optional arguments are there.
   {
@@ -1246,23 +1248,19 @@ sub on_wrap_signal($$)
     {
       $bCustomDefaultHandler = 1;
     }
-
-    if($argRef eq "no_default_handler")
+    elsif($argRef eq "no_default_handler")
     {
       $bNoDefaultHandler = 1;
     }
-
-    if($argRef eq "custom_c_callback")
+    elsif($argRef eq "custom_c_callback")
     {
       $bCustomCCallback = 1;
     }
-
-    if($argRef eq "refreturn")
+    elsif($argRef eq "refreturn")
     {
       $bRefreturn = 1;
     }
-
-    if($argRef =~ /^deprecated(.*)/) #If deprecated is at the start.
+    elsif($argRef =~ /^deprecated(.*)/) #If deprecated is at the start.
     {
       $argDeprecated = "deprecated";
 
@@ -1271,27 +1269,36 @@ sub on_wrap_signal($$)
         $deprecation_docs = string_unquote(string_trim($1));
       }
     }
-
     elsif($argRef =~ /^newin(.*)/) #If newin is at the start.
     {
       $newin = string_unquote(string_trim($1));
     }
-
     elsif($argRef =~ /^ifdef(.*)/) #If ifdef is at the start.
     {
        $ifdef = $1;
     }
-    
     elsif($argRef =~ /^exception_handler\s+(.*)/) #If exception_handler at the start.
     {
-        $exceptionHandler = $1;
+      $exceptionHandler = $1;
+    }
+    elsif($argRef =~ /^detail_name\s+(.+)/) #If detail_name at the start.
+    {
+      $detail_name = $1;
+    }
+    elsif($argRef eq "two_signal_methods")
+    {
+      $bTwoSignalMethods = 1;
+    }
+    else
+    {
+      $self->error("_WRAP_SIGNAL: Invalid option '$argRef'.\n");
     }
   }
 
   $self->output_wrap_signal($argCppDecl, $argCName, $$self{filename}, $$self{line_num},
                             $bCustomDefaultHandler, $bNoDefaultHandler, $bCustomCCallback,
                             $bRefreturn, $ifdef, $commentblock, $argDeprecated, $deprecation_docs,
-                            $newin, $exceptionHandler);
+                            $newin, $exceptionHandler, $detail_name, $bTwoSignalMethods);
 }
 
 # void on_wrap_vfunc()
@@ -1557,12 +1564,14 @@ sub output_wrap_check($$$$$$)
 
 # void output_wrap($CppDecl, $signal_name, $filename, $line_num, $bCustomDefaultHandler,
 #                  $bNoDefaultHandler, $bCustomCCallback, $bRefreturn, $ifdef,
-#                  $commentblock, $deprecated, $deprecation_docs, $newin, $exceptionHandler)
-sub output_wrap_signal($$$$$$$$$$$$$$)
+#                  $commentblock, $deprecated, $deprecation_docs, $newin, $exceptionHandler,
+#                  $detail_name, $bTwoSignalMethods)
+sub output_wrap_signal($$$$$$$$$$$$$$$$$)
 {
   my ($self, $CppDecl, $signal_name, $filename, $line_num, $bCustomDefaultHandler,
       $bNoDefaultHandler, $bCustomCCallback, $bRefreturn, $ifdef,
-      $commentblock, $deprecated, $deprecation_docs, $newin, $exceptionHandler) = @_;
+      $commentblock, $deprecated, $deprecation_docs, $newin, $exceptionHandler,
+      $detail_name, $bTwoSignalMethods) = @_;
 
   #Some checks:
   return if ($self->output_wrap_check($CppDecl, $signal_name,
@@ -1596,7 +1605,8 @@ sub output_wrap_signal($$$$$$$$$$$$$$)
 
   $objOutputter->output_wrap_sig_decl($filename, $line_num, $objCSignal, $objCppSignal,
     $signal_name, $bCustomCCallback, $ifdef, $commentblock,
-    $deprecated, $deprecation_docs, $newin, $exceptionHandler);
+    $deprecated, $deprecation_docs, $newin, $exceptionHandler,
+    $detail_name, $bTwoSignalMethods);
 
   if($bNoDefaultHandler eq 0)
   {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]