gtk4.cr icon indicating copy to clipboard operation
gtk4.cr copied to clipboard

GICrystal::ObjectCollectedError when trying to bind to a property from a UiTemplate

Open thatcher-gaming opened this issue 8 months ago • 5 comments

Using a property binding from within a .ui file will result in a GICrystal::ObjectCollectedError being raised.

Here's an example:

require "gtk4"

APP_ID = "com.example.test"

@[Gtk::UiTemplate(file: "src/test.ui")]
class TestWindow < Gtk::ApplicationWindow
  include Gtk::WidgetTemplate

  @[GObject::Property]
  property test = "hello"

  def initialize()
    super()
  end
end

app = Gtk::Application.new(APP_ID, Gio::ApplicationFlags::None)

app.activate_signal.connect do
  window = TestWindow.new
  window.application = app

  window.present
end

exit(app.run(ARGV))

test.ui:

<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <requires lib="gtk" version="4.0"/>
  <template class="TestWindow" parent="GtkApplicationWindow">
    <property name="title" bind-source="TestWindow" bind-property="test" bind-flags="sync-create"/>
  </template>
</interface>

Output:

Unhandled exception:  (GICrystal::ObjectCollectedError)
  from src/test.cr:6:1 in '_vfunc_unsafe_get_property'
  from src/test.cr:6:1 in '->'
  from /lib64/libgobject-2.0.so.0 in 'g_object_get_property'
  from /lib64/libgobject-2.0.so.0 in '??'
  from /lib64/libgobject-2.0.so.0 in 'g_object_bind_property_full'
  from /lib64/libgobject-2.0.so.0 in 'g_object_bind_property'
  from /lib64/libgtk-4.so.1 in '??'
  from /lib64/libgtk-4.so.1 in 'gtk_builder_extend_with_template'
  from /lib64/libgtk-4.so.1 in 'gtk_widget_init_template'
  from src/test.cr:7:3 in '_instance_init'
  from src/test.cr:6:1 in '->'
  from /lib64/libgobject-2.0.so.0 in 'g_type_create_instance'
  from /lib64/libgobject-2.0.so.0 in '??'
  from /lib64/libgobject-2.0.so.0 in 'g_object_newv'
  from lib/gi-crystal/src/bindings/g_object/object.cr:607:18 in 'initialize'
  from lib/gi-crystal/src/auto/g_object-2.0/initially_unowned.cr:17:7 in 'initialize'
  from lib/gi-crystal/src/auto/gtk-4.0/widget.cr:26:7 in 'initialize'
  from lib/gi-crystal/src/auto/gtk-4.0/window.cr:35:7 in 'initialize'
  from lib/gi-crystal/src/auto/gtk-4.0/application_window.cr:41:7 in 'initialize'
  from src/test.cr:13:5 in 'initialize'
  from src/test.cr:12:3 in 'new'
  from src/test.cr:20:12 in '->'
  from lib/gi-crystal/src/auto/gio-2.0/application.cr:770:44 in '->'
  from /lib64/libgobject-2.0.so.0 in 'g_closure_invoke'
  from /lib64/libgobject-2.0.so.0 in '??'
  from /lib64/libgobject-2.0.so.0 in '??'
  from /lib64/libgobject-2.0.so.0 in 'g_signal_emit_valist'
  from /lib64/libgobject-2.0.so.0 in 'g_signal_emit'
  from /lib64/libgio-2.0.so.0 in '??'
  from /lib64/libgio-2.0.so.0 in 'g_application_run'
  from lib/gi-crystal/src/auto/gio-2.0/application.cr:544:7 in 'run'
  from src/test.cr:26:6 in '__crystal_main'
  from /usr/share/crystal/src/crystal/main.cr:129:5 in 'main_user_code'
  from /usr/share/crystal/src/crystal/main.cr:115:7 in 'main'
  from /usr/share/crystal/src/crystal/main.cr:141:3 in 'main'
  from /lib64/libc.so.6 in '??'
  from /lib64/libc.so.6 in '__libc_start_main'
  from /home/leah/.cache/crystal/crystal-run-test.tmp in '_start'
  from ???

thatcher-gaming avatar Jun 11 '24 10:06 thatcher-gaming