diff options
author | José Alburquerque <jaalburqu@svn.gnome.org> | 2012-09-30 23:18:08 -0400 |
---|---|---|
committer | José Alburquerque <jaalburqu@svn.gnome.org> | 2012-09-30 23:18:08 -0400 |
commit | d694160400455f2156f4b298c7f34bb1616ec894 (patch) | |
tree | 1bd8cfd222f7a0dd5cda73e013b1786af0fa66ae | |
parent | 2f382211f52ab2ae806eeb1a6cc5cd72047a15e4 (diff) | |
download | glibmm-d694160400455f2156f4b298c7f34bb1616ec894.tar.gz |
ActionGroup: Add the query_action() methods.
* tools/m4/base.m4:
* tools/m4/convert_base.m4:
* tools/m4/filelist.am:
* tools/m4/initialize.m4:
* tools/m4/initialize_base.m4:
* tools/m4/initialize_gio.m4:
* tools/m4/initialize_glib.m4:
* tools/m4/initialize_glibmm.m4: Move the _INITIALIZE macros into
their own files as is done for the _CONVERT macros so that some basic
types that are common (like initializing a bool& from a gboolean) can
be defined once and used in other circumstances.
* gio/src/dbusconnection.hg: Move an _INITIALIZATION macro to the
general files above (the gio initialize file).
* gio/src/actiongroup.hg: Add the query_action() methods (the needed
_INITIALIZATION macros are in the glib initialize file).
* tools/pm/Output.pm (convert_args_cpp_to_c): Correct the indentation
of the declarations of the C output variables and the setting of the
C++ output parameters from the C variables for methods that use the
output parameter feature of gmmproc.
-rw-r--r-- | ChangeLog | 27 | ||||
-rw-r--r-- | gio/src/actiongroup.hg | 3 | ||||
-rw-r--r-- | gio/src/dbusconnection.hg | 2 | ||||
-rw-r--r-- | tools/m4/base.m4 | 6 | ||||
-rw-r--r-- | tools/m4/convert_base.m4 | 23 | ||||
-rw-r--r-- | tools/m4/filelist.am | 5 | ||||
-rw-r--r-- | tools/m4/initialize.m4 | 4 | ||||
-rw-r--r-- | tools/m4/initialize_base.m4 | 51 | ||||
-rw-r--r-- | tools/m4/initialize_gio.m4 | 6 | ||||
-rw-r--r-- | tools/m4/initialize_glib.m4 | 13 | ||||
-rw-r--r-- | tools/m4/initialize_glibmm.m4 | 6 | ||||
-rw-r--r-- | tools/pm/Output.pm | 10 |
12 files changed, 126 insertions, 30 deletions
@@ -1,5 +1,32 @@ 2012-09-30 José Alburquerque <jaalburquerque@gmail.com> + ActionGroup: Add the query_action() methods. + + * tools/m4/base.m4: + * tools/m4/convert_base.m4: + * tools/m4/filelist.am: + * tools/m4/initialize.m4: + * tools/m4/initialize_base.m4: + * tools/m4/initialize_gio.m4: + * tools/m4/initialize_glib.m4: + * tools/m4/initialize_glibmm.m4: Move the _INITIALIZE macros into + their own files as is done for the _CONVERT macros so that some basic + types that are common (like initializing a bool& from a gboolean) can + be defined once and used in other circumstances. + + * gio/src/dbusconnection.hg: Move an _INITIALIZATION macro to the + general files above (the gio initialize file). + + * gio/src/actiongroup.hg: Add the query_action() methods (the needed + _INITIALIZATION macros are in the glib initialize file). + + * tools/pm/Output.pm (convert_args_cpp_to_c): Correct the indentation + of the declarations of the C output variables and the setting of the + C++ output parameters from the C variables for methods that use the + output parameter feature of gmmproc. + +2012-09-30 José Alburquerque <jaalburquerque@gmail.com> + RegEx: Add the get_has_cr_or_lf() method. * glib/src/regex.hg: diff --git a/gio/src/actiongroup.hg b/gio/src/actiongroup.hg index 195af00b..777fb869 100644 --- a/gio/src/actiongroup.hg +++ b/gio/src/actiongroup.hg @@ -33,6 +33,7 @@ namespace Glib class VariantBase; class VariantContainerBase; +class VariantType; } @@ -65,6 +66,8 @@ public: #m4 _CONVERSION(`gchar**',`std::vector<Glib::ustring>',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_DEEP)') _WRAP_METHOD(std::vector<Glib::ustring> list_actions() const, g_action_group_list_actions) + _WRAP_METHOD(bool query_action(const Glib::ustring& action_name, bool& enabled{>>}, Glib::VariantType& parameter_type{>>?}, Glib::VariantBase& state_hint{.>>}, Glib::VariantType& state_type{.>>?}, Glib::VariantBase& state{.>>?}), g_action_group_query_action) + _WRAP_METHOD(bool get_action_enabled(const Glib::ustring& action_name) const, g_action_group_get_action_enabled) _WRAP_METHOD(Glib::VariantType get_action_parameter_type(const Glib::ustring& action_name) const, g_action_group_get_action_parameter_type) diff --git a/gio/src/dbusconnection.hg b/gio/src/dbusconnection.hg index b903a790..4770b2a6 100644 --- a/gio/src/dbusconnection.hg +++ b/gio/src/dbusconnection.hg @@ -782,8 +782,6 @@ public: const Glib::VariantType& reply_type = Glib::VariantType()); #endif // G_OS_LINUX -#m4 _INITIALIZATION(`Glib::RefPtr<UnixFDList>&',`GUnixFDList*', `$3 = Glib::wrap($4)') - /** Finishes an operation started with call() (with a UnixFDList). * @param res A AsyncResult obtained from the SlotAsyncReady passed to * call(). diff --git a/tools/m4/base.m4 b/tools/m4/base.m4 index b6b61e2c..c846cfc3 100644 --- a/tools/m4/base.m4 +++ b/tools/m4/base.m4 @@ -59,6 +59,12 @@ dnl m4_include(convert.m4) dnl +dnl Initialization macros +dnl + +m4_include(initialize.m4) + +dnl dnl ----------------------- Utility Macros ------------------------- dnl diff --git a/tools/m4/convert_base.m4 b/tools/m4/convert_base.m4 index ff006067..8d372fa3 100644 --- a/tools/m4/convert_base.m4 +++ b/tools/m4/convert_base.m4 @@ -46,29 +46,6 @@ define(`_CONVERSION',` m4_ifelse(`$3',,,`define(CF`'__HASH2(`$1',`$2'),`$3')') ') -# _INITIALIZE(target_type, fromtype, output_param_name, c_return, wrap_line) -# -# Print an initialize statement from ctype to cpptype -define(`_INITIALIZE',`dnl -m4_ifelse(`$1',void,`$4',`dnl -pushdef(`__INI',`IN`'__HASH2(`$1',`$2')')dnl -m4_ifdef(__INI,`m4_indir(__INI,m4_substr(`$1',`0',m4_decr(m4_len(`$1'))),`$2',`$3', $4)',` -m4_errprint(`No initialization for type $1 from type $2 defined (line: $5, output param: $3, c return: $4) -') -m4_m4exit(1) -')`'dnl -')`'dnl -') - -# _INITIALIZATION(fromtype, totype, initialization) -# -# Functions for populating initialization tables. -# -define(`_INITIALIZATION',` -m4_ifelse(`$3',,,`define(IN`'__HASH2(`$1',`$2'),m4_patsubst(`$3',`; +',`; - '))') -') - define(`_EQUAL',`define(EV`'__HASH(`$1'),`$2')') /*******************************************************************/ diff --git a/tools/m4/filelist.am b/tools/m4/filelist.am index 7dbbd78d..04d0b01b 100644 --- a/tools/m4/filelist.am +++ b/tools/m4/filelist.am @@ -20,6 +20,11 @@ files_codegen_m4 = \ doc.m4 \ enum.m4 \ gerror.m4 \ + initialize.m4 \ + initialize_base.m4 \ + initialize_gio.m4 \ + initialize_glib.m4 \ + initialize_glibmm.m4 \ list.m4 \ member.m4 \ method.m4 \ diff --git a/tools/m4/initialize.m4 b/tools/m4/initialize.m4 new file mode 100644 index 00000000..0c41505f --- /dev/null +++ b/tools/m4/initialize.m4 @@ -0,0 +1,4 @@ +dnl Other libraries, such as libgnomeuimm, can provide their own initialize.m4 +dnl files, maybe choosing to include the same files as this one. + +include(initialize_glibmm.m4) diff --git a/tools/m4/initialize_base.m4 b/tools/m4/initialize_base.m4 new file mode 100644 index 00000000..138fe427 --- /dev/null +++ b/tools/m4/initialize_base.m4 @@ -0,0 +1,51 @@ +dnl +dnl Macros for keeping track of how to initialize a C++ from a C type. + +# +# Define a hashing for names +# +define(`__HASH',`__`'m4_translit(`$*',`ABCDEFGHIJKLMNOPQRSTUVWXYZ<>[]&*, ',`abcdefghijklmnopqrstuvwxyzVBNMRSC_')`'') +define(`__EQUIV',`m4_ifdef(EV`'__HASH(`$1'),EV`'__HASH(`$1'),`$1')') + +dnl __HASH2(firsttype, secondtype) +dnl +dnl Provides a textual combination of the two given types which can be used as +dnl a hash to store and retrieve conversions and initializations. It first +dnl sees if the two types have equivalent types that should be used in their +dnl places (using the __EQUIV macro above). Since the types returned by +dnl __EQUIV may contain commas (because of types such as std::map<>), quote the +dnl call to the macro to avoid the types to be interpreted as more than one +dnl argument to the pushdef() calls. Also quote the expansion of the __E1 and +dnl __E2 macros in the m4_ifelse for the same reason. +define(`__HASH2',`dnl +pushdef(`__E1',`__EQUIV(`$1')')pushdef(`__E2',`__EQUIV(`$2')')dnl +m4_ifelse(_QUOTE(__E1),_QUOTE(__E2),`__EQ',__HASH(__E1)`'__HASH(__E2))`'dnl +popdef(`__E1')popdef(`__E2')`'') + +define(`IN__EQ',`$3') + +# _INITIALIZE(target_type, fromtype, output_param_name, c_return, wrap_line) +# +# Print an initialize statement from ctype to cpptype +define(`_INITIALIZE',`dnl +m4_ifelse(`$1',void,`$4',`dnl +pushdef(`__INI',`IN`'__HASH2(`$1',`$2')')dnl +m4_ifdef(__INI,`m4_indir(__INI,m4_substr(`$1',`0',m4_decr(m4_len(`$1'))),`$2',`$3', $4)',` +m4_errprint(`No initialization for type $1 from type $2 defined (line: $5, output param: $3, c return: $4) +') +m4_m4exit(1) +')`'dnl +')`'dnl +') + +# _INITIALIZATION(fromtype, totype, initialization) +# +# Functions for populating initialization tables. +# +define(`_INITIALIZATION',` +m4_ifelse(`$3',,,`define(IN`'__HASH2(`$1',`$2'),m4_patsubst(`$3',`; +',`; + '))') +') + + +include(initialize_glib.m4) diff --git a/tools/m4/initialize_gio.m4 b/tools/m4/initialize_gio.m4 new file mode 100644 index 00000000..fcfd145d --- /dev/null +++ b/tools/m4/initialize_gio.m4 @@ -0,0 +1,6 @@ +dnl +dnl Initializations for giomm C++ types from Gio C types. +dnl + +dnl UnixFDList +_INITIALIZATION(`Glib::RefPtr<UnixFDList>&',`GUnixFDList*', `$3 = Glib::wrap($4)') diff --git a/tools/m4/initialize_glib.m4 b/tools/m4/initialize_glib.m4 new file mode 100644 index 00000000..649fde6a --- /dev/null +++ b/tools/m4/initialize_glib.m4 @@ -0,0 +1,13 @@ +dnl +dnl Initialization rules for glibmm C++ types from Glib C types. +dnl + +dnl Basic Types +_INITIALIZATION(`bool&',`gboolean',`$3 = static_cast<bool>($4)') + + +dnl VariantBase +_INITIALIZATION(`Glib::VariantBase&',`GVariant*',`$3 = Glib::wrap($4)') + +dnl VariantType +_INITIALIZATION(`Glib::VariantType&',`const GVariantType*',`$3 = Glib::wrap(const_cast<GVariantType*>($4))') diff --git a/tools/m4/initialize_glibmm.m4 b/tools/m4/initialize_glibmm.m4 new file mode 100644 index 00000000..a5fbecfd --- /dev/null +++ b/tools/m4/initialize_glibmm.m4 @@ -0,0 +1,6 @@ +dnl $Id$ + +include(initialize_base.m4) +include(initialize_glib.m4) +include(initialize_gio.m4) + diff --git a/tools/pm/Output.pm b/tools/pm/Output.pm index bd8fb80e..5312218e 100644 --- a/tools/pm/Output.pm +++ b/tools/pm/Output.pm @@ -868,9 +868,9 @@ sub convert_args_cpp_to_c($$$$$) my $c_param_types = $$objCDefsFunc{param_types}; my $c_param_names = $$objCDefsFunc{param_names}; - my @conversions; - my @declarations; - my @initializations; + my @conversions = (); + my @declarations = (); + my @initializations = (); my $num_c_args_expected = scalar(@{$c_param_types}); if( !($static) ) { $num_c_args_expected--; } #The cpp method will need an Object* paramater at the start. @@ -991,7 +991,7 @@ sub convert_args_cpp_to_c($$$$$) push(@conversions, "&" . $cOutputParamName); - push(@initializations, sprintf(" _INITIALIZE(\`%s\',%s,%s,%s,%s);", + push(@initializations, sprintf("_INITIALIZE(\`%s\',%s,%s,%s,%s);", $cppParamType, $cOutputParamType, $cppParamName, @@ -1016,7 +1016,7 @@ sub convert_args_cpp_to_c($$$$$) } } - return ( join(", ", @conversions), join("\n ", @declarations), + return ( join(", ", @conversions), join("\n", @declarations), join("\n ", @initializations) ); } |