[Vala] Modifying a Gtk.Entry's value on the fly



Hello,

I want to format the date of the birthday Gtk.Entry on the fly so that if
the user types eg. Jan 1, 2019 it will be converted to January 1, 2019.  I
have code to convert the date already but it seems signal insert_text is
crashing on me even for the basic one (without changing anything). Here's
my builder code:
<object class="GtkEntry" id="birthday">
  <property name="visible">True</property>
  <property name="can_focus">True</property>
  <property name="has_frame">False</property>
  <property name="width_chars">19</property>
  <property name="placeholder_text" translatable="yes">ex. January 1,
2001</property>
  <signal name="insert_text" handler="on_birthday_insert_text"
swapped="no"/>
</object>

And here's my signal handler:
        [GtkCallback]
        private void on_birthday_insert_text(Gtk.Editable widget, string
text, int length, ref int position)
        {
            GLib.SignalHandler.block_by_func(widget, (void *)
on_birthday_insert_text, (void *) this);
            widget.insert_text(text, length, ref position);
            GLib.SignalHandler.unblock_by_func(widget, (void *)
on_birthday_insert_text, (void *) this);
            GLib.Signal.stop_emission_by_name(widget, "insert_text");
        }

When I type anything in the entry it crashes with:
Thread 1 "pcc" received signal SIGSEGV, Segmentation fault.
0x00007ffff7d5155a in g_closure_invoke ()
   from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
(gdb) bt
#0  0x00007ffff7d5155a in g_closure_invoke ()
    at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#1  0x00007ffff7d65544 in  () at
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#2  0x00007ffff7d6e327 in g_signal_emit_valist ()
    at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#3  0x00007ffff7d6efa9 in g_signal_emit_by_name ()
    at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#4  0x000055555555aeda in pcc_window_on_birthday_insert_text
    (self=0x55555565ca70, widget=0x5555559e34c0, text=0x555555dc77a0 "x",
length=1, position=0x7fffffffcb34)
    at ../../../../../../../../../Projects/pcc/src/window.vala:217
#5  0x000055555555af5f in
_pcc_window_on_birthday_insert_text_gtk_editable_insert_text
    (_sender=0x5555559e34c0, new_text=0x555555dc77a0 "x",
new_text_length=1, position=0x7fffffffcb34, self=0x55555565ca70)
    at ../../../../../../../../../Projects/pcc/src/window.vala:32
#6  0x00007ffff7d515e8 in g_closure_invoke ()
    at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#7  0x00007ffff7d65544 in  () at
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#8  0x00007ffff7d6e327 in g_signal_emit_valist ()
    at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#9  0x00007ffff7d6efa9 in g_signal_emit_by_name ()
    at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
--Type <RET> for more, q to quit, c to continue without paging--
#10 0x000055555555aeda in pcc_window_on_birthday_insert_text
    (self=0x55555565ca70, widget=0x5555559e34c0, text=0x555555dc7780 "x",
length=1, position=0x7fffffffcb34) at
../../../../../../../../../Projects/pcc/src/window.vala:217
#11 0x000055555555af5f in
_pcc_window_on_birthday_insert_text_gtk_editable_insert_text
    (_sender=0x5555559e34c0, new_text=0x555555dc7780 "x",
new_text_length=1, position=0x7fffffffcb34, self=0x55555565ca70)
    at ../../../../../../../../../Projects/pcc/src/window.vala:32
#12 0x00007ffff7d515e8 in g_closure_invoke ()
    at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#13 0x00007ffff7d65544 in  () at
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#14 0x00007ffff7d6e327 in g_signal_emit_valist ()
    at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#15 0x00007ffff7d6efa9 in g_signal_emit_by_name ()
    at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#16 0x000055555555aeda in pcc_window_on_birthday_insert_text
    (self=0x55555565ca70, widget=0x5555559e34c0, text=0x555555dc7760 "x",
length=1, position=0x7fffffffcb34) at
../../../../../../../../../Projects/pcc/src/window.vala:217
#17 0x000055555555af5f in
_pcc_window_on_birthday_insert_text_gtk_editable_insert_text
    (_sender=0x5555559e34c0, new_text=0x555555dc7760 "x",
new_text_length=1, position=0x7fffffffcb34, self=0x55555565ca70)
    at ../../../../../../../../../Projects/pcc/src/window.vala:32
#18 0x00007ffff7d515e8 in g_closure_invoke ()
    at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#19 0x00007ffff7d65544 in  () at
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#20 0x00007ffff7d6e327 in g_signal_emit_valist ()
    at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#21 0x00007ffff7d6efa9 in g_signal_emit_by_name ()
    at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#22 0x000055555555aeda in pcc_window_on_birthday_insert_text

So I guess it's not blocking since it goes to a loop. Please help.

Thank you.

All the best,

Shem Pasamba


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