Version 2.2.20 (17 December 2020) -------------- If this library is employed in a program compiled with -std=c++17 or greater, permit objects with references or const members to be stored in AsyncChannel objects (async_channel.h). Deal with Cgu::WinBase and Cgu::Application breakage when testing using glib for gtk-3.99.3 onwards. When compiling for GTK-4, require version >= 3.98.4 and make consequential changes including to documentation (acinclude.m4, README; doxygen.main.in). Add fixes for gtk-3.98.0, gtk-3.98.1 and gtk-3.98.4 (file_print_manager.cpp, text_print_manager.cpp, window.h, window.cpp; tests/test_application.cpp; tests/extra/test_file_print_manager.cpp, tests/extra/test_text_print_manager.cpp). Enable Cgu::FilePrintManager dialogs to be resizable (file_print_manager.cpp). Update documentation (application.h, parallel.h, shared_handle.h, window.h). Version 2.2.19 (27 January 2020) -------------- Use autoconf's TAP support for running tests (Makefile.am, configure-gtk2.ac, configure-gtk3.ac, configure-gtk4.ac; c++-gtk-utils/Makefile.am; docs/Makefile.am; tests/Makefile.am, tests/extension/Makefile.am, tests/extra/Makefile.am; removed - Makefile.decl; added - glib-tap.mk, tap-driver.sh, tap-test, m4/glibtests.m4) Cater for guile-3.0 declarative modules (acinclude.m4; extension.h). Suppress GStaticRecMutex deprecation warnings (acinclude.m4, configure-gtk2.ac, configure-gtk3.ac, configure-gtk4.ac; cgu_config.h.in, mutex.h). Version 2.2.18 (9 June 2019) -------------- When compiling for GTK-4, require version >= 3.96.0 and make consequential changes including to documentation (acinclude.m4, README; doxygen.main.in, application.h, extension.h, file_print_manager.h, file_print_manager.cpp, gobj_handle.h, notifier.h, prog_present.h, reassembler.h, shared_handle.h, text_print_manager.h, text_print_manager.cpp, thread.h, widget.h, window.h and window.cpp; tests/test_application.cpp; tests/extra/test_file_print_manager.cpp, tests/extra/test_text_print_manager.cpp). Update other documentation (doxygen.main.in; async_queue.h, gerror_handle.h, shared_handle.h). Version 2.2.17 (24 October 2018) -------------- Set FD_CLOEXEC on pipe file descriptors for Notifier objects (notifier.cpp). Add support for guile-3.0 (acinclude.m4; extension.h). Version 2.2.16.1 (27 June 2018) ---------------- Provide a configuration file suitable for doxygen-1.8.14; include generated .js files in the distribution tarball; rebuild the documentation (doxygen.main.in; docs/Doxyfile.in, docs/Makefile.am). Version 2.2.16 (27 June 2018) -------------- When compiling for GTK+-4, require version >= 3.94.0 (acinclude.m4, README; doxygen.main.in). Fix changes in GTK+-3.94 (file_print_manager.h, file_print_manager.cpp, window.h, window.cpp). Fix the change from GdkPixbuf to GdkTexture in GTK+-3.93 (file_print_manager.h, file_print_manager.cpp, window.h, window.cpp). Let the CGU_USE_GTK manifest constant in cgu_config.h indicate the version of GTK+ that the library is configured for, and set GDK_VERSION_MIN_REQUIRED for GTK+-4 (acinclude.m4; tests/test_application.cpp, tests/extra/test_file_print_manager.cpp, tests/extra/test_text_print_manager.cpp; cgu_config.h, text_print_manager.cpp). Correct documentation (application.h, extension.h, window.h). Version 2.2.15 (24 December 2017) -------------- Provide configuration option for GTK+-4 (acinclude.m4, bootstrap-gtk2.sh, bootstrap-gtk3.sh, bootstrap-gtk4.sh, configure-gtk4.ac, Makefile.am, README; doxygen.main.in, file_print_manager.cpp, text_print_manager.cpp, window.h; tests/test_application.cpp; tests/extra/test_file_print_manager.cpp, tests/extra/test_text_print_manager.cpp). Use streambuffers not streams when testing fdstream and gstream with char16_t and char32_t character types (tests/test_fdstream.cpp, tests/test_gstream.cpp). Update documentation (doxygen.main.in; async_channel.h, callback.h, fdstream.h, gstream.h, task_manager.h, task_manager.cpp). Version 2.2.14.1 (23 November 2016) ---------------- Explicitly qualify malloc() as being within the std namespace (async_channel.h). Do not document the Cgu::Thread::FutureHelper and Cgu::Thread::TaskManagerHelper2 namespaces (future.h, task_manager.h). Update documentation (async_channel.h). Version 2.2.14 (9 November 2016) -------------- Provide Cgu::AsyncChannel class (c++-gtk-utils/Makefile.am; doxygen.main.in; async_channel.h, async_queue.h; tests/Makefile.am, tests/test_async_channel.cpp). Remove the 'noexcept' specifier for Cgu::Thread::Cond::wait() and Cgu::Thread::Cond::timed_wait(): any cancellation pseudo-exception is inconsistent with this specifier (mutex.h). Provide TaskManager::get_max_tasks() method with documentation on rate limiting (parallel.h, task_manager.h, task_manager.cpp). Zero initialise the character buffer in Reassembler class (reassembler.h). Adjust configuration macros to enable use of Cgu::Extension with guile-2.2 (acinclude.m4; cgu_config.h.in, extension.h). Increase coverage of io_watch tests (tests/test_iowatch.cpp). Update documentation (async_queue.h, async_result.h, future.h, task_manager.h, thread.h). Version 2.2.13 (9 May 2016) -------------- Use glib's unix fd implementation for io_watch where glib >= 2.36 is installed, unless otherwise chosen during configuration (acinclude.m4, configure-gtk2.ac, configure-gtk-3.ac; io_watch.cpp). Update documentation (callback.h, extension.h, future.h). Version 2.2.12 (18 October 2015) -------------- Simplify Cgu::Application::add() method (application.cpp). Minor implementation improvement for Cgu::Thread::parallel_transform* functions (do pointer arithmetic before not after tasks are launched) (parallel.h). Permit return value optimisation when returning thread object on starting new thread (thread.cpp). Update libtool to version 2.4.6. Documentation fix for doxygen-1.8.9 (docs/Doxyfile.in). Update code comments (emitter.h). Update documentation (doxygen.main.in, application.h, emitter.h, extension.h, future.h, future.tpp, shared_handle.h, shared_ptr.h, task_manager.h, thread.h). Version 2.2.11 (6 April 2015) -------------- Provide a mutex for calls to make-fresh-user-modules to deal with guile thread safety issues (c++-gtk-utils/Makefile.am; extension.h, extension_helper.cpp). Improve efficiency of scheme to C++ list translators for long lists (extension.h). Update libtool to version 2.4.4. Update code comments (extension.h, future.h, parallel.h, task_manager.h, task_manager.tpp). Update documentation (README; application.h, parallel.h, param.h). Version 2.2.10 (24 November 2014) -------------- Permit Cgu::Thread::parallel_for_each(), Cgu::Thread::parallel_for_each_partial(), Cgu::Thread::parallel_transform() and Cgu::Thread::parallel_transform_partial() to take const source iterators (parallel.h). Provide Cgu::IntIter class to enable for loops to be more easily implemented with the parallel algorithms (doxygen.h.in, parallel.h; tests/test_parallel.cpp). With gcc >= 4.8 or clang >= 3.4, implement callback classes using std::tuple (this enables Callback::make() and Callback::make_ref() to take up to 10 bound arguments, avoids a lot of code duplication and makes for a cleaner implementation) (acinclude.m4, configure-gtk2.ac, configure-gtk3.ac; cgu_config.h.in, doxygen.main.in; callback.h, param.h; tests/Makefile.am, tests/test_tuple.cpp). Preallocate vectors in translator functions which return std::vector (extension.h). Correct information about clang compatibility (doxygen.main.in). Update documentation (async_queue.h). Version 2.2.9 (6 October 2014) ------------- Provide AsyncQueue::move_pop_basic(), AsyncQueueDispatch::move_pop_basic(), AsyncQueueDispatch::move_pop_dispatch_basic() and AsyncQueueDispatch::move_pop_timed_dispatch_basic() methods (async_queue.h; tests/test_async_queue.cpp). Prevent new GTK+-3.14 deprecation warnings interfering with tests (test/test_application.cpp). Update build system to automake-1.14.1 (bootstrap-gtk2.sh, bootstrap-gtk3.sh, compile, Makefile.am). Update build system to gettext-0.18.2 (config.rpath; m4/*.m4; po/Makefile.in.in, po/Rules.quot, po/Makevars; c++-gtk-utils/Makefile.am, tests/Makefile.am, tests/extension/Makefile.am). Update tests (tests/test_callback.cpp). Add comments about strict aliasing with character set conversion functions (convert.cpp). Update documentation, including to cover C++14 (README; doxygen.main.in, async_queue.h, callback.h, convert.h, extension.h, fdstream.h, future.h, gstream.h, mem_fun.h, mutex.h, shared_handle.h, shared_ptr.h, task_manager.h, thread.h, window.h). Version 2.2.8 (16 July 2014) ------------- Correct testing of minimum values in Extension::real_to_double() and Extension::list_to_vector_double() (extension.h). Deal properly with unexpected out-of-memory conditions in executing Extension::exec() and Extension::exec_shared() (extension.h). Minor code refactoring in EmitterArg::connect() and SafeEmitterArg::connect() (emitter.h). Update documentation (callback.h, emitter.h, extension.h, notifier.h, parallel.h, task_manager.h). Version 2.2.7 (1 June 2014) ------------- Provide a new Extension::exec_shared() function (doxygen.main.in, extension.h; tests/extension/test_extension.cpp). Throw a C++ exception if a translator throws a native guile exception, simplify exception handling code and make the translation of guile exceptions to text more meaningful (extension.h). Block asyncs when executing a scheme to C++ translator where guile supports it (acinclude.m4; cgu_config.h.in, extension.h). Avoid constructing a SafeEmitterArg object with untracked io_watches (io_watch.cpp; tests/test_iowatch.cpp). Deal internally with any exceptions in cgu_winbase_delete_event() (window.cpp). Update documentation (application.h, callback.h, extension.h, io_watch.h, notifier.h, timeout.h). Version 2.2.6 (16 April 2014) ------------- Provide Cgu::Callback::to_unique(), Cgu::Callback::to_functor() and Cgu::Callback::to_safe_functor() functions (callback.h; tests/test_callback.cpp, tests/test_application.cpp). Make minor adjustments to handling of C++ exceptions in Cgu::Extension::exec() (extension.h). Fix Cgu::Application tests for API breakage in GTK+-3.12.0 (test_application.cpp). Update documentation (doxygen.main.in; callback.h, extension.h). Version 2.2.5.1 (28 January 2014) --------------- Deal correctly with a thrown guile exception which has a key but no other arguments, and a scheme extension file which does not throw but evaluates to a null list (extension.h). Adjust timing of TaskManager releaser tests (tests/test_task_manager.cpp). Version 2.2.5 (24 January 2014) ------------- Provide support for guile extensions (acinclude.m4, configure-gtk2.ac, configure-gtk3.ac, README; c++-gtk-utils/Makefile.am; doxygen-main.in, cgu_config.h.in extension.h; tests/extension/Makefile.am, tests/extension/README, tests/extension/test_extension.cpp, tests/extension/guile-test.scm, tests/extension/guile-test-exception.scm). Provide TaskManager::make_task_packaged_when() and TaskManager::make_task_packaged_compose() methods, which will pass a std::future object for a task running on a TaskManager object asynchronously (task_manager.h, task_manager.tpp; tests/test_task_manager.cpp). Minor code refactoring and test improvements (parallel.h, task_manager.tpp; tests/test_task_manager.cpp). Update code comments (async_queue.h, task_manager.h, task_manager.tpp). Update documentation (task_manager.h). Version 2.2.4 (29 November 2013) ------------- Provide a TaskManager::make_task_packaged() method, which will return a std::future object for a task running on a TaskManager object (task_manager.h; tests/test_task_manager.cpp). Provide the expected result where TaskManager::add_task() is called concurrently with TaskManager::stop_all() in wait_for_running stop mode (task_manager.cpp). Guarantee strong exception safety of AsyncQueue::push(value_type&&) and AsyncQueueDispatch::push(value_type&&) for std::list container specialization (async_queue.h). Stop deprecation warnings with GTK+-3.10 in tests (tests/test_application.cpp). Update documentation (callback.h, emitter.h, task_manager.h). Version 2.2.3 (16 September 2013) ------------- Revise implementation of parallel_transform() functions and add parallel_for_each_partial() and parallel_transform_partial() functions returning position iterators (parallel.h, task_manager.h; doxygen.main.in; tests/test_parallel.cpp). Provide a specialization of AsyncQueue and AsyncQueueDispatch for std::list containers which has push() and emplace() members which do not allocate within the mutex (async_queue.h, cgu_config.h.in; acinclude.m4, configure-gtk2.ac, configure-gtk3.ac). Improve scalability of TaskManager objects by starting new threads and adding to the task queue outside the mutex (task_manager.h, task_manager.cpp). As the 2.2 series of c++-gtk-utils has minimum requirements of gcc >= 4.6 and clang >= 3.2, make non-throwing functions 'noexcept' where this does not affect ABI (a more complete use of 'noexcept' must await the next ABI break as it affects name mangling) (callback.h, do_if.h, future.h, future.tpp, gerror_handle.h, gobj_handle.h, intrusive_ptr.h, mutex.h, notifier.h, parallel.h, reassembler.h, thread.h, rw_lock.h, shared_handle.h, shared_ptr.h). Really delete copy constructor and assignment operator of Thread::RWLock::WriterTrackLock (rw_lock.h). Update documentation (application.h, callback.h, gobj_handle.h, gvar_handle.h, intrusive_ptr.h, mutex.h, notifier.h, rw_lock.h, shared_handle.h, shared_ptr.h, task_manager.h, window.h). Version 2.2.2 (17 August 2013) ------------- Add parallel_for_each() and parallel_transform() functions for TaskManager objects (parallel.h, task_manager.h; doxygen.main.in; c++-gtk-utils/Makefile.am; tests/test_parallel.cpp, tests/Makefile.am). Provide a move constructor and move assignment operator for MainWidgetBase, PipeFifo and ScopedHandle classes (pipes.h, pipes.cpp, shared_handle.h, widget.h, widget.cpp; tests/test_iowatch.cpp, tests/test_shared_handle.cpp, tests/test_widget.cpp). Really delete fdstream's copy constructor and assignment operator (fdstream.h). Do not deprecate the version of Future::make() taking a function pointer and no arguments - it is equivalent to a callable object (future.h). Add documentation on using the library with Qt (doxygen.main.in). Update documentation (application.h, fdstream.h, gstream.h, task_manager.h). Version 2.2.1 (2 July 2013) ------------- Provide a Thread::TaskManager::IncHandle class, and deprecate the use of TaskManager::set_max_threads (task_manager.h; tests/test_task_manager.cpp). Make the TaskManager::add_task() overload taking callable objects fully exception safe (task_manager.h). Issue a g_critical warning if a Thread::TaskManger task expires with an exception, there is no 'fail' callback and the thrown object is not Thread::Exit (task_manager.cpp). Replace AC_CONFIG_HEADER macro with AC_CONFIG_HEADERS when configuring (configure-gtk2.ac, configure-gtk3.ac). Update build system to automake-1.13.3 (config.guess, config.sub, depcomp, INSTALL). Upgrade doxygen configuration files to doxygen-1.8.4 (docs/Doxyfile.in, docs/Doxyfile). Update documentation (README; doxygen.main.in; async_result.h, callback.h, future.h, task_manager.h). Version 2.2.0 (1 June 2013) ------------- Un-deprecate the overloads of EmitterArg::connect() taking a Callback::FunctorArg object. This was not intended (emitter.h). Update git links following sourceforge repository changes (doxygen.main.in). Update unit tests (tests/test_callback.cpp, tests/test_emitter.cpp, tests/test_task_manager.cpp, tests/test_thread.cpp, tests/test_timeout.cpp). Update documentation (callback.h, convert.h, future.h, io_watch.h, task_manager.h, timeout.h). Version 2.1.0 (21 May 2013) ------------- Bump version to version 2.1.0 in the 2.2 series of c++-gtk-utils (configure-gtk2.ac, configure-gtk3.ac, c++-gtk-utils-2-2.2.pc.in, c++-gtk-utils-3-2.2.pc.in, Makefile.am; c++-gtk-utils/Makefile.am; docs/Makefile.am; README, doxygen.main.in; omit PORTING-TO-2.0, add PORTING-TO-2.2). Provide a generic callable object interface for Callback::post(), start_iowatch(), start_timeout(), Emitter::connect(), Future::fail(), Future::when(), Notifer::connect(), SafeEmitter::connect(), TaskManager::add_task(), TaskManager::make_task_when(), TaskManager::make_task_when_full(), TaskManager::make_task_compose() and Thread::start(); deprecate the starting of tasks using Thread::Future and Thread::TaskManager except by callable objects (callback.h, emitter.h, future.h, io_watch.h, notifier.h, task_manager.h, thread.h, timeout.h; tests/test_callback.cpp, tests/test_emitter.cpp, tests/test_future.cpp, tests/test_iowatch.cpp, tests/test_notifier.cpp, tests/test_task_manager.h, tests/test_thread.cpp, tests/test_timeout.cpp). Make move construction of AsyncQueue and AsyncQueueDispatch objects strongly exception safe (async_queue.h). Remove the --with-auto-ptr option (acinclude.m4, configure-gtk2.ac, configure-gtk3.ac; cgu_config.h.in, task_manager.h, task_manager.cpp, task_manager.tpp, text_print_manager.h, text_print_manager.cpp, thread.h, thread.cpp; tests/test_task_manager.cpp, tests/test_thread.cpp; tests/extra/test_text_print_manager.cpp). Simplify emitter/releaser implementation now lambdas and range-for are available in gcc-4.6 and above (emitter.h, emitter.cpp). No longer document the deprecated Callback::make_val() functions (callback.h). Remove redundant Callback::Callback_function class (callback.h). Update build system to automake-1.13.1 (configure-gtk2.ac, configure-gtk3.ac, config.guess, config.sub, depcomp, INSTALL, install-sh, missing). Stop clang++ mismatched-tags and unused-private-field warnings (acinclude.m4). Cause bootstrap scripts to build translation files (bootstrap-gtk2.sh, bootstrap-gtk3.sh). Make other documentation changes (reassembler.h). Version 2.0.16 (9 March 2013) -------------- Allow the Callback::lambda() factory function to be passed callable objects which are lvalues (callback.h). Deal with document format breakage from doxygen markup changes (doxygen.main.in; application.h, async_queue.h, callback.h, convert.h, do_if.h, emitter.h, fdstream.h, file_print_manager.h, future.h, gstream.h, shared_handle.h, shared_ptr.h, task_manager.h, text_print_manager.h, thread.h, widget.h, window.h). Update documentation (PORTING-TO-2.0; doxygen.main.in; callback.h, mem_fun.h, task_manager.h). Version 2.0.15 (14 February 2013) -------------- Make global static Notifier objects safe (notifier.h, notifier.cpp). Avoid use of GObject-style casts in inline functions and function templates to enable user code defining G_DISABLE_CAST_CHECKS to be more easily compliant with the one-definition rule (application.h, gobj_handle.h, gstream.tpp, window.h). Remove some other unnecessary GObject-style casts, where the object concerned is created in the function where the cast is carried out (application.cpp, file_print_manager.cpp, text_print_manager.cpp, window.cpp). Avoid deprecation warning for g_type_init() with glib>=2.36 (tests/test_gstream.cpp). Provide a --without-gtk configuration option, to enable the library to be compiled without classes which require GTK+ support (acinclude.m4, configure-gtk2.ac, configure-gtk3.ac, c++-gtk-utils-2-2.0.pc.in, c++-gtk-utils-3-2.0.pc.in; README, doxygen.main.in, cgu_config.h.in; application.h, application.cpp, file_print_manager.h, file_print_manager.cpp, text_print_manager.h, text_print_manager.cpp, widget.h, widget.cpp, window.h, window.cpp). Update documentation (README; doxygen.main.in, callback.h, fdstream.h, future.h, gstream.h, intrusive_ptr.h, mutex.h, rw_lock.h, shared_handle.h, shared_ptr.h, task_manager.h, thread.h). Version 2.0.14 (1 January 2013) -------------- Add a Cgu::Thread::Taskmanager::change_max_threads() method (task_manager.h, task_manager.cpp; tests/test_task_manager.cpp). Generalise the Cgu::Thread::Future and Cgu::Thread::TaskManager methods which take a function object so as to take the object via a template parameter rather than via a std::function object, and deduce return types automatically in the Cgu::Thread::Taskmanger::make_task_*() and Cgu::Thread::make_future() methods (future.h, future.tpp, task_manager.h, task_manager.tpp; tests/test_task_manager.cpp). Make efficiency improvement when executing 'when' and 'fail' callback in a Cgu::Thread::TaskManager object (task_manager.h, task_manager.tpp). Make efficiency improvement when executing 'when' and 'fail' callback in a Cgu::Thread::Future object (future.h, future.tpp). Add test to Cgu::Thread::TaskManager unit tests (tests/test_task_manager.cpp). Update documentation (doxygen.main.in; callback.h, convert.h, task_manager.h). Version 2.0.13 (28 November 2012) -------------- Provide TaskManager::make_task_result(), TaskManager::make_task_when(), TaskManager::make_task_when_full() and TaskManager::make_task_compose() convenience wrapper methods for target functions which return a value, for easier task composition (doxygen.main.in; task_manager.h, task_manager.tpp; tests/test_task_manager.cpp; c++-gtk-utils/Makefile.am). Don't use static member function of local struct for callback function (task_manager.cpp). Make explicit move operations where relevant (future.tpp). Update unit tests (tests/test_async_queue.cpp, tests/test_async_result.cpp, tests/test_task_manager.cpp). Update documentation (callback.h, future.h, thread.h, timeout.h). Version 2.0.12 (5 October 2012) -------------- Provide a Cgu::Thread::TaskManager thread pool class for multiple task to thread mapping (c++-gtk-utils/Makefile.am; task_manager.h and task_manager.cpp; doxygen.main.in; tests/Makefile.am, tests/test_task_manager.cpp). Suppress deprecated warnings for g_thread_init(), GStaticRecMutex and GtkTable with glib-2.34/gtk+-3.6 (mutex.h, mutex.cpp, text_print_manager.cpp; test_future.cpp, test_gstream.cpp, test_notifier.cpp, test_task_manager.cpp, test_thread.cpp; tests/extra/test_file_print_manager.cpp, tests/extra/test_text_print_manager.cpp). Replace the sourceforge SVN repository with a sourceforge git respository (doxygen.main.in). Update documentation (async_queue.h, async_result.h, callback.h, fdstream.h, future.h, mutex.h, shared_handle.h, shared_ptr.h, thread.h). Version 2.0.11 (2 August 2012) -------------- Add move_pop() methods to AsyncQueue and AsyncQueueDispatch classes, and move_pop_dispatch() and move_pop_timed_dispatch() methods to the AsyncQueueDispatch class (async_queue.h; tests/test_async_queue.cpp, tests/test_async_result.cpp). Add move_get() method to AsyncResult class (async_result.h; tests/test_async_result.cpp). Add move_get() method to Thread::Future class (future.h; tests/test_future.cpp). Make AsyncResult::get() truly cancellation safe (async_result.h). Carry out locking in the AsyncResult destructor (async_result.h). Make Thread::Future::get() cancellation safe (future.h, future.tpp). Make sure Thread::Future::get() does not hang if a call to Thread::Future::run() by another thread threw (future.tpp). Merge c++11 branch with trunk in SVN (doxygen.main.in). Update documentation (async_result.h, callback.h, future.h, thread.h). Version 2.0.10 (1 July 2012) -------------- Enable Callback objects created with Cgu::Callback::lambda() to be constructed for mutable lambda objects (callback.h). Update build system to libtool-2.4.2, automake-1.12.1 and autoconf-2.69. Update doxygen configuration file for doxygen-1.8.1.1 (docs/Doxygen.in). Update unit test (tests/test_async_result.cpp). Update documentation (README; doxygen.main.in; async_result.h, callback.h, convert.h, do_if.h, emitter.h, future.h, gstream.h). Version 2.0.9 (29 May 2012) ------------- Provide a new Callback::lambda() factory function for more convenient construction of callback objects from C++11 lambda expressions (callback.h; tests/test_callback.cpp)). Provide for unblocking of threads waiting on an AsyncQueueDispatch object where it acquires items from a move assignment (async_queue.h). Update unit tests (test/test_callback.cpp, test/test_notifier.cpp). Update documentation (doyxgen.main.in; async_queue.h, async_result.h, callback.h, future.h, thread.h). Version 2.0.8 (20 May 2012) ------------- Provide new Cgu::AsyncResult class (tests/Makefile.am, tests/test_async_result.cpp; c++-gtk-utils/Makefile.am, configure-gtk2.ac, configure-gtk3.ac, doxygen.main.in, async_queue.h, async_result.h, future.h). Provide copy constructors, assignment operators and swap methods for Cgu::AsyncQueue and Cgu::AsyncQueueDispatch classes (async_queue.h; tests/test_async_queue.cpp). Provide size() method for Cgu::AsyncQueue and Cgu::AsyncQueueDispatch classes (async_queue.h; tests/test_async_queue.cpp). Add default constructor for Cgu::Thread::JoinableHandle class (thread.h; tests/test_thread.cpp). Add gcc-4.7 to the list of compilers requiring use of the -std=c++0x flag (doxygen.main.in). Update other documentation (async_queue.h, callback.h, emitter.h, fdstream.h, future.h, gstream.h, mutex.h, notifier.h, prog_present.h, reassembler.h, shared_handle.h, shared_ptr.h, thread.h). Version 2.0.7 (11 April 2012) ------------- Fix compilation with gcc-4.7 (fdstream.h, fdstream.tpp, gstream.h, gstream.tpp) (thanks to Malcolm Lewis for reporting this). Provide unit test for Future asynchronous functions (tests/test_future.cpp). Avoid types deprecated in gtk+-3.4 in the Application unit test, when compiled against gtk+-3.4 (tests/test_application.cpp). Update FSF address in relevant copyright notices (thanks to Malcolm Lewis for reporting this). Update documentation (doxygen.main.in; async_queue.h, callback.h, do_if.h, future.h, io_watch.h, mutex.h, notifier.h, param.h, rw_lock.h, thread.h, timeout.h, window.h). Version 2.0.6 (27 January 2012) ------------- Fix a race condition when executing the Future::when() callback introduced in version 2.0.5 (future.tpp). Version 2.0.5 (24 January 2012) ------------- Provide methods to obtain gio read and write errors on gstream objects (gstream.h, gstream.tpp). Deprecate GobjWeakHandle::expired(), which has the wrong semantics, and provide GobjWeakHandle::valid() method (gobj_handle.h). Provide unit tests based on glib's test framework (Makefile.am, Makefile.decl, acinclude.m4, configure-gtk2.ac, configure-gtk-3.ac; c++-gtk-utils/Makefile.am; docs/Makefile.am; 'tests' sub-directory and contents). Use automake silent rules (configure-gtk2.ac, configure-gtk3.ac). Remove unnecessary increment and decrement of reference count in Future::post_done() and Future::post_done_rel() (future.tpp). Update documentation (doxygen.main.in; async_queue.h, callback.h, future.h). Version 2.0.4 (28 November 2011) ------------- Provide Thread::make_future() convenience wrapper functions for creating Thread::Future<> objects (PORTING-TO-2.0, README; future.h). Access 'val' member variable directly in execute_done() and execute_done_rel() methods of Thread::Future to avoid unnecessary mutex lock/unlock (future.tpp). Make the test for whether Thread::FutureWhenError is thrown entirely race free, if the when() method is called after the run() method (future.h). Adjust linker ordering and build system (acinclude.m4, c++-gtk-utils-2-2.0.pc.in, c++-gtk-utils-3-2.0.pc.in, c++-gtk-utils/Makefile.am) Update documentation (application.h, emitter.h, future.h, reassembler.h). Version 2.0.3 (16 October 2011) ------------- Correct the reference counting so that a Thread::Future object stays in existence until any 'when' callback has executed as stated in the documentation (this is only relevant in the unlikely case of a user having a pointer to the Future object as a bound argument of the 'when' callback, but the change also permits a more efficient implementation of the execution of the 'when' callback and removes the possibility of the copy constructor of the return value throwing) (future.h, future.tpp). Version 2.0.2 (13 October 2011) ------------- Add Thread::Future::when() and associated Thread::Future::fail() methods so that the result provided by a future object can be asynchronously passed to a glib main loop, and a new Thread::Future::is_emitter_done() method (future.h, future.tpp). Eliminate possible race between Future::run() and Future::cancel() (future.tpp). Update documentation (README, doxygen.main.in; callback.h, emitter.h, io_watch.h, mutex.h, shared_handle.h, shared_ptr.h, thread.h, timeout.h). Version 2.0.1 (12 September 2011) ------------- Fix a bug in Cgu::DoIf::assert_same_type() which prevented a const type being specified as the specific template parameter type (do_if.h). Provide new Cgu::DoIf::assert_not_const() static assertion (doxygen.main.in, do_if.h). Reimplement the test of type relatedness using decltype rather than sizeof (configure-gtk2.ac, configure-gtk3.ac; do_if.h). Update documentation (doxygen.main.in; application.h, convert.h, do_if.h, mem_fun.h, mutex.h, param.h, rw_lock.h, shared_handle.h, shared_ptr.h, thread.h). Version 2.0.0-rc5 (19 July 2011) ----------------- Do not reset input stream pointers if the call to g_seekable_seek() in basic_gstreambuf<>::seekoff() fails (gstream.tpp). Provide a push() method taking a r-value reference and an emplace() method for AsyncQueue and AsyncQueueDispatch objects (async_queue.h). Update documentation (application.h, async_queue.h, callback.h, fdstream.h, future.h, gobj_handle.h, instrusive_ptr.h, shared_handle.h, shared_ptr.h, timeout.h). Version 2.0.0-rc4 (18 May 2011) ----------------- !!! NOTE !!!: './configure' will now prepare the library for compilation against GTK+3. To compile the library against GTK+2, use './configure-gtk2'. Adopt a swapping implementation for the reset() and operator=() methods of SharedPtr/SharedLockPtr/SharedHandle/ScopedHandle/ SharedLockHandle/InstrusivePtr: this will cater for a throwing destructor of a managed object, and with r-value references the additional overhead is minimal (intrusive_ptr.h, shared_handle.h, shared_ptr.h). Use templated rvalue reference implementation for Callback::make_ref() and deprecate Callback::make_val() (callback.h). Use templated rvalue reference implementation for Thread::Future::make() (future.h, future.tpp). Use 'delete' keyword for copy constructor and assignment operator of IntrusiveCounter, IntrusiveLockCounter and ScopedHandle classes (intrusive_ptr.h, shared_handle.h). Change default compile so that it compiles against GTK+3 (README, NEWS; doxygen.main.in). Upgrade gettext to version 0.18 (po/Makefile.in.in, po/Rules-quot). Update libtool to version 2.4. Update documentation, including providing new documentation on use with GtkBuilder (application.h, callback.h, doxygen.main.in, gobj_handle.h, param.h, widget.h, window.h). Version 2.0.0-rc3 (8 April 2011) ----------------- NOTE: Because Cgu::Releaser now uses std::unordered_set instead of a std::list, and Cgu::Notifier uses std::unordered_set instead of std::set, and some private Releaser and EmitterArg/SafeEmitterArg methods have changed their signature, c++-gtk-utils-2.0.0-rc3 is not binary compatible with c++-gtk-utils-2.0.0-rc2 (it is however API compatible). Provide new Callback::make_ref() functions so that callback objects will store arguments for functions taking const reference arguments (callback.h, emitter.h, emitter.cpp, param.h). Improve efficiency of Thread::Future implementation and permit const reference arguments to bind to Thread::Future objects (future.h, future.tpp). Correct implementation of Thread::Future objects constructed for a std::function object (future.tpp). Use a std::unordered_set container instead of a std::list container in Cgu::Releaser (emitter.h, emitter.cpp; configure-gtk2.ac, configure-gtk3.ac). Use a std::unordered_set container instead of a std::set container in Cgu::Notifier (notifier.h, notifier.cpp; configure-gtk2.ac, configure-gtk3.ac). Provide std::hash specializations for Callback::FunctorArg, Callback::SafeFunctorArg, GobjHandle, GvarHandle, IntrusivePtr, SharedHandle, SharedLockHandle, SharedPtr and SharedLockPtr (callback.h, gobj_handle.h, gvar_handle.h, intrusive_ptr.h, shared_handle.h, shared_ptr.h; doxygen.main.in; configure-gtk2ac, configure-gtk3.ac). As a safety feature, have the Cgu::Application destructor remove any remaining WinBase objects associated with the Application object (this would only be relevant if the user constructs the Application object on free store, and then deletes it while the run() method is still blocking, but does not call the remove() method on all WinBase objects still associated before doing so) (application.h). Do better error handling in conversion functions where sizeof(wchar_t) is not 2 or 4 (convert.cpp). Improve error checking and so suppress gcc-4.6 warning (text_print_manager.cpp). Use 'delete' keyword for copy constructor and assignment operator of Thread::CancelBlock class (thread.h). Update documentation (README; doxygen.main.in, application.h, emitter.h, io_watch.h, mem_fun.h, thread.h, window.h). Version 2.0.0-rc2 (9 March 2011) ----------------- NOTE: Because of the implementation of support for the Cgu::Application class and required changes to Cgu::WinBase, c++-gtk-utils-2.0.0-rc2 not binary compatible with c++-gtk-utils-2.0.0-rc1 (it is however API compatible). Provide a new Cgu::Application class, to enable Cgu::WinBase objects to be used with GtkApplication/GApplication (application.h, application.cpp, window.h, window.cpp). Provide versions of the start_iowatch() function where the relevant callback function is passed a GIOCondition value representing the events which caused the call (io_watch.h and io_watch.cpp). Provide operator==(), operator!=() and operator<() for GobjHandle, GvarHandle, IntrusivePtr, SharedHandle, SharedLockHandle, SharedPtr and SharedLockPtr (acinclude.m4, configure-gtk2.ac, configure-gtk3.ac; config.h.in, gobj_handle.h, gvar_handle.h, intrusive_ptr, shared_handle.h, shared_ptr.h) Omit use of uniform initialiser syntax where it confuses doxygen (fdstream.h, gstream.h, pipes.h). Update documentation (PORTING-TO-2.0, README, doxygen.main.in, gstream.h, io_watch.h, pipes.h, thread.h). Version 2.0.0-rc1 (11 February 2011) ----------------- Use variadic templates for callback and emitter objects, and enable callback objects to be constructed from std::function objects (callback.h, emitter.h, param.h). Use variadic templates for Thread::Future objects, and enable future objects to be constructed from std::function objects (future.h, future.tpp). Use rvalue references and std::forward() for argument forwarding in Cgu::DoIf::mem_fun() and Cgu::DoIf::fun() and static_assert for static assertion functions (do_if.h). Provide move constructors and assignment operators for smart pointer classes and functors (callback.h, gobj_handle.h, gvar_handle.h, intrusive_ptr.h, shared_handle.h, shared_ptr.h). Provide typedef'ed versions of the stream and streambuffer classes for char16_t and char32_t as well as wchar_t (fdstream.h, gstream.h). Provide Cgu::Utf8::utf32_from_utf8(), Cgu::Utf8::utf32_to_utf8(), Cgu::Utf8::utf16_from_utf8(), Cgu::Utf8::utf16_to_utf8() functions (convert.h, convert.cpp). Substitute std::auto_ptr for std::unique_ptr (but have std::auto_ptr option for public interfaces) (acinclude.m4, configure-gtk2.ac, configure-gtk3.ac; cgu_config.h.in, future.h, future.tpp, text_print_manager.h, text_print_manager.cpp, thread.h, thread.cpp). Where copying is to be prohibited, use 'delete' keyword (async_queue.h, emitter.h, fdstream.h, file_print_manager.h, future.h, gstream.h, mutex.h, notifier.h, pipes.h, rw_lock.h, text_print_manager.h, thread.h, widget.h, window.h). No longer use dynamic exception specifications (except for virtual functions of std::exception to retain gcc < 4.6 compatibility) (cgu_config.h.in, convert.h). Use uniform resource initialisation syntax (callback.h, convert.h, convert.cpp, emitter.h, emitter.cpp, fdstream.h, file_print_manager.cpp, future.tpp, gstream.h, notifier.cpp, pipes.h, prog_present.cpp, text_print_manager.cpp, thread.cpp). Omit deprecated start_iowatch() overloads (io_watch.h). Cgu::present_func() now returns a bool rather than gboolean value (prog_present.h, prog_present.cpp). Adjust build system for C++0x (acinclude.m4, c++-gtk-utils-2-2.0.pc.in, c++-gtk-utils-3-2.0.pc.in, configure-gtk2.in, configure-gtk3.in, Makefile.am, c++-gtk-utils/Makefile.am). Change implemenation of Utf8::ConversionError (convert.h). Update documentation (mutex.h, rw_lock.h, shared_handle.h, shared_ptr.h, thread.h), and provide new PORTING-TO-2.O file. Version 1.2.11 (6 February 2011) -------------- Use Cgu::Param structs to pass unbound arguments with CallbackArg, FunctorArg, SafeFunctorArg, EmitterArg and SafeEmitterArg (and so improve efficiency if objects of class type are passed by value) (callback.h and emitter.h). Correct error in constructing a ConversionError object, and add additional checks for case where the char type is not an octet (convert.h and convert.cpp). Change documentation directory from $prefix/share/doc/c++-gtk-utils to $prefix/share/doc/c++-gtk-utils/1.2 in preparation for the 2.0 series for C++0x (Makefile.am and docs/Makefile.am; README; doxygen.main.in). Update documentation (callback.h, do_if.h, doxygen.main.in, emitter.h, fdstream.h, gobj_handle.h, gstream.h, gvar_handle.h, intrusive_ptr.h, shared_handle.h, shared_ptr.h, text_print_manager.h, thread.h). Version 1.2.10 (8 January 2011) -------------- Enable CallbackArg, FunctorArg and EmitterArg objects to take more than one unbound argument (acinclude.m4, configure-gtk2.ac, configure-gtk3.ac; callback.h, cgu_config.h.in, doxygen.main.in, emitter.h, param.h). Provide new Param struct for automatic typing of parameter arguments for template functions (param.h). Provide Cgu::DoIf::mem_fun() and Cgu::DoIf::fun() templated conditional compilation functions, and the Cgu::DoIf::assert_related_to_type(), Cgu::DoIf::assert_related_types() and Cgu::DoIf::assert_same_type() static assertions (do_if.h). Simplify argument passing on construction of callback objects by using Param structs where relevant and make other minor adjustments (callback.h). Minor adjustments to FilePrintManager and TextPrintManager implementation (file_print_manager.cpp and text_print_manager.cpp). Add -Wno-deprecated flag to compilation flags in order to suppress warnings about std::auto_ptr when compiling under C++0x (acinclude.m4). Update documentation (callback.h, cgu_config.h.in, doxygen.main.in, file_print_manager.h, future.h, gobj_handle.h, mutex.h, pipes.h, rw_lock.h, text_print_manager.h, thread.h, widget.h, window.h, README). Version 1.2.9 (8 December 2010) ------------- Fix breakage where a callback with a bound reference argument is compiled in strict C++-98/03 mode (callback.h). Documentation updates (README, callback.h, gstream.h, prog_present.h). Put the html documentation directory directly in docs (and remove the 'reference' sub-directory) (Makefile.am, docs/Makefile.am, configure-gtk2.ac, configure-gtk3.ac). Version 1.2.8 (5 December 2010) ------------- Provide new Callback::make_val() factory functions for the more efficient passing of bound class-type value arguments (callback.h, emitter.h, emitter.cpp). Optimise argument passing with Cgu::Thread::Future objects (future.h, future.tpp). Move CVS sourceforge repository to SVN (doxygen.main.in). Documentation updates (callback.h, future.h, gstream.h, widget.h). Version 1.2.7 (2 November 2010) ------------- Implement prog_presenter using gio's dbus implementation instead of dbus-glib where glib >= 2.26.0 is installed (acinclude.m4, configure-gtk2.ac, configure-gtk3.ac, prog_present.h, prog_present.cpp). Provide a new GvarHandle class for managing GVariant reference counts (gvar_handle.h, doxygen.main.in). Fix additional breakage in gtk+-2.91 (file_print_manager.cpp, window.cpp). Fix compilation error where library is compiled against gtk+-2.10 or 2.12 (file_print_manager.h). Emit warning rather than compile error if gstream.h is included by a user file by mistake and glib < 2.16.0 is installed (gstream.h). Documentation improvements and corrections (fdstream.h, future.h, gstream.h, shared_handle.h, window.h). Version 1.2.6 (1 October 2010) ------------- Provide C++ streams and streambuffer for GIO streams (gstream.h, gstream.tpp, acinclude.m4, configure-gtk2.ac, configure-gtk3.ac, c++-gtk-utils-1.2.pc.in, c++-gtk-utils-1.3.pc.in). Provide random access on seekable files with fdostream and fdistream classes (fdstream.h and fdstream.tpp). Provide optional output buffering with fdostream class (fdstream.h and fdstream.tpp). Clear stream state flags of fdstreams when attach() method called, and set failbit if there is an error in closing a stream (fdstream.h and fdstream.tpp). Use full buffer space if available when calling xsputn() (so mimicking repeated calls to sputc()) (fdstream.tpp). Use gtk_widget_destroy() rather than gtk_object_destroy() (it looks as if GtkObject is on the way out) (window.cpp). Standardize on tpp instead of tcc as the suffix for template implementation files (fdstream.h, fdstream.tcc/fdstream.tpp, future.h, future.tcc/future.tpp). Update documentation (doxygen.main.in, fdstream.h, gerror_handle.h, gobj_handle.h, intrusive_ptr.h, shared_handle.h, shared_ptr.h, thread.h and NEWS). Version 1.2.5 (1 September 2010) ------------- Provide a new set_byteswap() function for wide stream input streams and input streambuffers so as to provide conversion of incoming text to native endian format where required (fdstream.h, fdstream.tcc). Provide a convenience Cgu::WinBase::show_all() method (window.h). Hide all relevant GObject callbacks in friend helper classes, and provide documentation on this technique for library users (doxygen.main.in, file_print_manager.h, file_print_manager.cpp, text_print_manager.h, text_print_manager.cpp, window.h and window.cpp). Add local m4 search path for aclocal in bootstrap scripts (bootstrap-gtk2.sh, bootstrap-gtk3.sh). Provide convenience operator!=() functions for Functor and SafeFunctor objects to match the operator==() functions (callback.h). Documentation improvements (convert.h, emitter.h, mem_fun.h, window.h). Version 1.2.4 (19 July 2010) ------------- Fix compilation error where a Cgu::Thread::Future object is created for a non-member function (or static member function) taking no argument (future.tcc). Remove redundant anonymous namespace for internal functions with C linkage and revise function names (callback.cpp, file_print_manager.h, file_print_manager.cpp, io_watch.cpp, text_print_manager.h, text_print_manager.cpp, thread.cpp, timeout.cpp, window.h, window.cpp). Documentation additions, including providing additional examples (fdstream.h, gobj_handle.h, reassembler.h, window.h). Version 1.2.3 (2 June 2010) ------------- Make a library configuration check for _POSIX_CLOCK_SELECTION as well as _POSIX_MONOTONIC_CLOCK when checking the availability of monotonic clocks for condition variables (corrects BSD builds) (acinclude.m4). Correct autoconf configuration test for runtime recursive mutexes (acinclude.m4) Provide compile option for GTK+-3 (new files configure-gtk2.ac, configure-gtk3.ac, configure-gtk2, configure-gtk3, bootstrap-gtk2.sh, bootstrap-gtk3.sh and c++-gtk-utils-1.3.pc.in; changed files README, acinclude.me, c++-gtk-utils-1.2.pc.in, Makefile.am, c++-gtk-utils/Makefile.am, file_print_manager.h and file_print_manager.cpp). Standardise on using gboolean rather than int when dealing with PresentFunc return value (internal only, doesn't affect API/ABI even if they weren't the same, which they are) (prog_present.cpp). Change prog_present example so as not to use GSEAL'ed window member (prog_present.h). Go to automake 1.11.1, autoconf 2.65 and libtool 2.2.6b. Documentation corrections (async_queue.h and doxygen.main.in). Version 1.2.2 (5 May 2010) ------------- Compilation fixes for gcc-4.5.0 (future.h, future.tcc, thread.h and thread.cpp). Improve the information provided by Cgu::present_instance() so that 2 is returned instead of 1 where the ProgPresent callback returns FALSE (1 is only now returned by present_instance() in a case where there has been a dbus error) (prog_present.cpp). Put ProgPresenter GObject class in Cgu namespace as CguProgPresenter, move CguProgPresenter dbus objects to /org/cgu namespace, explicitly declare CguProgPresenter GObject methods as extern C and further "C++-ify" the implementation (note, as CguProgPresenter is entirely internal with methods with only internal linkage this does not affect API/ABI, but it reduces the risk of GType name clashes with any user-defined GObjects) (prog_present.cpp; make_bindings.sh, prog-presenter.xml, prog-presenter-bindings.h and prog-presenter-glue.h). Documentation corrections and improvements (async_queue.h, gobj_handle.h, emitter.h, io_watch.h, mutex.h, prog_presenter.h, rw_lock.h and timeout.h). Version 1.2.1 (16 April 2010) ------------- Provide GobjWeakHandle class (gobj_handle.h). Provide start_timeout_seconds() functions (timeout.h and timeout.cpp). Provide Thread::RWLock class and associated locking classes (rw_lock.h). Provide Thread::Mutex::TrackLock and Thread::RecMutex::TrackLock locking classes which track locked status (mutex.h). Correct the implementation of Cgu::RecMutex::test_support(), and provide a new symbol CGU_HAVE_RECURSIVE_MUTEX which user programs can use at compile time (acinclude.m4, cgu_config.h.in, mutex.h and mutex.cpp). Correct documentation on Utf8 namespace and improve documentation on other matters (convert.h, fdstream.h, future.h, mutex.h, pipes.h, shared_handle.h, shared_ptr.h and window.h). Version 1.2.0 (20 March 2010) ------------- Put the library in namespace Cgu. This requires the binary version number to be bumped, and the pkg-config file is now c++-gtk-utils-1.2.pc rather than c++-gtk-utils.pc, but a --with-cgu-using-directive configuration option is available to maintain source compatibility, which will cause each of the library headers to have a 'using namespace Cgu' using directive. (acinclude.m4, configure.ac, README, doxygen.main.in, namespace.h.in, async_queue.h, callback.h, callback.cpp, convert.h, convert.cpp, emitter.h, emitter.cpp, fdstream.h, fdstream.tcc, file_print_manager.h, file_print_manager.cpp, future.h, future.tcc, gerror_handle.h, gobj_handle.h, intrusive_ptr.h, io_watch.h, io_watch.cpp, mem_fun.h, mutex.h, mutex.cpp, notifier.h, notifier.cpp, pipes.h, pipes.cpp, prog_present.h, prog_present.cpp, reassembler.h, reassembler.cpp, shared_handle.h, shared_ptr.h, text_print_manager.h, text_print_manager.cpp, thread.h, thread.cpp, timeout.h, timeout.cpp, widget.h, widget.cpp, window.h, window.cpp, src/Makefile.am and src/Makefile.in.) Fix memory leak in FilePrintManager::show_dialog() (file_print_manager.cpp). Make detection of monotonic clocks for condition variable timed waits an automatic configuration matter rather than a separate user option (acinclude.m4, configure.ac, async_queue.h, mutex.h and mutex.cpp). Make detection of whether sched_yield() is available an automatic configuration matter rather than a separate user option (acinclude.m4, configure.ac, emitter.h and emitter.cpp). Make detection of whether headers include provision for recursive mutexes an automatic configuration matter, and provide a new GrecmutexLock class for cases where they are not available and GStaticRecMutex is used (acinclude.m4, configure.ac, mutex.h and mutex.cpp). Provide user-definable symbol which a library user can define so as to cause mutexes rather than glib atomic functions to protect reference counts (intrusve_ptr.h, shared_handle.h and shared_ptr.h). Correct error in the operator<() functions for FunctorArg and SafeFunctorArg objects (callback.h). Provide a new Thread::JoinableHandle::is_managing() method (thread.h and thread.cpp). Make Thread::JoinableHandle constructors strongly exception safe and correct documentation (thread.h). Improve error detection in Thread::Thread::start() (thread.cpp). Correction of documentation (callback.h). Version 1.0.3 (2 March 2010) ------------- Provide new --with-glib-memory-slices-compat and --with-glib-memory-slices-no-compat compilation configuration options so that library classes uses glib memory slices when constructed on free store (acinclude.m4, configure.in, README, doxygen.main.in, memory.h.in, async_queue.h, callback.h, convert.h, emitter.h, fdstream.h, file_print_manager.h, future.h, mutex.h, notifier.h, pipes.h, reassembler.h, shared_handle.h, shared_ptr.h, text_print_manager.h, thread.h, widget.h and window.h). Provide new GSliceFree, GSliceFreeSize and GSliceDestroy deleter functors to enable the SharedHandle, SharedLockHandle and ScopedHandle classes to manage glib memory slices (shared_handle.h). Guard against a case where, in relation to a GtkDialog object, both a response signal handler and WinBase::on_delete_event() call WinBase::close() when a delete-event happens (window.h and window.cpp). Add documentation about the use of GtkDialog objects with the WinBase class, and about the modal and parent arguments of the WinBase constructor (window.h). Improve the FilePrintManager implementation (file_print_manager.cpp). Other documentation improvements (gerror_handle.h, notifier.h and shared_handle.h) Version 1.0.2 (27 January 2010) ------------- Provide new Thread::Future class (future.h and future.tcc). Provide new Thread::JoinableHandle class (thread.h and thread.cpp). Enable SharedHandle/ScopedHandle/SharedLockHandle classes to manage pointers to const objects (shared_handle.h and gerror_handle.h). Add release() method to ScopedHandle class (shared_handle.h). Documentation improvements (callback.h and mutex.h). Version 1.0.1 (29 December 2009) ------------- Disconnect the timeout from the main loop where a Releaser object has given rise to an empty EmitterArg object for the timeout (timeout.cpp). Provide Utf8::Iterator and Utf8::ReverseIterator classes for iterating through a std::string object by UTF-8 character rather than by bytes (convert.h). Amend the exception in applying the LGPL to templates so as to include also inline functions and macros of any length (async_queue.h, callback.h, callback.cpp, convert.h, emitter.h, emitter.cpp, fdstream.h, fdstream.tcc, gobj_handle.h, intrusive_ptr.h, mem_fun.h, mutex.h, shared_handle.h and shared_ptr.h). Document the StandardArrayDelete<>, CFree, GFree and GerrorFree functors (shared_handle.h and gerror_handle.h). Provide further comments in the documentation on use of wfdostream and wfdistream (fdstream.h). Version 1.0.0 (6 November 2009) ------------- If start_iowatch(), start_timeout, or Callback::post() throw, delete the CallbackArg argument passed to them, and document this (callback.h, callback.cpp, io_watch.h, io_watch.cpp, timeout.h, timeout.cpp). Make PipeFifo::connect_to_stdin(), PipeFifo::connect_to_stdout() and PipeFifo::connect_to_stderr() return better error information (this means they may now return -2 as well as -1 in the case of error) (pipes.h and pipes.cpp). Make FilePrintManager implementation exception-safe if std::bad_alloc thrown (configure.ac, file_print_manager.cpp). Remove unnecessary header (gobj_handle.h). Improve implementation of 'make uninstall' with respect to html documentation (docs/reference/Makefile.am, docs/reference/Makefile.in). Documentation improvements, including stating version number at which new interfaces after version 0.9.0 available (callback.h, convert.h, emitter.h, file_print_manager.h, gobj_handle.h, intrusive_ptr.h, io_watch.h, notifier.h, pipes.h, shared_handle.h, shared_ptr.h, text_print_manager.h, thread.h, timeout.h, window.h). Version 0.9.2 (6 October 2009) ------------- Provide a new start_timeout() function to start timeouts in a glib main loop with Callback objects with automatic disconnection (timeout.h, timeout.cpp). Provide functions for converting between codesets (convert.h, convert.cpp). Permit Callback::post() to post to any thread with a main loop and start_iowatch() to have other than default priority (these keep API compatibility but require bumping of the libtool interface number because of binary interface incompatibility) (callback.h, callback.cpp, io_watch.h, io_watch.cpp). Implement Releaser, EmitterArg and SafeEmitterArg so they are compiled into the library rather than as inline (emitter.h, emitter.cpp). Take the incorporated libtool version to libtool-2.2.6. Make minor documentation improvements (callback.h, io_watch.h, mutex.h, shared_handle.h, shared_ptr.h, thread.h, window.h, doxygen.main, doxygen.main.in). Version 0.9.1 (22 September 2009) ------------- Provide version of SharedPtr, SharedLockPtr, SharedHandle and SharedLockHandle with an additional reset() method and constructor taking a pointer which do not delete the contained object if allocation fails (shared_handle.h, shared_ptr.h). Make the constructors of SharedPtr, SharedLockPtr, SharedHandle and SharedLockHandle which take a pointer no-throw if they are passed a NULL argument (shared_handle.h, shared_ptr.h). Provide a reset() method for the ScopedHandle class (shared_handle.h). Provide a restore() method for the CancelBlock class and make the destructor of that class restore cancellation state to the state it was in prior to it being constructed, rather than automatically make the thread cancellable (thread.h, thread.cpp). Make throwing/catching NPTL cancellation friendly (file_print_manager.cpp, io_watch.cpp, shared_handle.h, shared_ptr.h). Make blocking methods of AsyncQueueDispatch cancellation safe (async_queue.h). Standardise on glib error reporting system (callback.cpp, file_print_manager.cpp, io_watch.cpp, lib_defs.h, notifier.cpp, prog_present.cpp, text_print_manager.cpp). Add to permissible single-instance program names for delimiting (prog_present.cpp). Improve documentation (async_queue.h, gobj_handle.h, io_watch.h, pipes.h, notifier.h, reassembler.h, thread.h). Version 0.9.0 (15 September 2009) ------------- First public release.