Crash on group during move
#### Steps to reproduce:
<!-- Describe what you did (step-by-step) so we can reproduce: -->
- open Inkscape
- turn on snapping, all advanced options in snap pop-up box ~~(not absolutely sure if necessary)~~
- draw two rectangles
- switch to select tool and select both
- drag to move the rectangles
- Ctrl+G to group while in the middle of the drag
May take 2-3 attempts
#### What happened?
- crash, see backtrace in https://gitlab.com/inkscape/inkscape/-/issues/3515#note_946971609
<details><summary>Old backtrace for a single item</summary>
<pre>
◊0 0x00007fc6aaaecdcd in gdk_window_get_display (window=0x559ddbd4cd30) at ../../../../gdk/gdkwindow.c:2324
2324 ../../../../gdk/gdkwindow.c: No such file or directory.
[Current thread is 1 (Thread 0x7fc6a65d2100 (LWP 411955))]
(gdb) bt
◊0 0x00007fc6aaaecdcd in gdk_window_get_display (window=0x559ddbd4cd30) at ../../../../gdk/gdkwindow.c:2324
◊1 0x00007fc6aaadbdce in event_get_display (event=0x559ddbb54db0) at ../../../../gdk/gdkevents.c:457
◊2 gdk_event_free (event=0x559ddbb54db0) at ../../../../gdk/gdkevents.c:839
◊3 0x00007fc6ae3d3f38 in Inkscape::UI::Tools::DelayedSnapEvent::~DelayedSnapEvent() (this=0x559ddba83850, __in_chrg=<optimised out>) at ../src/ui/tools/tool-base.h:88
◊4 Inkscape::UI::Tools::sp_event_context_snap_watchdog_callback(void*) (data=0x559ddba83850, data@entry=<error reading variable: value has been optimised out>)
at ../src/ui/tools/tool-base.cpp:1648
◊5 0x00007fc6ad21abe8 in g_timeout_dispatch (source=0x559ddd844f90, callback=<optimised out>, user_data=<optimised out>) at ../../../glib/gmain.c:4800
◊6 0x00007fc6ad21a04e in g_main_dispatch (context=0x559dd9f76a90) at ../../../glib/gmain.c:3309
◊7 g_main_context_dispatch (context=context@entry=0x559dd9f76a90) at ../../../glib/gmain.c:3974
◊8 0x00007fc6ad21a400 in g_main_context_iterate (context=context@entry=0x559dd9f76a90, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimised out>)
at ../../../glib/gmain.c:4047
◊9 0x00007fc6ad21a4a3 in g_main_context_iteration (context=context@entry=0x559dd9f76a90, may_block=may_block@entry=1) at ../../../glib/gmain.c:4108
◊10 0x00007fc6ac249fe5 in g_application_run (application=0x559dd9fd1210 [gtkmm__GtkApplication], argc=<optimised out>, argv=<optimised out>)
at ../../../gio/gapplication.c:2559
◊11 0x0000559dd836b364 in main(int, char**) (argc=<optimised out>, argv=<optimised out>) at /usr/include/glibmm-2.4/glibmm/refptr.h:405
</pre>
</details>
<details><summary>Update: this is outdated; Backtrace with https://gitlab.com/inkscape/inkscape/-/merge_requests/4444 abf0a04, which doesn't include snapping functions in backtrace</summary>
<pre>
(org.inkscape.Inkscape:410950): GLib-CRITICAL **: 22:13:13.276: Source ID 1480107040 was not found when attempting to remove it
malloc_consolidate(): invalid chunk size
Thread 1 "inkscape" received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
50 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
◊0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
◊1 0x00007ffff5a03859 in __GI_abort () at abort.c:79
◊2 0x00007ffff5a6e26e in __libc_message (action=action@entry=do_abort, fmt=fmt@entry=0x7ffff5b98298 "%s\n") at ../sysdeps/posix/libc_fatal.c:155
◊3 0x00007ffff5a762fc in malloc_printerr (str=str@entry=0x7ffff5b9a278 "malloc_consolidate(): invalid chunk size") at malloc.c:5347
◊4 0x00007ffff5a76ad8 in malloc_consolidate (av=av@entry=0x7ffff5bcdb80 <main_arena>) at malloc.c:4477
◊5 0x00007ffff5a78c83 in _int_malloc (av=av@entry=0x7ffff5bcdb80 <main_arena>, bytes=bytes@entry=1368) at malloc.c:3699
◊6 0x00007ffff5a7cb95 in __libc_calloc (n=<optimised out>, elem_size=<optimised out>) at malloc.c:3428
◊7 0x00007ffff607fef1 in g_malloc0 (n_bytes=n_bytes@entry=1368) at ../../../glib/gmem.c:132
◊8 0x00007ffff3b971d8 in _gtk_css_lookup_new (relevant=relevant@entry=0x0) at ../../../../gtk/gtkcsslookup.c:32
◊9 0x00007ffff3bac038 in gtk_css_static_style_new_compute
(provider=0x555555639430, matcher=matcher@entry=0x7fffffffc890, parent=parent@entry=0x5555583c8140 [GtkCssAnimatedStyle]) at ../../../../gtk/gtkcssstaticstyle.c:183
◊10 0x00007ffff3b99905 in gtk_css_node_create_style (cssnode=0x5555574368f0 [GtkCssNode]) at ../../../../gtk/gtkcssnode.c:371
◊11 gtk_css_node_real_update_style (cssnode=0x5555574368f0 [GtkCssNode], change=10745806976, timestamp=261266266260, style=0x555558560300 [GtkCssStaticStyle])
at ../../../../gtk/gtkcssnode.c:425
◊12 0x00007ffff3b98724 in gtk_css_node_ensure_style (cssnode=0x5555574368f0 [GtkCssNode], current_time=current_time@entry=261266266260)
at ../../../../gtk/gtkcssnode.c:1007
◊13 0x00007ffff3b986f7 in gtk_css_node_ensure_style (current_time=261266266260, cssnode=<optimised out>) at ../../../../gtk/gtkcssnode.c:1003
◊14 gtk_css_node_ensure_style (cssnode=0x555557436960 [GtkCssNode], current_time=current_time@entry=261266266260) at ../../../../gtk/gtkcssnode.c:1003
◊15 0x00007ffff3b986f7 in gtk_css_node_ensure_style (current_time=261266266260, cssnode=<optimised out>) at ../../../../gtk/gtkcssnode.c:1003
◊16 gtk_css_node_ensure_style (cssnode=cssnode@entry=0x555557436a40 [GtkCssNode], current_time=261266266260) at ../../../../gtk/gtkcssnode.c:1003
◊17 0x00007ffff3b9890e in gtk_css_node_ensure_style (current_time=<optimised out>, cssnode=0x555557436a40 [GtkCssNode]) at ../../../../gtk/gtkcssnode.c:1033
◊18 gtk_css_node_get_style (cssnode=0x555557436a40 [GtkCssNode]) at ../../../../gtk/gtkcssnode.c:1033
◊19 0x00007ffff3b8b970 in gtk_css_gadget_get_style (gadget=0x555557435410 [GtkCssCustomGadget]) at ../../../../gtk/gtkcssgadget.c:1107
◊20 gtk_css_gadget_get_content_allocation
(gadget=0x555557435410 [GtkCssCustomGadget], allocation=allocation@entry=0x7fffffffca90, baseline=baseline@entry=0x7fffffffca8c)
at ../../../../gtk/gtkcssgadget.c:1107
◊21 0x00007ffff3bbc26b in gtk_entry_get_text_area_size
(entry=entry@entry=0x555557386fb0 [gtkmm__GtkSpinButton], x=x@entry=0x0, y=y@entry=0x0, width=width@entry=0x7fffffffcb08, height=height@entry=0x7fffffffcb0c)
at ../../../../gtk/gtkentry.c:3723
◊22 0x00007ffff3bc34a0 in update_im_cursor_location (entry=0x555557386fb0 [gtkmm__GtkSpinButton]) at ../../../../gtk/gtkentry.c:6255
◊23 gtk_entry_recompute (entry=entry@entry=0x555557386fb0 [gtkmm__GtkSpinButton]) at ../../../../gtk/gtkentry.c:6285
◊24 0x00007ffff3bc3b87 in buffer_deleted_text (buffer=<optimised out>, position=<optimised out>, n_chars=<optimised out>, entry=0x555557386fb0 [gtkmm__GtkSpinButton])
at ../../../../gtk/gtkentry.c:5499
◊28 0x00007ffff4f9b0f3 in <emit signal ??? on instance 0x55555743e2e0 [GtkEntryBuffer]> (instance=<optimised out>, signal_id=<optimised out>, detail=<optimised out>)
at ../../../gobject/gsignal.c:3555
◊25 0x00007ffff4f7b802 in g_closure_invoke (closure=0x55555743ee70, return_value=0x0, n_param_values=3, param_values=0x7fffffffcd30, invocation_hint=0x7fffffffccb0)
at ../../../gobject/gclosure.c:810
--Type <RET> for more, q to quit, c to continue without paging--
◊26 0x00007ffff4f8f814 in signal_emit_unlocked_R
(node=node@entry=0x555557209c00, detail=detail@entry=0, instance=instance@entry=0x55555743e2e0, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffcd30) at ../../../gobject/gsignal.c:3743
◊27 0x00007ffff4f9abbe in g_signal_emit_valist (instance=<optimised out>, signal_id=<optimised out>, detail=<optimised out>, var_args=var_args@entry=0x7fffffffcf10)
at ../../../gobject/gsignal.c:3499
◊29 0x00007ffff3bccb5c in gtk_entry_buffer_normal_delete_text (buffer=0x55555743e2e0 [GtkEntryBuffer], position=0, n_chars=7) at ../../../../gtk/gtkentrybuffer.c:213
◊30 0x00007ffff3bc16e3 in gtk_entry_real_delete_text (editable=0x555557386fb0, start_pos=0, end_pos=<optimised out>) at ../../../../gtk/gtkentry.c:5421
◊34 0x00007ffff4f9bb9c in <emit signal 0x7ffff3df8ca4 "delete-text" on instance 0x555557386fb0 [gtkmm__GtkSpinButton]>
(instance=instance@entry=0x555557386fb0, detailed_signal=detailed_signal@entry=0x7ffff3df8ca4 "delete-text") at ../../../gobject/gsignal.c:3595
◊31 0x00007ffff4f7b802 in g_closure_invoke (closure=0x5555571dcd70, return_value=0x0, n_param_values=3, param_values=0x7fffffffd220, invocation_hint=0x7fffffffd1a0)
at ../../../gobject/gclosure.c:810
◊32 0x00007ffff4f8ef96 in signal_emit_unlocked_R
(node=node@entry=0x5555570f0c50, detail=detail@entry=0, instance=instance@entry=0x555557386fb0, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffd220) at ../../../gobject/gsignal.c:3781
◊33 0x00007ffff4f9abbe in g_signal_emit_valist
(instance=instance@entry=0x555557386fb0, signal_id=signal_id@entry=317, detail=detail@entry=0, var_args=var_args@entry=0x7fffffffd468)
at ../../../gobject/gsignal.c:3499
◊35 0x00007ffff3bbc19e in gtk_entry_delete_text (editable=0x555557386fb0, start_pos=0, end_pos=-1) at ../../../../gtk/gtkentry.c:5186
◊36 0x00007ffff3bc97ed in gtk_entry_set_text (entry=entry@entry=0x555557386fb0 [gtkmm__GtkSpinButton], text=text@entry=0x55555590d2c0 "98.045")
at ../../../../gtk/gtkentry.c:7727
◊37 0x00007ffff3cf137b in gtk_spin_button_default_output (spin_button=spin_button@entry=0x555557386fb0 [gtkmm__GtkSpinButton]) at ../../../../gtk/gtkspinbutton.c:1902
◊38 0x00007ffff3cf1938 in gtk_spin_button_value_changed (adjustment=0x555557401a90 [gtkmm__GtkAdjustment], spin_button=0x555557386fb0 [gtkmm__GtkSpinButton])
at ../../../../gtk/gtkspinbutton.c:1566
◊42 0x00007ffff4f9b0f3 in <emit signal ??? on instance 0x555557401a90 [gtkmm__GtkAdjustment]>
(instance=instance@entry=0x555557401a90, signal_id=<optimised out>, detail=detail@entry=0) at ../../../gobject/gsignal.c:3555
◊39 0x00007ffff4f7b802 in g_closure_invoke (closure=0x55555743ec70, return_value=0x0, n_param_values=1, param_values=0x7fffffffd800, invocation_hint=0x7fffffffd780)
at ../../../gobject/gclosure.c:810
◊40 0x00007ffff4f8f814 in signal_emit_unlocked_R
(node=node@entry=0x555556d2e860, detail=detail@entry=0, instance=instance@entry=0x555557401a90, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffd800) at ../../../gobject/gsignal.c:3743
◊41 0x00007ffff4f9abbe in g_signal_emit_valist (instance=<optimised out>, signal_id=<optimised out>, detail=<optimised out>, var_args=var_args@entry=0x7fffffffd9b0)
at ../../../gobject/gsignal.c:3499
◊43 0x00007ffff3b1c27f in emit_value_changed (adjustment=0x555557401a90 [gtkmm__GtkAdjustment]) at ../../../../gtk/gtkadjustment.c:450
◊44 adjustment_set_value (value=98.045082092285156, adjustment=0x555557401a90 [gtkmm__GtkAdjustment]) at ../../../../gtk/gtkadjustment.c:450
◊45 gtk_adjustment_set_value_internal (adjustment=0x555557401a90 [gtkmm__GtkAdjustment], value=98.045082092285156, animate=<optimised out>)
at ../../../../gtk/gtkadjustment.c:545
◊46 0x00007ffff3b1c5fa in gtk_adjustment_set_value (adjustment=<optimised out>, value=4.6355720635283614e-310) at ../../../../gtk/gtkadjustment.c:567
--Type <RET> for more, q to quit, c to continue without paging--c
◊47 0x00007ffff45de9f5 in Gtk::Adjustment::set_value(double) (this=<optimised out>, value=<optimised out>) at ../gtkmm/adjustment.h:103
◊48 0x00007ffff71418af in Inkscape::UI::Toolbar::SelectToolbar::layout_widget_update(Inkscape::Selection*) (this=0x5555572c4ec0, sel=<optimised out>) at /usr/include/glibmm-2.4/glibmm/refptr.h:259
◊49 0x00007ffff71419da in Inkscape::UI::Toolbar::SelectToolbar::on_inkscape_selection_modified(Inkscape::Selection*, unsigned int) (this=<optimised out>, selection=<optimised out>, flags=<optimised out>) at ../../src/ui/toolbar/select-toolbar.cpp:499
◊50 0x00007ffff714cd24 in sigc::bound_mem_functor2<void, Inkscape::UI::Toolbar::SelectToolbar, Inkscape::Selection*, unsigned int>::operator()(Inkscape::Selection* const&, unsigned int const&) const (_A_a2=<optimised out>, _A_a1=<optimised out>, this=<optimised out>) at /usr/include/sigc++-2.0/sigc++/limit_reference.h:93
◊51 sigc::adaptor_functor<sigc::bound_mem_functor2<void, Inkscape::UI::Toolbar::SelectToolbar, Inkscape::Selection*, unsigned int> >::operator()<Inkscape::Selection* const&, unsigned int const&>(Inkscape::Selection* const&, unsigned int const&) const (_A_arg2=<optimised out>, _A_arg1=<optimised out>, this=<optimised out>) at /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:108
◊52 sigc::internal::slot_call2<sigc::bound_mem_functor2<void, Inkscape::UI::Toolbar::SelectToolbar, Inkscape::Selection*, unsigned int>, void, Inkscape::Selection*, unsigned int>::call_it(sigc::internal::slot_rep*, Inkscape::Selection* const&, unsigned int const&) (rep=<optimised out>, a_1=<optimised out>, a_2=<optimised out>) at /usr/include/sigc++-2.0/sigc++/functors/slot.h:206
◊53 0x00007ffff70f55c9 in sigc::slot2<void, Inkscape::Selection*, unsigned int>::operator()(Inkscape::Selection* const&, unsigned int const&) const (_A_a2=<optimised out>, _A_a1=<optimised out>, this=<optimised out>) at /usr/include/sigc++-2.0/sigc++/functors/slot_base.h:335
◊54 sigc::adaptor_functor<sigc::slot<void, Inkscape::Selection*, unsigned int, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil> >::operator()<Inkscape::Selection* const&, unsigned int const&>(Inkscape::Selection* const&, unsigned int const&) const (_A_arg2=<optimised out>, _A_arg1=<optimised out>, this=<optimised out>) at /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:108
◊55 sigc::internal::slot_call<sigc::slot<void, Inkscape::Selection*, unsigned int, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>, void, Inkscape::Selection*, unsigned int>::call_it(sigc::internal::slot_rep*, Inkscape::Selection* const&, unsigned int const&) (rep=<optimised out>, a_◊0=<optimised out>, a_◊1=<optimised out>) at /usr/include/sigc++-2.0/sigc++/functors/slot.h:451
◊56 0x00007ffff776376b in sigc::internal::signal_emit2<void, Inkscape::Selection*, unsigned int, sigc::nil>::emit(sigc::internal::signal_impl*, Inkscape::Selection* const&, unsigned int const&) (_A_a2=@0x7fffffffdbac: 15, _A_a1=@0x7fffffffdbb8: 0x5555559c56c0, impl=0x5555573e0e80) at /usr/include/sigc++-2.0/sigc++/functors/slot_base.h:335
◊57 sigc::signal2<void, Inkscape::Selection*, unsigned int, sigc::nil>::emit(Inkscape::Selection* const&, unsigned int const&) const (_A_a2=@0x7fffffffdbac: 15, _A_a1=@0x7fffffffdbb8: 0x5555559c56c0, this=0x5555559c58a0) at /usr/include/sigc++-2.0/sigc++/signal.h:3108
◊58 Inkscape::Selection::_emitModified(unsigned int) (this=0x5555559c56c0, flags=<optimised out>) at ../../src/selection.cpp:103
◊59 0x00007ffff776387b in Inkscape::Selection::_emit_modified(Inkscape::Selection*) (selection=<optimised out>) at ../../src/selection.cpp:96
◊60 0x00007ffff607a04e in g_main_dispatch (context=0x555555601350) at ../../../glib/gmain.c:3309
◊61 g_main_context_dispatch (context=context@entry=0x555555601350) at ../../../glib/gmain.c:3974
◊62 0x00007ffff607a400 in g_main_context_iterate (context=context@entry=0x555555601350, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimised out>) at ../../../glib/gmain.c:4047
◊63 0x00007ffff607a4a3 in g_main_context_iteration (context=context@entry=0x555555601350, may_block=may_block@entry=1) at ../../../glib/gmain.c:4108
◊64 0x00007ffff50a9fe5 in g_application_run (application=0x55555565c210 [gtkmm__GtkApplication], argc=<optimised out>, argv=<optimised out>) at ../../../gio/gapplication.c:2559
◊65 0x0000555555557364 in main(int, char**) (argc=<optimised out>, argv=<optimised out>) at /usr/include/glibmm-2.4/glibmm/refptr.h:405
(gdb) Quit
</pre>
</details>
#### What should have happened?
- no crash. I'm not particularly interested in whether the group succeeds (but don't make it random behavior!)
#### Version info
- Inkscape 1.3-dev (b8f17c6145, 2022-05-14) Linux Mint 20
- Inkscape 1.2-rc (991492237d, 2022-05-14), but not 1.1.x
Bisection points to
* ~~inkscape@6e8fec33090def9d700dcea07afcb142d19b0bd8 Improve canvas performance~~
* https://gitlab.com/inkscape/inkscape/-/commit/a5f8da8ba0852ce7cd6e87dd7f8a5bdf3702774a Fix LPE cut/copy/paste LPE
* https://gitlab.com/inkscape/inkscape/-/commit/648fb1aa491611f2f0e6714fcfd82e1c6ff3b939 Menubar Object and Command Palette hint squash commit
depending on the exact sequence of steps performed (see comment https://gitlab.com/inkscape/inkscape/-/issues/3515#note_946977201 for more details)
issue