* GCancellable can be "cancelled" more than once if g_cancellable_reset() is called. * Don't assume that because the "cancelled" signal fired it won't fire again. https://bugzilla.gnome.org/show_bug.cgi?id=680111
g_async_initable_real_init_finish() was previously handling all GSimpleAsyncResults, even if they weren't created by g_async_initable_real_init_async(), and libnm-glib accidentally relied on that behavior. So remove the g_simple_async_result_is_valid() check.
This are mistaken by g-ir-scanner as GVariantType's methods, because they take a GVariantType* as a first parameter. https://bugzilla.gnome.org/show_bug.cgi?id=679968
On Windows, GetEnvironmentVariable() returns 0 for empty variables. Checking GetLastError() == ERROR_ENVVAR_NOT_FOUND helps make a difference between a variable that does not exist or an empty one which should return "". https://bugzilla.gnome.org/show_bug.cgi?id=679617
With mingw, only gspawn-win32.c is compiled, but it is missing some new symbols. https://bugzilla.gnome.org/show_bug.cgi?id=679691
Make the documentation clear about this. https://bugzilla.gnome.org/show_bug.cgi?id=679671
Many (if not "almost all") programs that spawn other programs via g_spawn_sync() or the like simply want to check whether or not the child exited successfully, but doing so requires use of platform-specific functionality and there's actually a fair amount of boilerplate involved. This new API will help drain a *lot* of mostly duplicated code in GNOME, from gnome-session to gdm. And we can see that some bits even inside GLib were doing it wrong; for example checking the exit status on Unix, but ignoring it on Windows. https://bugzilla.gnome.org/show_bug.cgi?id=679691
Rather than doing a two step first-check-the-GAsyncResult-subtype-then- check-the-tag, add a GAsyncResult-level method so that you can do them both at once, simplifying the code for "short-circuit" async return values where the vmethod never gets called. https://bugzilla.gnome.org/show_bug.cgi?id=661767
Finish deprecating the "handle GSimpleAsyncResult errors in the wrapper function" idiom (and protect against future GSimpleAsyncResult deprecation warnings) by adding a "legacy" GAsyncResult method to do it in those classes/methods where it had been traditionally done. (This applies only to wrapper methods; in cases where an _async vmethod explicitly uses GSimpleAsyncResult, its corresponding _finish vmethod still uses g_simple_async_result_propagate_error.) https://bugzilla.gnome.org/show_bug.cgi?id=667375 https://bugzilla.gnome.org/show_bug.cgi?id=661767
Originally, the standard idiom with GSimpleAsyncResult was to handle all errors in the _finish wrapper function, so that vmethods only had to deal with successful results. But this means that chaining up to a parent _finish vmethod won't work correctly. Fix this by also checking for errors in all the relevant vmethods. (We have to redundantly check in both the vmethod and the wrapper to preserve compatibility.) https://bugzilla.gnome.org/show_bug.cgi?id=667375 https://bugzilla.gnome.org/show_bug.cgi?id=661767
The "mainloop_barrier" in copy_async_thread() is unnecessary, since the g_simple_async_result_complete_in_idle() will be queued after all of the g_io_scheduler_job_send_to_mainloop_async()s, and sources with the same priority will run in the order in which they were queued. https://bugzilla.gnome.org/show_bug.cgi?id=661767
String validation was done by checking if the string was valid utf8 and ensuring that the first non-utf8 character was the last character (ie: the nul terminator). No check was actually done to make sure that this byte actually contained a nul, however, so it was possible that you could have a string like "hello\xff" with length 6 that would correctly validate. Fix that, and test it.
* Document how to override interfaces already implemented in a base class, and also call those base class implementations from a derived reimplementation. * Don't recomend people use base_init() style functions to initialize interface signals and properties, use default_init() aka class_init() instead (as G_DEFINE_INTERFACE() uses). * The above solves the interface init called multiple times problem, so remove some needless naysaying about that. * Document default_init() in the interface initialization discussion * Linkify more stuff. * Remove some crud and typos https://bugzilla.gnome.org/show_bug.cgi?id=675504