Re: Setting custom Glib::Property values in Gtk::Builder .ui XML



On 6/13/19 2:41 PM, Daniel Boles via gtkmm-list wrote:
> for posterity, it looks like someone else has had the same questions but didn't get much further:

That user was also using wrap_register() to have code called when glibmm wraps the C instances. I know next to nothing about that - but I wonder if it's at all possible that it could be used with builder->get_objects() in order to ensure everything gets wrapped, and custom code in the registered wrap_new() function to apply the derived properties? However, it seems that user didn't get that to work, if I understood correctly.

I've made a similar test. It failed.

I started with gtkmm-documentation/examples/book/builder/derived and replaced the GtkButton with
  class MyButton : public Gtk::Button
with a few custom properties. I used Glib::Property for those properties. In the .ui file:
  <object class="gtkmm__CustomObject_MyButton" id="quit_button">

MyButton has
  MyButton(GtkButton* castitem);
  static Glib::ObjectBase* wrap_new(GObject* object);
and I call
Glib::wrap_register(g_type_from_name("gtkmm__CustomObject_MyButton"), &MyButton::wrap_new); after having created a dummy MyButton instance to have the class init function called.

The only problem is that the custom property values, specified in the .ui file, are not stored anywhere. Glib::Property stores custom property values in the C++ code, but GtkBuilder creates a C instance of MyButton and tries to store the property values before Gtk::Builder::get_widget() has created the C++ wrapper. Glib::custom_set_property_callback() in glibmm/property.cc discards the values.

Conclusion: It's not possible to combine Glib::Property with Gtk::Builder.



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]