diff --git a/include/nana/gui/wvl.hpp b/include/nana/gui/wvl.hpp index 0500a6a0..ccee91d3 100644 --- a/include/nana/gui/wvl.hpp +++ b/include/nana/gui/wvl.hpp @@ -1,7 +1,7 @@ /** * Nana GUI Library Definition * Nana C++ Library(http://www.nanapro.org) - * Copyright(C) 2003-2016 Jinhao(cnjinhao@hotmail.com) + * Copyright(C) 2003-2017 Jinhao(cnjinhao@hotmail.com) * * Distributed under the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or copy at @@ -59,6 +59,8 @@ namespace nana template using form_loader = detail::form_loader; +#ifdef NANA_AUTOMATIC_GUI_TESTING + /// @brief Take control of the GUI and optionaly automaticaly tests it. /// /// @detail It transfers to nana the program flow control, which begin pumping messages @@ -77,6 +79,9 @@ namespace nana /// in seconds void Wait(unsigned wait = 0); +#else + void exec(); +#endif }//end namespace nana diff --git a/source/detail/platform_abstraction.cpp b/source/detail/platform_abstraction.cpp index 1fc10c4a..40d12d46 100644 --- a/source/detail/platform_abstraction.cpp +++ b/source/detail/platform_abstraction.cpp @@ -388,8 +388,7 @@ namespace nana { if(1 == ++(fc[ttf.string()])) { - auto state = ::FcConfigAppFontAddFile(nullptr, reinterpret_cast(ttf.string().c_str())); - state = 0; + ::FcConfigAppFontAddFile(nullptr, reinterpret_cast(ttf.string().c_str())); } } else diff --git a/source/gui/detail/bedrock_posix.cpp b/source/gui/detail/bedrock_posix.cpp index 61ec6045..55c39b58 100644 --- a/source/gui/detail/bedrock_posix.cpp +++ b/source/gui/detail/bedrock_posix.cpp @@ -1193,6 +1193,14 @@ namespace detail native_interface::enable_window(owner_native, true); } + //Before exit of pump_event, it should call the remove_trash_handle. + //Under Linux, if the windows are closed in other threads, all the widgets handles + //will be marked as deleted after exit of the event loop and in other threads. So the + //handle should be deleted from trash before exit the pump_event. + auto thread_id = ::nana::system::this_thread_id(); + wd_manager().call_safe_place(thread_id); + wd_manager().remove_trash_handle(thread_id); + lock.forward(); if(0 == --(context->event_pump_ref_count)) diff --git a/source/gui/wvl.cpp b/source/gui/wvl.cpp index ff9509d8..820a8ba7 100644 --- a/source/gui/wvl.cpp +++ b/source/gui/wvl.cpp @@ -28,6 +28,8 @@ namespace nana } } +#ifdef NANA_AUTOMATIC_GUI_TESTING + void click(widget& w) { std::cout << "Automatically clicking widget "<f // = {} ///< emit events to mimics user actions and may asert results ) { - #ifdef NANA_AUTOMATIC_GUI_TESTING std::cout << "Will wait " << wait << " sec...\n"; @@ -87,13 +88,12 @@ namespace nana pump(); if (t.joinable()) t.join(); - - #else - static_cast(wait); - static_cast(wait_end); - static_cast(f); //to eliminte unused parameter compiler warning. - - pump(); - #endif } +#else + void exec() + { + internal_scope_guard lock; + detail::bedrock::instance().pump_event(nullptr, false); + } +#endif }//end namespace nana