gtk4.cr
gtk4.cr copied to clipboard
GICrystal::ObjectCollectedError when trying to bind to a property from a UiTemplate
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 ???