2.35.8 (unstable); 2013-02-21 Murray Cumming <murrayc@murrayc.com> Fix the build with --enable-warnings=fatal. * glib/src/threads.hg: The GThread definition is now deprecated, meaning it should only be used via a pointer. However, we depend on it, so this temporarily undefs the deprecation, so we can still use those checks elsewhere in the build. It looks like we will have to do a third version of Glib::Threads, after already replacing Glib::Thread. This fixes make distcheck. 2013-02-21 Kjell Ahlstedt <kjell.ahlstedt@bredband.net> Signal*::connect(): Make them less thread-unsafe. * glib/glibmm/main.cc: Make SignalTimeout::connect(), connect_seconds(), SignalIdle::connect() and SignalChildWatch::connect() less thread-unsafe by moving conn_node->install() to before g_source_attach(). * glib/glibmm/main.h: Describe that the Signal*::connect*() methods that return a sigc::connection are not thread-safe. Bug #396958. 2013-02-20 Kjell Ahlstedt <kjell.ahlstedt@bredband.net> Signal[Timeout|Idle]::connect_once() docs: Warn about thread-unsafety. * glib/glibmm/main.cc: Fix an incomplete comment. * glib/glibmm/main.h: SignalTimeout::connect_once(), connect_seconds_once(), SignalIdle::connect_once(): Describe the caution necessary because sigc::trackable-derived objects are not thread-safe. Bug #396963. 2013-02-20 Kjell Ahlstedt <kjell.ahlstedt@bredband.net> ThreadPool::push() docs: Note that sigc::trackable is not thread-safe. * glib/glibmm/threadpool.h: push(): Describe how sigc::trackable-derived classes can be used in a thread-safe way. * glib/src/threads.hg: create(): Correct the description added in the previous commit. Bug #512348. 2013-02-20 Kjell Ahlstedt <kjell.ahlstedt@bredband.net> Threads::Thread::create(): Update the documentation. * examples/thread/thread.cc: Don't derive from sigc::trackable. * glib/src/threads.hg: create(): Describe how sigc::trackable-derived classes can be used in a thread-safe way. Bug #512348. 2013-01-30 Kjell Ahlstedt <kjell.ahlstedt@bredband.net> Predefine G_OS_UNIX or G_OS_WIN32 in Doxygen's configuration file. * docs/reference/Doxyfile.in: Predefine either G_OS_UNIX or G_OS_WIN32, depending on HOST_WINDOWS_NATIVE. Update to Doxygen 1.8.3 status. * glib/src/iochannel.hg: Remove the DOXYGEN_SHOULD_SKIP_THIS that was added just to get Windows-specific methods included in the documentation. 2013-01-30 Kjell Ahlstedt <kjell.ahlstedt@bredband.net> DBus::[Connection|Proxy]: Change ifdef G_OS_LINUX to ifdef G_OS_UNIX. * gio/src/dbusconnection.[ccg|hg]: * gio/src/dbusproxy.[ccg|hg]: Change G_OS_LINUX to G_OS_UNIX. Glib does not define G_OS_LINUX. Correct function declarations for DBus::Proxy::call(). 2013-01-29 Kjell Ahlstedt <kjell.ahlstedt@bredband.net> gmmproc: Improve the conversion of documentation to Doxygen format. * tools/defs_gen/docextract.py: Handle 'Since ' without a colon. * tools/m4/signal.m4: * tools/pm/Output.pm: When a function declaration is surrounded by ifdef/endif, put its documentation inside the ifdef/endif. * tools/pm/DocsParser.pm: Handle 'Since ' without a colon. Escape most backslashes, not just \r and \n. Convert more <tags> to something that Doxygen understands. 2013-01-27 Kjell Ahlstedt <kjell.ahlstedt@bredband.net> Documentation: Fix many warnings from Doxygen. * gio/src/gio_docs_override.xml: * glib/src/glib_docs_override.xml: Move "Since: n.m" from the <return> to the <description> entries. gmmproc adds a period at the end of the @return Doxygen command, and Doxygen warns for "@newin{n,m}.". * glib/glibmm/interface.h: * glib/glibmm/stringutils.h: * glib/glibmm/vectorutils.h: * gio/src/*.hg: * glib/src/*.hg: (Here "*" means "many", not "all") Examples of changes: Add missing @param. Change names of parameters, to make them equal in function declaration and @param command. Change "@name" to "@a name". Change "<ulink url=" to "<a href=". 2013-01-17 José Alburquerque <jaalburquerque@gmail.com> TlsConnection: Wrap the virtual functions. * gio/src/tlsconnection.hg: Wrap the three virtual functions that were left as TODO's now that it's possible to wrap virtual functions with slots. * tools/m4/vfunc.m4: Use 'retval' instead of 'result' for variables that store the result of the C base virtual function invocation and the C++ virtual function invocation because 'result' conflicts with the AsyncResult 'result' parameter of the handshake_finish_vfunc(). 2013-01-16 José Alburquerque <jaalburquerque@gmail.com> gmmproc: _WRAP_VFUNC: Support the wrapping of slots. * tools/pm/WrapParser.pm (on_wrap_vfunc): Add support for parsing the additional 'slot_name', 'slot_callback', and 'no_slot_copy' options that do the same thing as the corresponding _WRAP_METHOD options (ie. specify the name of the C++ slot parameter, the name of the callback function and whether to use the original slot or a copy of it, respectively. Also pass the options along to: (output_wrap_vfunc): Store the options in the C++ virtual function object so they can be tested for when converting the parameters and composing the _VFUNC* m4 macro calls. * tools/pm/Output.pm (output_wrap_vfunc_cc): - Append the additional 'slot_type', 'slot_name' and 'no_slot_copy' parameters to the _VFUNC_CC m4 macro invocation so that it can include code for the vfunc to copy the slot parameter and pass it on to the C function. - Also append the additional 'slot_type' and 'c_data_param_name' to the _VFUNC_PCC m4 macro so that it knows the slot type and the C gpointer parameter name that contains the slot so that the macro can generate code to extract the slot from the data parameter and pass the slot on to the C++ virtual function. (convert_args_c_to_cpp): - Rewritten so that it loops through the C++ parameters so that it is possible to re-order the parameters using the existing mapping functionality that allows parameters to be re-ordered for the _WRAP_[CREATE|CTOR|METHOD] macros. Also re-written so that it knows how to deal with slot parameters. * tools/m4/vfunc.m4 (_VFUNC_PCC): Modified to accept the additional 'slot_type' and 'c_data_param_name' arguments and to insert code to extract the slot from the C gpointer data parameter to be passed on to the C++ virtual function. (_VFUNC_CC): Modified to accept the additional 'slot_type', 'slot_name' and 'no_slot_copy' arguments and to insert code to either copy the slot in a 'slot_copy' variable or set the variable to the actual slot (if it's so been specified) which is then passed on to the C function. 2013-01-16 José Alburquerque <jaalburquerque@gmail.com> gmmproc: _WRAP_[CREATE|CTOR|METHOD]: Allow any order of {} options. * tools/pm/Function.pm: Make it possible to use any order desired of the options to specify whether parameters should be optional or should be re-ordered in the _WRAP_* directives. 2013-01-14 Kjell Ahlstedt <kjell.ahlstedt@bredband.net> Gio::File: Remove refreturn to avoid memory leaks. * gio/src/file.hg: Remove the refreturn argument from _WRAP_METHOD for read() and 13 other methods. The glib functions add a ref. Change @newin2p24 to @newin{2,24}. Bug #691606. 2013-01-09 José Alburquerque <jaalburquerque@gmail.com> giomm.h: Add the tls[client|server]connection.h headers. * gio/giomm.h: Add the two new headers. 2013-01-08 José Alburquerque <jaalburquerque@gmail.com> giomm: Add the Tls[Client|Server]Connection classes. * gio/src/tlsclientconnection.{ccg,hg}: Add the new client sources wrapping the methods and properties. * gio/src/tlsserverconnection.{ccg,hg}: Add the new server sources wrapping its single property. * gio/src/filelist.am: Include the new sources in the list of files to be built. * gio/src/enums.hg: Add the TlsAuthenticationMode enum needed for the server class here because it is documented in the Tls Overview section of the C API's documentation and not as part of any other class. * tools/m4/convert_gio.m4: Add a necessary conversion. * gio/src/tlsdatabase.{ccg,hg}: Fix the includes so that the tlscertificate.h header file does not have to be included in the .h file but instead in the .c file. 2013-01-07 José Alburquerque <jaalburquerque@gmail.com> giomm.h: Add the new tls*.h headers. * gio/giomm.h: Add the tls[connection|database|filedatabase|interaction].h headers. 2013-01-07 José Alburquerque <jaalburquerque@gmail.com> Tls[Database|Interaction|Passowrd]: Const corrections. * gio/src/tlsdatabase.hg (verify_chain): (verify_chain_async): Accept the SocketConnectable as a const because it is used to check for certificates that have been pinned (marked as good) for a specific domain in a browser session and not modified. (lookup_certificate_issuer) (lookup_certificate_issuer_async): Accept the TlsCertificate for which to look for the issuer as const because it is not modified according to the docs. * gio/src/tlsinteraction.hg (ask_password): (ask_password_async) (invoke_ask_password): Accept the TlsPassword as non-const because the docs say that it is filled in by the methods, not used to compare a user entry with an existing password. * gio/src/tlspassword.hg (get_value_vfunc): (get_default_warning_vfunc): Make these const because they are getter functions. * tools/m4/convert_gio.m4: Adjust the conversions according to above changes. 2013-01-07 Kjell Ahlstedt <kjell.ahlstedt@bredband.net> gmmproc: _WRAP_ENUM: Skip enum constants whose names are deleted. * tools/pm/Enum.pm, build_element_list(): If a custom substitution argument in _WRAP_ENUM() removes all of an enum constant's name, exclude that constant from the element list. Useful for GdkEventType. Bug #544694. 2013-01-07 Kjell Ahlstedt <kjell.ahlstedt@bredband.net> gmmproc: Improve the search for documentation of enums. * tools/pm/Enum.pm, build_element_list(): Search for value documentation before custom substitutions are applied to the element name. Bug #544694. 2013-01-03 José Alburquerque <jaalburquerque@gmail.com> giomm: Add the TlsConnection class. * gio/src/filelist.am: * gio/src/tlsconnection.{ccg,hg}: Add the new sources wrapping the methods, properties and signals of the new class. Also add the sources to the list of files to be built and add the virtual functions as a TODO. * gio/src/gio_vfuncs.defs: Add the definitions of the virtual functions of the class for when the virtual functions are wrapped. * tools/m4/convert_gio.m4: Add conversions relevant to wrapping the class. 2013-01-03 José Alburquerque <jaalburquerque@gmail.com> TlsDatabase: Add a TODO to wrap virtual functions. * gio/src/tlsdatabase.hg: Add the virtual functions but as a TODO so that the parameters can be properly ordered according to the order in the methods. * gio/src/gio_vfuncs.defs: Add the virtual function definitions for when the vfuncs are wrapped. * gio/src/tlscertificate.hg: Do not wrap a write-only construct-only property. 2013-01-03 José Alburquerque <jaalburquerque@gmail.com> TlsDatabase: Reorder parameters so that flags can have defaults. * gio/src/tlsdatabase.hg (lookup_certificate_issuer): (lookup_certificate_issuer_async): Reorder the parameters in these methods as is done in the other methods so that the flag parameter can be last and have a default value. 2013-01-03 José Alburquerque <jaalburquerque@gmail.com> giomm: Add the TlsDatabase class which implements TlsFileDatabase. * gio/src/filelist.am: * gio/src/tlsdatabase.{ccg,hg}: Add the sources wrapping the C functions and include the sources in the list of files to be built. * tools/m4/convert_gio.m4: Add the necessary conversions for the wrapped methods in the sources. * gio/src/tlsfiledatabase.hg: Add a TODO. 2013-01-02 José Alburquerque <jaalburquerque@gmail.com> giomm: Add the TlsFileDatabase interface. * gio/src/filelist.am: * gio/src/tlsfiledatabase.{ccg,hg}: Add the new sources wrapping a single property and include them in the list of files to be built. * gio/src/tlsinteraction.hg: Correct a typo. 2013-01-01 José Alburquerque <jaalburquerque@gmail.com> giomm: Add the TlsInteraction class. * gio/src/tlsinteraction.{ccg,hg}: * gio/src/filelist.am: Add the sources wrapping the C functions and include the sources in the build. * gio/src/gio_vfuncs.defs: Add the virtual functions of the class. The vfuncs are not wrapped yet so that gmmproc can be modified so that virtual functions with slot parameters can be wrapped as is already possible with methods. * tools/m4/convert_gio.m4: Add necessary conversions. 2012-12-28 José Alburquerque <jaalburquerque@gmail.com> gmmproc: _WRAP_METHOD: Ensure that slot parameters can be optional. * tools/pm/Output.pm (output_wrap_meth): Only pass the slot parameters to the m4 _*METHOD() macros if convert_args_cpp_to_c() signals that a possible slot parameter should be included. (convert_args_cpp_to_c): Add a boolean called 'include_slot' to the objCppfunc object that is by default false that is set when a slot parameter is encountered and should converted. 2012-12-28 José Alburquerque <jaalburquerque@gmail.com> Variant: Allow containing complex types in arrays and in variants. * glib/src/variant.hg (Variant< Variant<T> >): Add a new class capable of containing any Variant<>. The class is just like Variant<VariantBase> except that with it, it is now possible to store and handle complex variant types in a variant easily in a C++ way. The modified test below exemplifies. (Variant< std::vector<T> >::create): Create a Variant<> for each of the members in the vector and then use g_variant_builder_add_value() to add the underlying GVariant of the wrapped elements in the builder instead of using the variadic g_variant_builder_add() function which causes problems when dealing with types that are more complex than basic ones. (Variant< std::vector<T> >::get_child): Rewritten to get the child as a GVariant, wrap the GVariant in a Variant<> and then get its value instead of assuming that the array in the variant is a fixed array of basic types so that complex types are supported in arrays. (Variant< std::vector<T> >::get): Rewritten as get_child() above so that the elements in the array are gotten as a GVariant, wrapped in a Variant<> and then retrieved and placed in the resulting vector, again, to ensure that a vector of complex types can be stored in a variant. * tests/glibmm_variant/main.cc: Modify the test to ensure that any type other than basic ones are supported. 2012-12-28 Kjell Ahlstedt <kjell.ahlstedt@bredband.net> Gio::Action: Add more documentation of get_state_hint() and get_state(). * gio/src/action.hg: get_state_hint() and get_state() returns void, which makes them useless. That can't be fixed until the next ABI break. Explain in the documentation what to do instead of calling these methods. Bug #690134. 2012-12-27 Kjell Ahlstedt <kjell.ahlstedt@bredband.net> SignalProxy: Fix the documentation, especially of connect_notify(). * glib/src/signalproxy.h.m4: Many small fixes of the documentation, and a more thorough rewrite of the doc of SignalProxy[0-6]::connect_notify(). Bug #126213, comment 5. 2012-12-18 Andrew Potter <agpotter@gmail.com> VariantBase: Add operator for BoolExpr (const void*). * glib/src/variant.{ccg,hg}: Adds operator BoolExpr. Also deletes relational operators to prevent unexpected conversion. Bug #690121. 2012-12-13 Andrew Potter <agpotter@gmail.com> SimpleAction: Fix stateful action constructor typo, allowing use. * gio/src/simpleaction.hg: Fix 'sate' typo to 'state', allowing the constructor to be used. Bug #690122. 2012-12-12 Andrew Potter <agpotter@gmail.com> Threads: Add create(slot, name). * glib/src/threads.{ccg,hg}: Add a method to create named threads. Bug #689863. 2012-11-20 Andrew Potter <agpotter@gmail.com> VariantType: Add create_tuple(). * glib/src/varianttype.{ccg,hg}: Add the method following the style of VariantContainerBase::create_tuple(), completing a TODO. Bug #688682. 2012-11-20 José Alburquerque <jaalburquerque@gmail.com> VariantType: Correct the referencing in the create*() methods. * tools/m4/convert_glib.m4: Correct the 'GVarianType*' to VariantType conversion to not take an extra reference when wrapping the GVariantType in the VariantType. * glib/src/variant.hg: * glib/src/varianttype.hg: Also move the 'const GVariantType' conversion from the global glib convert file (above) to these local files because it takes an extra reference of the GVariantType. Bug #688440 (Andrew Potter). 2012-11-18 José Alburquerque <jaalburquerque@gmail.com> gmmproc: Documentation: Adjust if the method has a slot param. * tools/pm/WrapParser.pm (on_wrap_method): Pass the objCppfunc object to the DocParser::lookup_documentation() subroutine so that it can decide if the final parameter of the C function should be excluded from the docs. The final parameter (which would be a gpointer user_data parameter) would be omitted if the C++ method has a slot parameter. * tools/pm/DocsParser.pm (lookup_documentation): Pass the objCppfunc on to the append_parameter_docs() subroutine which does what's described above. (append_parameter_documentation): Decide whether to skip the final C parameter as described above. Also rename 'callback' parameters to 'slot' and use '@a slot' instead of '@a callback' in the main description. (substitute_identifiers): Replace C *Callback types to C++ Slot* types. Bug #688587. 2012-11-18 José Alburquerque <jaalburquerque@gmail.com> gmmproc: _WRAP_METHOD: Support wrapping methods with slots. * tools/pm/WrapParser.pm (on_wrap_method): Add code to parse the additional 'slot_name', 'slot_callback' and 'no_slot_copy' options. - The 'slot_name' options specifies the name of the slot parameter in the C++ method declaration. - The 'slot_callback' option specifies the name of the callback to pass to the C function. - The 'no_slot_copy' option specifies that the actual slot should be passed to the C function in the data parameter and not a copy. By default, a copy is used. * tools/pm/Output.pm (output_wrap_meth): Pass the new slot options along to the *METHOD() m4 macros. (convert_args_cpp_to_c): - If there is a slot parameter, ignore the final user_data parameter in the C function when comparing the argument count in the C++ method and the C function. - Convert a possible slot parameter to the address of the specified slot callback (with the 'slot_callback' option). Report an error if no callback has been specified. - Pass a 'slot_copy' variable as the final user data parameter to the C function. The variable is declared by the _*METHOD() m4 macros. * tools/m4/method.m4 (_METHOD): (_STATIC_METHOD): - Accept the new 'slot_type', 'slot_name' and 'no_slot_copy' options which specify the C++ slot type (without the const and the &), the C++ slot parameter name and whether to create a copy of the slot or not respectively. - Insert code to declare a 'slot_copy' variable that is either a copy of the slot or a pointer to the actual C++ slot based on the 'no_slot_copy' option. Bug #688587. 2012-11-15 José Alburquerque <jaalburquerque@gmail.com> giomm.h: Include the tlspassword.h header file. * gio/giomm.h: 2012-11-14 Debarshi Ray <debarshir@src.gnome.org> ustring docs: The global locale should be set when using C++ streams. * glib/glibmm/ustring.h: Replace output.imbue(std::locale("")) by std::locale::global(std::locale("")) in the description of how to use std::ostringstream. Bug #661588. 2012-11-13 José Alburquerque <jaalburquerque@gmail.com> giomm: Add the TlsPassword class. * gio/src/tlspassword.{ccg,hg}: * gio/src/filelist.am: Add the new sources containing the constructor, methods, properties and virtual functions and include the sources in the build. * gio/src/gio_vfuncs.defs: Add the GTlsPassword virtual functions so that they are recognized by gmmproc. * tools/m4/convert_gio.m4: Add an enum conversion. 2012-11-13 José Alburquerque <jaalburquerque@gmail.com> giomm: Add the GTls* GTypes to the extra defs generation utility. * tools/extra_defs_gen/generate_defs_gio.cc: Add the GTypes. * gio/src/gio_signals.defs: And regenerate the signal and property defs file. 2012-11-13 José Alburquerque <jaalburquerque@gmail.com> giomm.h: Re-add an accidentally removed include. * gio/giomm.h: Re-add 'simpleaction.h' which was accidentally removed. Also re-sort the includes by the base filename (without the .h) as they were before. 2012-11-12 José Alburquerque <jaalburquerque@gmail.com> giomm.h: Include missing headers. * gio/giomm.h: Include all the headers generated from the .hg files. 2012-11-11 José Alburquerque <jaalburquerque@gmail.com> giomm: Add the TlsCertificate class. * gio/src/filelist.am: * gio/src/tlscertificate.{ccg,hg}: Add the sources wrapping the constructors, methods and (most) properties and include the sources in the build. * gio/src/enums.hg: Add the TlsCertificateFlags enum (wrapping the C enum). * tools/extra_defs_gen/generate_defs_gio.cc: Add the GTlsCertificate GType to the list of types for which signal and property defs are to be generated. * gio/src/gio_signals.defs: Regenerate the signal and property defs file. * tools/m4/convert_gio.m4: Add necessary conversions. * gio/src/gio_extra_objects.defs: Add TlsClientConnection to avoid a gmmproc docs warning. 2012-11-08 José Alburquerque <jaalburquerque@gmail.com> gmmproc: _WRAP_CTOR: Handle *_new() functions with a final GError**. * tools/pm/WrapParser.pm (on_wrap_ctor): Add code to parse an additional "errthrow" optional option in a _WRAP_CTOR() macro. * tools/pm/Output.pm (output_wrap_ctor): Pass the "errorthrow" option along as a string to: (get_ctor_properties): Ignore the final GError** parameter of the C *_new() function because it does not form part of the property list that the constructor to has to set. Bug #687959. 2012-11-07 José Alburquerque <jaalburquerque@gmail.com> DesktopAppInfo: Add some new getter methods. * gio/src/desktopappinfo.hg: Add the get_keywords(), get_startup_wm_class(), get_generic_name(), get_show_in(), get_nodisplay() and get_categories() getter methods wrapping the corresponding C functions. 2012-11-06 José Alburquerque <jaalburquerque@gmail.com> Variant: Don't refsink variants created using the custom cast ctor. * glib/src/variant.ccg: * glib/src/variant.hg: * glib/src/variant_basictypes.cc.m4: Remove the call to g_variant_ref_sink() in the create() methods of the variant types that use the custom cast constructor to wrap the newly created C object because the custom cast constructor already refsinks the object if necessary. 2012-11-06 José Alburquerque <jaalburquerque@gmail.com> MemoryOutputStream: Add the steal_as_bytes() method. * gio/src/memoryoutputstream.{ccg,hg}: Add the method that wraps the corresponding C function. 2012-11-06 José Alburquerque <jaalburquerque@gmail.com> AppInfo: Add create_duplicate(). * gio/src/appinfo.{hg,ccg}: Add the new method (which creates a duplicate of the AppInfo). Also, use gmmproc's optional parameter functionality to wrap the launch_default_for_uri() method without the optional AppLaunchContext parameter. 2012-11-06 José Alburquerque <jaalburquerque@gmail.com> Variant< std::vector<std::string> >: Add create_from_object_paths(). * glib/src/variant.hg: Add the new method that creates a variant of vector of strings out of object paths. This is so the type of the variant is rightly set to G_VARIANT_TYPE_OBJECT_PATH_ARRAY and not G_VARIANT_TYPE_BYTESTRING_ARRAY in case some application needs to make a distinction. Also _IGNORE the g_variant_get_objv() and g_variant_dup_objv() functions because it's possible to get object paths from a variant of vector of strings if it contains them with the existing getter methods because object paths are merely strings. * glib/src/variantiter.hg: Add an _IGNORE. * glib/src/checksum.ccg: * glib/src/convert.ccg: Whitespace. 2012-11-05 José Alburquerque <jaalburquerque@gmail.com> Regenerate the XML docs files for glibmm and giomm. * gio/src/gio_docs.xml: * glib/src/glib_docs.xml: These files now include enum XML documentation. * glib/src/glib_extra_objects.defs: Add IOChannel to avoid a gmmproc documentation warning. 2012-11-04 José Alburquerque <jaalburquerque@gmail.com> gmmproc: Make enum documentation possible. * tools/defs_gen/docextract.py (enum_name_pattern): Add a new regular expression that recognizes gtk-doc enum comment blocks (though imperfectly because it also catches things such as structure comment blocks). (identifier_patterns): Append the new enum_name_pattern to the list of patterns used to test each gtk-doc block's identifier to see what type of block it is. (parse_file): Do not add a particular gtk-doc block if it has been marked as a block initially thought to be an enum comment block but later found not to be so. (skip_to_identifier): Mark the current comment block as an enum type if the enum_name_pattern matches the identifier. (process_params): Mark the current block as invalid if the block was recognized as an enum type but no parameters are found or if any of the parameter names are not all caps. (parse_dir): Include .h files for processing because gtk-doc enum comment blocks are included in those files. * tools/defs_gen/docextract_to_xml.py: Add an option to not print out enum docs. Assume that enum docs should be printed out by default. * tools/pm/DocsParser.pm (parse_on_start): (parse_on_end): Add logic to correctly parse an <enum> tag (which is just like the already existing <function> and <signal> tags. The only difference is in the name of the tags. The function name syntax is the same as a C function name, the signal name has the form 'CStructName::signal-name' while the enum name has the form 'CEnumName') (lookup_enum_description): Add this subroutine that gets the the description of the specified enum. (lookup_enum_value_documentation): Add this subroutine that gets the description of an enum value as a Doxygen block. (lookup_documentation): Use the new remove_example_code subroutine described below. (remove_example_code): Add this subroutine that removes example code from the specified text so that it can be used in other places. * tools/pm/Enum.pm (c_prefix): Add a new field to the class storing the enum's C prefix. This field is used when looking up an enum's value documentation. (parse_values): Modified to store the C prefix of the enum. (build_element_list): Modified to lookup the documentation of the values of the enum and insert the Doxygen block just before each value. This allows Doxygen to document each value of the enum. * tools/pm/Output.pm (output_wrap_enum): Modified to lookup the description of the enum previously parsed by the DocParser and merge it with an already passed in comment for the enum which is then passed as before to the _ENUM macro. * tools/m4/enum.m4: Whitespace correction. Bug #544694.