From ee64cd329725218231e5b1bade01c998482f5da7 Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Fri, 25 Jan 2019 16:57:19 +0100 Subject: Gio::AsyncResult: Explain why wrap() is not used in get_source_object_base() * gio/src/asyncresult.ccg: Replace a TODO comment with an explanation. * tests/giomm_asyncresult_sourceobject/main.cc: Add code that demonstrates why Glib::wrap(GObject* object, bool take_copy) returns an empty RefPtr. --- tests/giomm_asyncresult_sourceobject/main.cc | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/giomm_asyncresult_sourceobject/main.cc b/tests/giomm_asyncresult_sourceobject/main.cc index cf2b01be..6e71a755 100644 --- a/tests/giomm_asyncresult_sourceobject/main.cc +++ b/tests/giomm_asyncresult_sourceobject/main.cc @@ -1,5 +1,6 @@ #include #include +#include void on_read_async(const Glib::RefPtr& result) @@ -10,12 +11,26 @@ on_read_async(const Glib::RefPtr& result) exit(EXIT_FAILURE); } - if (!g_async_result_get_source_object(result->gobj())) + auto cobj = g_async_result_get_source_object(result->gobj()); + if (!cobj) { std::cerr << G_STRFUNC << ": g_async_result_get_source_object() failed." << std::endl; exit(EXIT_FAILURE); } + // Show why Glib::wrap(cobj) can't be used in Gio::AsyncResult::get_source_object_base(). + // cppobjbase is not a Glib::Object*, it's a Gio::File* which is a Glib::Interface*. + std::cout << "GType name: " << G_OBJECT_TYPE_NAME(cobj) << std::endl; + auto cppobjbase = Glib::wrap_auto(cobj); // Glib::ObjectBase::_get_current_wrapper(cobj); + if (cppobjbase) + { + std::cout << "C++ type name: " << typeid(*cppobjbase).name() << std::endl; + auto cppobj = dynamic_cast(cppobjbase); // Part of Glib::wrap(GObject*, bool) + auto cppiface = dynamic_cast(cppobjbase); + std::cout << "dynamic_cast: " << cppobj << std::endl; + std::cout << "dynamic_cast: " << cppiface << std::endl; + } + if (!result->get_source_object_base()) { std::cerr << G_STRFUNC << ": result->get_source_object_base() failed." << std::endl; -- cgit v1.2.1