[gtkmm] Builder::get_widget_derived(): Make this static
- From: Murray Cumming <murrayc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtkmm] Builder::get_widget_derived(): Make this static
- Date: Tue, 18 Apr 2017 08:53:55 +0000 (UTC)
commit e1eb87eeb949a03505a7a590968acd366f37a01d
Author: Murray Cumming <murrayc murrayc com>
Date: Mon Apr 17 22:04:19 2017 +0200
Builder::get_widget_derived(): Make this static
To avoid the need to create a shared_ptr to this.
Bug #755037
demos/gtk-demo/example_builder.cc | 2 +-
demos/gtk-demo/example_shortcuts.cc | 2 +-
gtk/src/builder.hg | 16 +++++++---------
tests/builder/main.cc | 6 +++---
4 files changed, 12 insertions(+), 14 deletions(-)
---
diff --git a/demos/gtk-demo/example_builder.cc b/demos/gtk-demo/example_builder.cc
index adf166b..1062572 100644
--- a/demos/gtk-demo/example_builder.cc
+++ b/demos/gtk-demo/example_builder.cc
@@ -39,7 +39,7 @@ Gtk::Window* do_builder()
// Get the GtkBuilder-instantiated window:
Example_Builder* pWindow = nullptr;
- builder->get_widget_derived("window1", pWindow);
+ Gtk::Builder::get_widget_derived(builder, "window1", pWindow);
if (!pWindow)
{
std::cout << "Could not get 'window1' from the builder." << std::endl;
diff --git a/demos/gtk-demo/example_shortcuts.cc b/demos/gtk-demo/example_shortcuts.cc
index 37e593c..a5975bb 100644
--- a/demos/gtk-demo/example_shortcuts.cc
+++ b/demos/gtk-demo/example_shortcuts.cc
@@ -39,7 +39,7 @@ Gtk::Window* do_shortcuts()
// Get the GtkBuilder-instantiated window:
Example_Shortcuts* pWindow = nullptr;
- builder->get_widget_derived("window1", pWindow);
+ Gtk::Builder::get_widget_derived(builder, "window1", pWindow);
if (!pWindow)
{
std::cout << "Could not get 'window1' from the builder." << std::endl;
diff --git a/gtk/src/builder.hg b/gtk/src/builder.hg
index c0e1752..6c202ea 100644
--- a/gtk/src/builder.hg
+++ b/gtk/src/builder.hg
@@ -500,8 +500,8 @@ public:
* @code
* MyDerivedDialog* pDialog1 = nullptr;
* MyDerivedDialog* pDialog2 = nullptr;
- * refBuilder->get_widget_derived("mydialog1", pDialog1);
- * refBuilder->get_widget_derived("mydialog2", pDialog2, "A storm is imminent!", true);
+ * get_widget_derived(refBuilder, "mydialog1", pDialog1);
+ * get_widget_derived(refBuilder, "mydialog2", pDialog2, "A storm is imminent!", true);
* @endcode
*
* @note
@@ -515,14 +515,14 @@ public:
* @retval widget A pointer to the widget, or <tt>nullptr</tt> on failure.
*/
template <typename T_Widget, typename... Args> inline
- void get_widget_derived(const Glib::ustring& name, T_Widget*& widget, Args&&... args)
+ static void get_widget_derived(const Glib::RefPtr<Gtk::Builder>& builder, const Glib::ustring& name,
T_Widget*& widget, Args&&... args)
{
// Initialize output parameter:
widget = nullptr;
// Get the widget from the GtkBuilder file.
using cwidget_type = typename T_Widget::BaseObjectType;
- auto pCWidget = (cwidget_type*)get_cwidget(name);
+ auto pCWidget = (cwidget_type*)builder->get_cwidget(name);
//The error was already reported by get_cwidget().
if(!pCWidget)
@@ -548,9 +548,7 @@ public:
//Create a new C++ instance to wrap the existing C instance:
//Set the output variable. We needed to do this because we can not template the return type.
- Glib::RefPtr<Gtk::Builder> refThis(this);
- refThis->reference(); //take a copy.
- widget = new T_Widget(pCWidget, refThis, std::forward<Args>(args)...);
+ widget = new T_Widget(pCWidget, builder, std::forward<Args>(args)...);
// Don't add reference to widget. That's done only in methods that return
// a Glib::RefPtr<Something>.
}
@@ -560,9 +558,9 @@ public:
* @newin{3,8}
*/
template <typename T_Widget, typename... Args> inline
- void get_widget_derived(const Glib::ustring& name, const T_Widget*& widget, Args&&... args) const
+ static void get_widget_derived(const Glib::RefPtr<const Gtk::Builder>& builder, const Glib::ustring& name,
const T_Widget*& widget, Args&&... args)
{
- const_cast<Builder*>(this)->get_widget_derived(name, widget, std::forward<Args>(args)...);
+ get_widget_derived(std::const_pointer_cast<Gtk::Builder>(builder), name, widget,
std::forward<Args>(args)...);
}
#m4 _CONVERSION(`GSList*',`std::vector<Glib::RefPtr<Glib::Object>
',`Glib::SListHandler<Glib::RefPtr<Glib::Object> >::slist_to_vector($3, Glib::OWNERSHIP_SHALLOW)')
diff --git a/tests/builder/main.cc b/tests/builder/main.cc
index 0ff8c2f..2a9635b 100644
--- a/tests/builder/main.cc
+++ b/tests/builder/main.cc
@@ -114,8 +114,8 @@ public:
std::cout << "MainWindow::ctor" << std::endl;
// Called twice just to see if two calls affect the ref count.
- refBuilder->get_widget_derived("derived_button", m_pDerivedButton, "face-smile");
- refBuilder->get_widget_derived("derived_button", m_pDerivedButton);
+ Gtk::Builder::get_widget_derived(refBuilder, "derived_button", m_pDerivedButton, "face-smile");
+ Gtk::Builder::get_widget_derived(refBuilder, "derived_button", m_pDerivedButton);
refBuilder->get_widget("standard_button", m_pStandardButton);
refBuilder->get_widget("standard_button", m_pStandardButton);
@@ -155,7 +155,7 @@ int main(int argc, char* argv[])
auto builder = Gtk::Builder::create_from_string(gladefile);
MainWindow* main_win = nullptr;
- builder->get_widget_derived("main_window", main_win);
+ Gtk::Builder::get_widget_derived(builder, "main_window", main_win);
Gtk::Button* orph_button = nullptr;
builder->get_widget("orphaned_button", orph_button);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]