2019-09-18 Kjell Ahlstedt 2.63.1 2019-09-18 Kjell Ahlstedt Change the ABI to glibmm-2.64 So we can use the 2.62 version numbers for stable releases in the glibmm-2.4 ABI series. We don't need to release a stable ABI-parallel glibmm until we need to release gtkmm 4.0, and that won't happen until GTK 4.0.0 happens. We've done similar ABI name changes several times before. 2019-09-18 Kjell Ahlstedt Gio::DBus::Introspection: Add a necessary #include 2019-09-18 Kjell Ahlstedt Glib::ustring documentation: Minor fix 2019-09-02 Kjell Ahlstedt Gio::SocketControlMessage: Add add_deserialize_func() The deserialize vfunc in GLib is a class virtual function (not associated with an instance). Such functions don't exist in C++. But it must be wrapped in one way or another. g_socket_control_message_deserialize() assumes that all subclasses of GSocketControlMessage override this vfunc. A user-program can crash, if any subclass does not. Fixes #52 2019-08-13 Kjell Ahlstedt Remove Glib::TimeVal GTimeVal has been deprecated in glib. Remove its wrapping in glibmm. * examples/dbus/server_without_bus.cc: * examples/dbus/session_bus_service.cc: Replace TimeVal by DateTime. * gio/src/fileinfo.[ccg|hg]: Remove [set_]modification_time(). Add set/get_modification_date_time(). * glib/glibmm.h: * glib/glibmm/filelist.am: Remove timeval. * glib/glibmm/timeval.[cc|h]: Removed files. * glib/src/date.[ccg|hg]: Remove set_time(const GTimeVal& timeval). * glib/src/datetime.[ccg|hg]: Remove create_now_local/utc(const TimeVal& tv) and to_timeval(). Add create_from_iso8601(), format_iso8601() and operator bool(). * tools/m4/convert_glib.m4: * tools/m4/convert_gio.m4: Remove conversions for GTimeVal. 2019-08-13 Kjell Ahlstedt Glib, Gio: Regenerate docs.xml and .defs files 2019-07-21 Kjell Ahlstedt Gio: Fix ownership of some lists and arrays * gio/src/drive.hg: get_volumes(): Glib::OWNERSHIP_SHALLOW -> DEEP * gio/src/mountoperation.hg: signal_ask_question(): DEEP -> NONE A signal handler shall not deallocate its input data. * gio/src/themedicon.hg: get_names(): DEEP -> NONE * gio/src/tlsdatabase.[ccg|hg]: lookup_certificates_issued_by[_finish]_vfunc(): g_list_copy() -> g_list_copy_deep() * gio/src/volumemonitor.hg: get_connected_drives(), get_volumes(), get_mounts(): SHALLOW -> DEEP 2019-07-18 Kjell Ahlstedt Add Gio::DBus::ObjectManager* Add Gio::DBus::ObjectManager, Gio::DBus::ObjectManagerClient and Gio::DBus::ObjectManagerServer. Fixes #43 2019-07-17 Kjell Ahlstedt Gio::DBus::Object::get_interface_vfunc(): Don't add global symbol The previous fix of Gio::DBus::Object vfuncs added a Glib::unwrap_copy() overload, which became a global symbol in the load module. Replace it with a local name in an anonymous namespace. 2019-07-17 Kjell Ahlstedt Add Gio::DBus::ObjectProxy and Gio::DBus::ObjectSkeleton In preparation for adding Gio::DBus::ObjectManager, ObjectManagerClient and ObjectManagerServer. See issue #43. 2019-07-17 Kjell Ahlstedt Glib, Gio: Regenerate docs.xml and .defs files and update gio_signals.defs.patch and generate_defs_gio.cc. 2019-07-16 Kjell Ahlstedt Gio::DBus::Object: Fix refcounts in some vfuncs Gio::DBus::Object::get_interface_vfunc() and get_interfaces_vfunc() must add a reference to the returned DBus interfaces. The caller shall unref them. g_dbus_object_get_interface() and g_dbus_object_get_interfaces() are marked (transfer full). 2019-07-12 Kjell Ahlstedt Glib::ustring docs: ustring can't always replace std::string Fixes #47 2019-07-09 Kjell Ahlstedt Glib::init(), Gio::init(): Improve the documentation See issue #49 2019-07-08 Kjell Ahlstedt Glib::Variant>::create(): Fix memory leak Fixes #48 2019-07-08 Kjell Ahlstedt gmmproc: Update enum.pl and h2def.py for new glib deprecation macros * tools/enum.pl: Don't replace MY_ENUMERATOR = '}' with MY_ENUMERATOR = ']'. Remove *_DEPRECATED_TYPE_IN_* and *_DEPRECATED_ENUMERATOR_IN_* when enum definitions are parsed. * tools/defs_gen/h2def.py: When parsing function declarations: Remove G_GNUC_BEGIN_IGNORE_DEPRECATIONS, G_GNUC_END_IGNORE_DEPRECATIONS and G_DECLARE_INTERFACE(*). Update the removals of *_DEPRECATED* and *_AVAILABLE_IN* so the new *_DEPRECATED_TYPE* and friends won't affect the result. 2019-06-27 Kjell Ahlstedt Glib::Property: Update for compatibility with Gtk::Builder When an object is created by GtkBuilder, the GObject-derived C object is created and its properties set before there is a C++ wrapper to store the property values in. Glib::custom_set_property_callback() stores property values in a data structure reached via a GQuark in the object. PropertyBase::lookup_property() copies those property values to the PropertyBase objects when the C++ wrapper is created. 2019-06-23 Kjell Ahlstedt Gio::Application: Add add_option_group() Fixes #46 2019-06-21 Daniel Boles ustring: Add overloads for const char* fmt . . . . . . in the hope that doing so can help compilers catch some mistakes that users might make. However, point out they shouldn't rely on that. We only provide this overload in case it catches such users in the act of making a mistake, but they should still be careful when writing code. details: (1) This means we can implement sprintf(ustring const&) in terms of ustring(char const*) instead of repeating ourselves. (2) I provide a 2nd overload of the zero-args case just for symmetry, and to avoid creating another ustring for the argument just to copy it on return (if not that I expect this to be performance-critical) https://gitlab.gnome.org/GNOME/glibmm/issues/21#note_537941 2019-06-21 Daniel Boles ustring: Be extra clear about "count/types/order" Say the same thing both in the main blurb and the argument documentation – and say "count" instead of "number" just so it's extra clear what I mean (and because "size" didn't seem clear enough in that sense). 2019-06-21 Daniel Boles ustring: Don't say "message string" for sprintf() I just copied that from compose() and am not sure of its precise intended meaning, but in case it conveys 'a string suitable for showing a message, i.e. a translatable string', let's not give that incorrect impression, since placeholders can't be reordered by translators. See also https://gitlab.gnome.org/GNOME/glibmm/issues/21#note_533829 et al. 2019-06-21 Daniel Boles ustring: Fix warning/errors if sprintf("fmt only") If no args to be substituted are given, there is nothing to do, so the fmt string is returned as-is without substitution. This is an obvious case of mismatched format/args that we can check. Not doing so causes warnings/errors with common compiler options, as it is a security risk. For instance, -Wformat-security causes GCC to complain thusly: > format not a string literal and no format arguments Not passing arguments but passing a variable string that might contain placeholders and thus instruct the compiler to try grabbing random unrelated things off the stacks is obviously not something we want to do – nor do we want to do it any *other* time, but this is the one case we can obviously catch ourselves, rather than hoping any compiler does. The argument for not just static_assert()ing that sizeof...(args) >= 1 is that this might conceivably be used in generic code where doing the former would be annoying, and it's easy enough to make that work anyway. https://gitlab.gnome.org/GNOME/glibmm/issues/21#note_537551 2019-06-20 Daniel Boles ustring: Add sprintf(), wrapping g_strdup_printf() Add another way to produce formatted ustrings, this time using printf syntax, by forwarding arguments to g_strdup_printf() and then copying the result into the returned ustring. This includes a private ustring::sprintify() function that by default just forward its argument but can be overloaded to do something else. In this commit, that is overloaded for ustring and std::string so that their .c_str() is passed to printf instead, avoiding the ugliness of users always having to write .c_str() in their own lists of arguments. Note that the same lack of type safety as plagues printf() and all its variants (in both C and GLib) applies here: the arguments are just forwarded on, so if you include too few or the wrong types for the placeholders you specify, you invoke undefined behaviour just as in C. For reasons like that, C++'s preference of streams over stdio, and the hope that we'll eventually get an actual nice string-formatting solution in the C++ Standard, I don't go out of my way to shout about this in the documentation. Users who really want sprintf() will find it, without us having to shout too loudly about it and risk being seen as recommending it more than anything else. It's here for those who know they need it. https://gitlab.gnome.org/GNOME/glibmm/issues/21 2019-06-11 Daniel Boles Property: Add const get_proxy() returning ReadOnly We could only get_proxy() if non-const and with a read/write Proxy. This resolves that so that we can get a read-only proxy from a const Property (without having to construct manually from the instance/name as before). Close https://gitlab.gnome.org/GNOME/glibmm/issues/44 2019-06-11 Daniel Boles Property: Getting Proxy from ReadOnly is const too Thereʼs no need for this to require a non-const Property_ReadOnly as the Proxy by definition canʼt modify it, so make it const like other methods 2019-06-11 Daniel Boles Property: Clarify “manipulate” → read and/or write 2019-06-10 Kjell Ahlstedt gmmproc: Don't assume that enumerators can't contain lowercase letters 2019-04-26 Kjell Ahlstedt Glib::Checksum, DateTime, TimeZone: Add #include Should have been done in the previous commit. 2019-04-26 Kjell Ahlstedt Glib::Checksum, Datetime, TimeZone: _CLASS_BOXEDTYPE These classes can be wrapped as _CLASS_BOXEDTYPE. Then Glib::Value specializations are generated, and these classes can be more easily used with Glib::Value. See discussion on gtkmm-list https://mail.gnome.org/archives/gtkmm-list/2019-April/msg00011.html 2019-04-18 Dainis Jonitis Fix callback races in glibmm when source is destructed It is normal situation when glib main loop iterates sources on one thread where it checks whether source is still active and its callback functions can be called and glibmm Source being destroyed on other thread. Glibmm should check once again that callback_data and callback_funcs fields are still valid and GSource was not marked as inactive while its callback handlers are called. Fixes #41 2019-04-18 Martin Ejdestig Use convert_return_gchar_ptr_to_*() in a couple of ustring methods First attempt at fixing memory leak in make_valid() (see previous commit) used make_unique_ptr_gfree() directly because of looking at these methods. Better to use the helper function. This actually fixes undefined behavior for normalize() since g_utf8_normalize() is documented to return NULL if string is not a valid UTF-8 string. The constructor for std::string, which ustring uses for storage, that takes a pointer is documented to have undefined behavior if pointer is NULL. The utility function checks for NULL and uses the default constructor in that case. (Have not looked at implementation of Glib functions, and it may be that all std::string implementations Glibmm is used with handles this case, but good to avoid undefined behavior regardless, I think.) 2019-04-18 Martin Ejdestig Fix memory leak in Glib::ustring::make_valid() 2019-03-21 Kjell Ahlstedt Doxyfile.in: Remove unused configuration constants Should have been done when they were removed from other files in the fix of issue #22. 2019-03-19 Kjell Ahlstedt giomm.h: Add missing #include directives 2019-03-19 Kjell Ahlstedt NEWS: Add requirement glib-2.0 >= 2.59.2