GNOME issueshttps://gitlab.gnome.org/groups/GNOME/-/issues2024-03-26T15:47:43Zhttps://gitlab.gnome.org/GNOME/glib/-/issues/3303gi_repository_find_by_gtype is nondeterministic2024-03-26T15:47:43ZPhilip Chimentogi_repository_find_by_gtype is nondeterministicThis was never a problem until we had the platform-specific {GLib,Gio}{Unix,Win32} typelibs, but here goes...
`gi_repository_find_by_gtype()` implements its lookup by iterating over a GHashTable. (https://gitlab.gnome.org/GNOME/glib/-/b...This was never a problem until we had the platform-specific {GLib,Gio}{Unix,Win32} typelibs, but here goes...
`gi_repository_find_by_gtype()` implements its lookup by iterating over a GHashTable. (https://gitlab.gnome.org/GNOME/glib/-/blob/0888d8d5f28c051960ac41c39fca78f6fbc9c29f/girepository/girepository.c#L879) The iteration order of GHashTable is not guaranteed to be consistent.
It used to be there was only one typelib that would match a particular GType, but now that we have GTypes duplicated between GLib/Gio and the platform-specific typelibs, this function may return either one of the two, and which one it is depends on which other typelibs have been imported. This leads to bugs like https://gitlab.gnome.org/GNOME/gjs/-/issues/610 (which needs a separate fix regardless, but this emergent behaviour surprised me...)2.80.1https://gitlab.gnome.org/GNOME/gnome-usage/-/issues/122Empty list item in Storage view that causes segfault when clicked on2024-03-22T22:13:36ZknuxifyEmpty list item in Storage view that causes segfault when clicked onIn the Storage view, there's an additional empty item at the bottom of the storage breakdown:
![image](/uploads/1018cb78fb02406a9a3722ad67a5b964/image.png)
Clicking on it causes a segfault in `usage_storage_view_on_row_activated`.
<de...In the Storage view, there's an additional empty item at the bottom of the storage breakdown:
![image](/uploads/1018cb78fb02406a9a3722ad67a5b964/image.png)
Clicking on it causes a segfault in `usage_storage_view_on_row_activated`.
<details><summary>Full backtrace</summary>
```
#0 usage_storage_view_on_row_activated (row=<optimized out>, self=0x7ffff37b6270 [UsageStorageView])
at src/gnome-usage.p/storage/storage-view.c:628
_tmp1_ = <optimized out>
_tmp3_ = <optimized out>
storage_row = 0x0
_tmp0_ = 0x0
_tmp2_ = 0x7fffe364d9d0 [GCancellable]
_tmp4_ = <optimized out>
_inner_error0_ = 0x0
storage_row = <optimized out>
_tmp0_ = <optimized out>
_tmp1_ = <optimized out>
_tmp2_ = <optimized out>
_tmp3_ = <optimized out>
_tmp4_ = <optimized out>
_inner_error0_ = <optimized out>
__func__ = "usage_storage_view_on_row_activated"
__catch0_g_error = <optimized out>
__finally0 = <optimized out>
_g_boolean_var_10 = <optimized out>
_g_boolean_var_11 = <optimized out>
__inst = <optimized out>
__t = <optimized out>
__r = <optimized out>
_tmp5_ = <optimized out>
_tmp6_ = <optimized out>
_tmp7_ = <optimized out>
_tmp8_ = <optimized out>
_tmp9_ = <optimized out>
_tmp10_ = <optimized out>
_tmp11_ = <optimized out>
_tmp12_ = <optimized out>
_tmp13_ = <optimized out>
_tmp14_ = <optimized out>
_tmp15_ = <optimized out>
_tmp16_ = <optimized out>
_tmp17_ = <optimized out>
_tmp18_ = <optimized out>
_tmp19_ = <optimized out>
_tmp20_ = <optimized out>
_tmp21_ = <optimized out>
_tmp22_ = <optimized out>
_g_boolean_var_12 = <optimized out>
_error_ = <optimized out>
_tmp23_ = <optimized out>
_tmp24_ = <optimized out>
_g_boolean_var_13 = <optimized out>
#1 _usage_storage_view_on_row_activated_usage_stack_list_row_activated
(_sender=<optimized out>, row=<optimized out>, self=0x7ffff37b6270) at src/gnome-usage.p/storage/storage-view.c:716
#2 0x00007ffff7e67300 in g_closure_invoke
(closure=0x7ffff3773480, return_value=0x0, n_param_values=2, param_values=0x7fffffffcea0, invocation_hint=0x7fffffffcdf0)
at ../gobject/gclosure.c:832
marshal = 0x7ffff7e6c7d0 <g_cclosure_marshal_VOID__OBJECT>
marshal_data = 0x0
in_marshal = 0
real_closure = 0x7ffff3773460
__func__ = "g_closure_invoke"
#3 0x00007ffff7e949f6 in signal_emit_unlocked_R.isra.0
(node=<optimized out>, detail=<optimized out>, instance=<optimized out>, emission_return=<optimized out>, instance_and_params=<optimized out>) at ../gobject/gsignal.c:3980
tmp = <optimized out>
handler = 0x7ffff37ab2a0
accumulator = <optimized out>
emission = {next = 0x7fffffffd2b0, instance = 0x7ffff378cd60, ihint = {signal_id = 210, detail = 0, run_type = (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACCUMULATOR_FIRST_RUN)}, state = EMISSION_RUN, chain_type = 0x4}
class_closure = <optimized out>
hlist = <optimized out>
handler_list = 0x7ffff37ab2a0
return_accu = <optimized out>
accu = {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
signal_id = <optimized out>
max_sequential_handler_number = <optimized out>
return_value_altered = <optimized out>
n_params = <optimized out>
EMIT_RESTART = <optimized out>
__func__ = {<optimized out> <repeats 23 times>}
#4 0x00007ffff7e85bb2 in signal_emit_valist_unlocked
(instance=instance@entry=0x7ffff378cd60, signal_id=signal_id@entry=210, detail=detail@entry=0, var_args=var_args@entry=0x7fffffffd0f0) at ../gobject/gsignal.c:3612
instance_and_params = 0x7fffffffcea0
param_values = 0x7fffffffceb8
node = <optimized out>
i = <optimized out>
node_copy = {signal_id = 210, itype = 0x7ffff37b8890 [UsageStackList/GtkBox/GtkWidget/GInitiallyUnowned], name = 0x7ffff73364c7 "row-activated", destroyed = 0, flags = 2, n_params = 1, single_va_closure_is_valid = 1, single_va_closure_is_after = 0, param_types = 0x7ffff37be7f0, return_type = 0x4, class_closure_bsa = 0x0, accumulator = 0x0, c_marshaller = 0x7ffff7e6c7d0 <g_cclosure_marshal_VOID__OBJECT>, va_marshaller = 0x0, emission_hooks = 0x0, single_va_closure = 0x1}
__func__ = "signal_emit_valist_unlocked"
#5 0x00007ffff7e85dd3 in g_signal_emit_valist
(instance=0x7ffff378cd60, signal_id=210, detail=0, var_args=var_args@entry=0x7fffffffd0f0) at ../gobject/gsignal.c:3355
#6 0x00007ffff7e85e90 in g_signal_emit (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>)
at ../gobject/gsignal.c:3675
var_args = {{gp_offset = 32, fp_offset = 48, overflow_arg_area = 0x7fffffffd1d0, reg_save_area = 0x7fffffffd110}}
#11 0x00007ffff7e85e90 in <emit signal '???' on instance 0x7ffff37a5dd0 [GtkListBox]>
(instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../gobject/gsignal.c:3675
var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffffd520, reg_save_area = 0x7fffffffd460}}
#7 0x00007ffff7e65da2 in g_cclosure_marshal_VOID__OBJECTv
(closure=0x7ffff3776ff0, return_value=<optimized out>, instance=0x7ffff37a5dd0, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0x7ffff37bc690) at ../gobject/gmarshal.c:1910
cc = <optimized out>
data1 = <optimized out>
data2 = <optimized out>
callback = 0x55555556e484 <___lambda33__gtk_list_box_row_activated>
arg0 = 0x7ffff37553a0
args_copy = {{gp_offset = 32, fp_offset = 48, overflow_arg_area = 0x7fffffffd520, reg_save_area = 0x7fffffffd460}}
#8 0x00007ffff7e85ce3 in _g_closure_invoke_va
(param_types=0x7ffff37bc690, n_params=<optimized out>, args=0x7fffffffd440, instance=0x7ffff37a5dd0, return_value=0x0, closure=0x7ffff3776ff0) at ../gobject/gclosure.c:895
marshal = <optimized out>
marshal_data = <optimized out>
in_marshal = 0
real_closure = 0x7ffff3776fd0
real_closure = <optimized out>
__func__ = {<optimized out> <repeats 21 times>}
_g_boolean_var_67 = <optimized out>
marshal = <optimized out>
marshal_data = <optimized out>
in_marshal = <optimized out>
_g_boolean_var_68 = <optimized out>
cunion = <optimized out>
new_int = <optimized out>
old_int = <optimized out>
success = <optimized out>
tmp = {closure = {ref_count = <optimized out>, meta_marshal_nouse = <optimized out>, n_guards = <optimized out>, n_fnotifiers = <optimized out>, n_inotifiers = <optimized out>, in_inotify = <optimized out>, floating = <optimized out>, derivative_flag = <optimized out>, in_marshal = <optimized out>, is_invalid = <optimized out>, marshal = <optimized out>, data = <optimized out>, notifiers = <optimized out>}, vint = <optimized out>}
gaicae_oldval = <optimized out>
cunion = <optimized out>
new_int = <optimized out>
old_int = <optimized out>
success = <optimized out>
tmp = {closure = {ref_count = <optimized out>, meta_marshal_nouse = <optimized out>, n_guards = <optimized out>, n_fnotifiers = <optimized out>, n_inotifiers = <optimized out>, in_inotify = <optimized out>, floating = <optimized out>, derivative_flag = <optimized out>, in_marshal = <optimized out>, is_invalid = <optimized out>, marshal = <optimized out>, data = <optimized out>, notifiers = <optimized out>}, vint = <optimized out>}
gaicae_oldval = <optimized out>
#9 signal_emit_valist_unlocked
(instance=instance@entry=0x7ffff37a5dd0, signal_id=signal_id@entry=201, detail=detail@entry=0, var_args=var_args@entry=0x7fffffffd440) at ../gobject/gsignal.c:3516
return_accu = 0x0
accu = {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
emission = {next = 0x7fffffffd610, instance = 0x7ffff37a5dd0, ihint = {signal_id = 201, detail = 0, run_type = (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACCUMULATOR_FIRST_RUN)}, state = EMISSION_RUN, chain_type = 0x7ffff3807f10 [GtkListBox/GtkWidget/GInitiallyUnowned]}
instance_type = <optimized out>
emission_return = {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
rtype = 0x4
static_scope = 0
fastpath_handler = <optimized out>
closure = <optimized out>
run_type = <optimized out>
hlist = <optimized out>
l = <optimized out>
fastpath = <optimized out>
instance_and_params = <optimized out>
param_values = <optimized out>
node = <optimized out>
i = <optimized out>
node_copy = {signal_id = 201, itype = 0x7ffff3807f10 [GtkListBox/GtkWidget/GInitiallyUnowned], name = 0x7ffff73364c7 "row-activated", destroyed = 0, flags = 2, n_params = 1, single_va_closure_is_valid = 1, single_va_closure_is_after = 1, param_types = 0x7ffff37bc690, return_type = 0x4, class_closure_bsa = 0x7ffff37b0390, accumulator = 0x0, c_marshaller = 0x7ffff7e6c7d0 <g_cclosure_marshal_VOID__OBJECT>, va_marshaller = 0x7ffff7e65d30 <g_cclosure_marshal_VOID__OBJECTv>, emission_hooks = 0x0, single_va_closure = 0x7ffff379dec0}
__func__ = "signal_emit_valist_unlocked"
#10 0x00007ffff7e85dd3 in g_signal_emit_valist
(instance=0x7ffff37a5dd0, signal_id=201, detail=0, var_args=var_args@entry=0x7fffffffd440) at ../gobject/gsignal.c:3355
#12 0x00007ffff6f73580 in gtk_list_box_select_and_activate_full
(grab_focus=1, row=0x7ffff37553a0 [GtkListBoxRow], box=0x7ffff37a5dd0 [GtkListBox]) at ../gtk/gtklistbox.c:1827
#13 gtk_list_box_select_and_activate_full (grab_focus=1, row=0x7ffff37553a0 [GtkListBoxRow], box=0x7ffff37a5dd0 [GtkListBox])
at ../gtk/gtklistbox.c:1819
#14 gtk_list_box_click_gesture_released
(gesture=<optimized out>, n_press=1, x=<optimized out>, y=277.76953125, box=0x7ffff37a5dd0 [GtkListBox])
at ../gtk/gtklistbox.c:1889
focus_on_click = 1
#19 0x00007ffff7e85e90 in <emit signal '???' on instance 0x7ffff378aed0 [GtkGestureClick]>
(instance=instance@entry=0x7ffff378aed0, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3675
var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffffd880, reg_save_area = 0x7fffffffd7c0}}
#15 0x00007ffff6e88659 in _gtk_marshal_VOID__INT_DOUBLE_DOUBLEv
(closure=<optimized out>, return_value=<optimized out>, instance=<optimized out>, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0x7ffff3d84780) at gtk/gtkmarshalers.c:3688
cc = <optimized out>
data1 = <optimized out>
data2 = <optimized out>
callback = <optimized out>
arg0 = 8
arg1 = 4.6355705597490555e-310
arg2 = 1.1363509854348671e-322
args_copy = {{gp_offset = 32, fp_offset = 80, overflow_arg_area = 0x7fffffffd880, reg_save_area = 0x7fffffffd7c0}}
#16 0x00007ffff7e85ce3 in _g_closure_invoke_va
(param_types=0x7ffff3d84780, n_params=<optimized out>, args=0x7fffffffd7a0, instance=0x7ffff378aed0, return_value=0x0, closure=0x7ffff37a9d40) at ../gobject/gclosure.c:895
marshal = <optimized out>
marshal_data = <optimized out>
in_marshal = 0
real_closure = 0x7ffff37a9d20
real_closure = <optimized out>
__func__ = {<optimized out> <repeats 21 times>}
_g_boolean_var_67 = <optimized out>
marshal = <optimized out>
marshal_data = <optimized out>
in_marshal = <optimized out>
_g_boolean_var_68 = <optimized out>
cunion = <optimized out>
new_int = <optimized out>
old_int = <optimized out>
success = <optimized out>
tmp = {closure = {ref_count = <optimized out>, meta_marshal_nouse = <optimized out>, n_guards = <optimized out>, n_fnotifiers = <optimized out>, n_inotifiers = <optimized out>, in_inotify = <optimized out>, floating = <optimized out>, derivative_flag = <optimized out>, in_marshal = <optimized out>, is_invalid = <optimized out>, marshal = <optimized out>, data = <optimized out>, notifiers = <optimized out>}, vint = <optimized out>}
gaicae_oldval = <optimized out>
cunion = <optimized out>
new_int = <optimized out>
old_int = <optimized out>
success = <optimized out>
tmp = {closure = {ref_count = <optimized out>, meta_marshal_nouse = <optimized out>, n_guards = <optimized out>, n_fnotifiers = <optimized out>, n_inotifiers = <optimized out>, in_inotify = <optimized out>, floating = <optimized out>, derivative_flag = <optimized out>, in_marshal = <optimized out>, is_invalid = <optimized out>, marshal = <optimized out>, data = <optimized out>, notifiers = <optimized out>}, vint = <optimized out>}
gaicae_oldval = <optimized out>
#17 signal_emit_valist_unlocked
(instance=instance@entry=0x7ffff378aed0, signal_id=signal_id@entry=107, detail=detail@entry=0, var_args=var_args@entry=0x7fffffffd7a0) at ../gobject/gsignal.c:3516
return_accu = 0x0
accu = {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
emission = {next = 0x7fffffffd9c0, instance = 0x7ffff378aed0, ihint = {signal_id = 107, detail = 0, run_type = (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACCUMULATOR_FIRST_RUN)}, state = EMISSION_RUN, chain_type = 0x7ffff3d40510 [GtkGestureClick/GtkGestureSingle/GtkGesture/GtkEventController]}
instance_type = <optimized out>
emission_return = {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
rtype = 0x4
static_scope = 0
fastpath_handler = <optimized out>
closure = <optimized out>
run_type = <optimized out>
hlist = <optimized out>
l = <optimized out>
fastpath = <optimized out>
instance_and_params = <optimized out>
param_values = <optimized out>
node = <optimized out>
i = <optimized out>
node_copy = {signal_id = 107, itype = 0x7ffff3d40510 [GtkGestureClick/GtkGestureSingle/GtkGesture/GtkEventController], name = 0x7ffff73309cf "released", destroyed = 0, flags = 2, n_params = 3, single_va_closure_is_valid = 1, single_va_closure_is_after = 1, param_types = 0x7ffff3d84780, return_type = 0x4, class_closure_bsa = 0x7ffff3d847c0, accumulator = 0x0, c_marshaller = 0x7ffff6e88520 <_gtk_marshal_VOID__INT_DOUBLE_DOUBLE>, va_marshaller = 0x7ffff6e885c0 <_gtk_marshal_VOID__INT_DOUBLE_DOUBLEv>, emission_hooks = 0x0, single_va_closure = 0x7ffff3cfc690}
__func__ = "signal_emit_valist_unlocked"
#18 0x00007ffff7e85dd3 in g_signal_emit_valist
(instance=0x7ffff378aed0, signal_id=107, detail=0, var_args=var_args@entry=0x7fffffffd7a0) at ../gobject/gsignal.c:3355
#20 0x00007ffff6f3df4f in gtk_gesture_click_end (gesture=0x7ffff378aed0 [GtkGestureClick], sequence=sequence@entry=0x0)
at ../gtk/gtkgestureclick.c:275
click = 0x7ffff378aed0 [GtkGestureClick]
priv = 0x7ffff378ae20
current = 0x0
x = 112.71875
y = 277.76953125
interpreted = 1
state = <optimized out>
#25 0x00007ffff7e85e90 in <emit signal '???' on instance 0x7ffff378aed0 [GtkGestureClick]>
(instance=instance@entry=0x7ffff378aed0, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3675
var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffffdc30, reg_save_area = 0x7fffffffdb70}}
#21 0x00007ffff7e6b073 in g_cclosure_marshal_VOID__BOXEDv
(closure=0x7ffff3cfc320, return_value=<optimized out>, instance=0x7ffff378aed0, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0x7ffff3e495e0) at ../gobject/gmarshal.c:1686
cc = <optimized out>
data1 = <optimized out>
data2 = <optimized out>
callback = 0x7ffff6f3de90 <gtk_gesture_click_end>
arg0 = 0x0
args_copy = {{gp_offset = 32, fp_offset = 48, overflow_arg_area = 0x7fffffffdc30, reg_save_area = 0x7fffffffdb70}}
#22 0x00007ffff7e85ce3 in _g_closure_invoke_va
(param_types=0x7ffff3e495e0, n_params=<optimized out>, args=0x7fffffffdb50, instance=0x7ffff378aed0, return_value=0x0, closure=0x7ffff3cfc320) at ../gobject/gclosure.c:895
marshal = <optimized out>
marshal_data = <optimized out>
in_marshal = 0
real_closure = 0x7ffff3cfc300
real_closure = <optimized out>
__func__ = {<optimized out> <repeats 21 times>}
_g_boolean_var_67 = <optimized out>
marshal = <optimized out>
marshal_data = <optimized out>
in_marshal = <optimized out>
_g_boolean_var_68 = <optimized out>
cunion = <optimized out>
new_int = <optimized out>
old_int = <optimized out>
success = <optimized out>
tmp = {closure = {ref_count = <optimized out>, meta_marshal_nouse = <optimized out>, n_guards = <optimized out>, n_fnotifiers = <optimized out>, n_inotifiers = <optimized out>, in_inotify = <optimized out>, floating = <optimized out>, derivative_flag = <optimized out>, in_marshal = <optimized out>, is_invalid = <optimized out>, marshal = <optimized out>, data = <optimized out>, notifiers = <optimized out>}, vint = <optimized out>}
gaicae_oldval = <optimized out>
cunion = <optimized out>
new_int = <optimized out>
old_int = <optimized out>
success = <optimized out>
tmp = {closure = {ref_count = <optimized out>, meta_marshal_nouse = <optimized out>, n_guards = <optimized out>, n_fnotifiers = <optimized out>, n_inotifiers = <optimized out>, in_inotify = <optimized out>, floating = <optimized out>, derivative_flag = <optimized out>, in_marshal = <optimized out>, is_invalid = <optimized out>, marshal = <optimized out>, data = <optimized out>, notifiers = <optimized out>}, vint = <optimized out>}
gaicae_oldval = <optimized out>
#23 signal_emit_valist_unlocked
(instance=instance@entry=0x7ffff378aed0, signal_id=signal_id@entry=102, detail=detail@entry=0, var_args=var_args@entry=0x7fffffffdb50) at ../gobject/gsignal.c:3516
return_accu = 0x0
accu = {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
emission = {next = 0x7fffffffe0c0, instance = 0x7ffff378aed0, ihint = {signal_id = 102, detail = 0, run_type = (G_SIGNAL_RUN_LAST | G_SIGNAL_ACCUMULATOR_FIRST_RUN)}, state = EMISSION_RUN, chain_type = 0x7ffff3d40510 [GtkGestureClick/GtkGestureSingle/GtkGesture/GtkEventController]}
instance_type = <optimized out>
emission_return = {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
rtype = 0x4
static_scope = 0
fastpath_handler = <optimized out>
closure = <optimized out>
run_type = <optimized out>
hlist = <optimized out>
l = <optimized out>
fastpath = <optimized out>
instance_and_params = <optimized out>
param_values = <optimized out>
node = <optimized out>
i = <optimized out>
node_copy = {signal_id = 102, itype = 0x7ffff3c4a7e0 [GtkGesture/GtkEventController], name = 0x7ffff5b7f02e "end", destroyed = 0, flags = 2, n_params = 1, single_va_closure_is_valid = 1, single_va_closure_is_after = 1, param_types = 0x7ffff3e495e0, return_type = 0x4, class_closure_bsa = 0x7ffff3d84960, accumulator = 0x0, c_marshaller = 0x7ffff7e6c850 <g_cclosure_marshal_VOID__BOXED>, va_marshaller = 0x7ffff7e6afe0 <g_cclosure_marshal_VOID__BOXEDv>, emission_hooks = 0x0, single_va_closure = 0x7ffff3cfc320}
__func__ = "signal_emit_valist_unlocked"
#24 0x00007ffff7e85dd3 in g_signal_emit_valist
(instance=0x7ffff378aed0, signal_id=102, detail=0, var_args=var_args@entry=0x7fffffffdb50) at ../gobject/gsignal.c:3355
#26 0x00007ffff6f3ae14 in _gtk_gesture_set_recognized (sequence=0x0, recognized=0, gesture=0x7ffff378aed0 [GtkGestureClick])
at ../gtk/gtkgesture.c:340
priv = <optimized out>
#27 _gtk_gesture_check_recognized (gesture=gesture@entry=0x7ffff378aed0 [GtkGestureClick], sequence=sequence@entry=0x0)
at ../gtk/gtkgesture.c:381
priv = 0x7ffff378ae70
has_matching_touchpoints = 0
#28 0x00007ffff6f3c60b in gtk_gesture_handle_event
(controller=0x7ffff378aed0 [GtkGestureClick], event=0x7fffe48e47a0 [GdkButtonEvent], x=112.71875, y=277.76953125)
at ../gtk/gtkgesture.c:686
was_claimed = 0
gesture = 0x7ffff378aed0 [GtkGestureClick]
sequence = 0x0
priv = 0x7ffff378ae70
source_device = <optimized out>
was_recognized = 1
event_type = GDK_BUTTON_RELEASE
phase = GDK_TOUCHPAD_GESTURE_PHASE_BEGIN
state = GDK_BUTTON1_MASK
target = 0x7ffff37553a0 [GtkListBoxRow]
#29 0x00007ffff6f3f610 in gtk_gesture_single_handle_event
(controller=0x7ffff378aed0 [GtkGestureClick], event=0x7fffe48e47a0 [GdkButtonEvent], x=112.71875, y=277.76953125)
at ../gtk/gtkgesturesingle.c:227
sequence = <optimized out>
priv = 0x7ffff378ae50
source_device = <optimized out>
source = <optimized out>
button = <optimized out>
state = <optimized out>
i = <optimized out>
retval = <optimized out>
event_type = GDK_BUTTON_RELEASE
#30 0x00007ffff6f09f3c in gtk_event_controller_handle_event
(controller=controller@entry=0x7ffff378aed0 [GtkGestureClick], event=event@entry=0x7fffe48e47a0 [GdkButtonEvent], target=target@entry=0x7ffff37553a0 [GtkListBoxRow], x=x@entry=112.71875, y=y@entry=277.76953125) at ../gtk/gtkeventcontroller.c:362
controller_class = 0x7ffff3c17cc0
priv = <optimized out>
retval = 0
__func__ = "gtk_event_controller_handle_event"
#31 0x00007ffff705dc3d in gtk_widget_run_controllers
(widget=widget@entry=0x7ffff37a5dd0 [GtkListBox], event=event@entry=0x7fffe48e47a0 [GdkButtonEvent], target=target@entry=0x7ffff37553a0 [GtkListBoxRow], x=112.71875, y=277.76953125, phase=phase@entry=GTK_PHASE_BUBBLE) at ../gtk/gtkwidget.c:4585
this_handled = <optimized out>
is_gesture = 1
controller_phase = <optimized out>
next = 0x7ffff3791d50 = {0x7ffff37aa000}
priv = 0x7ffff37a5c80
controller = 0x7ffff378aed0 [GtkGestureClick]
handled = 0
l = 0x7ffff37b0c10 = {0x7ffff378aed0, 0x7ffff37aa000}
__func__ = "gtk_widget_run_controllers"
#32 0x00007ffff70655f1 in gtk_widget_event
(widget=widget@entry=0x7ffff37a5dd0 [GtkListBox], event=event@entry=0x7fffe48e47a0 [GdkButtonEvent], target=target@entry=0x7ffff37553a0 [GtkListBoxRow]) at ../gtk/gtkwidget.c:4777
return_val = <optimized out>
x = 6.953333059194983e-310
y = 6.9533454119681322e-310
#33 0x00007ffff6f7f28f in gtk_propagate_event_internal (widget=0x7ffff37a5dd0 [GtkListBox],
widget@entry=0x7ffff37553a0 [GtkListBoxRow], event=event@entry=0x7fffe48e47a0 [GdkButtonEvent], topmost=<optimized out>)
at ../gtk/gtkmain.c:1947
handled_event = 0
target = 0x7ffff37553a0 [GtkListBoxRow]
widget_array = {start = 0x7ffff382ce70, end = 0x7ffff382cf08, end_allocation = 0x7ffff382cf70, preallocated = {0x7ffff37553a0 [GtkListBoxRow], 0x7ffff37a5dd0 [GtkListBox], 0x7ffff378ec20 [GtkViewport], 0x7ffff3796590 [GtkScrolledWindow], 0x7ffff378cd60 [UsageStackList], 0x7ffff379a300 [GtkBox], 0x7ffff379b290 [AdwClamp], 0x7ffff379a170 [GtkBox], 0x7ffff37c5f20 [GtkBox], 0x7ffff37c5c00 [GtkOverlay], 0x7ffff37b6270 [UsageStorageView], 0x7ffff3cf02f0 [AdwViewStack], 0x7ffff3d1bf00 [AdwToolbarView], 0x7ffff3d9f2a0 [AdwBin], 0x7ffff3da3f00 [AdwOverlaySplitView], 0x7ffff3c5ed60 [AdwBreakpointBin]}}
i = 1
#34 0x00007ffff6f7f32b in gtk_propagate_event
(widget=widget@entry=0x7ffff37553a0 [GtkListBoxRow], event=event@entry=0x7fffe48e47a0 [GdkButtonEvent])
at ../gtk/gtkmain.c:1997
window_group = <optimized out>
event_widget = <optimized out>
topmost = <optimized out>
__func__ = "gtk_propagate_event"
#35 0x00007ffff6f7fa55 in gtk_main_do_event (event=0x7fffe48e47a0 [GdkButtonEvent]) at ../gtk/gtkmain.c:1687
event_widget = <optimized out>
target_widget = <optimized out>
grab_widget = 0x7ffff37553a0 [GtkListBoxRow]
window_group = 0x7ffff3be63f0 [GtkWindowGroup]
rewritten_event = <optimized out>
tmp_list = <optimized out>
handled_event = 0
__func__ = "gtk_main_do_event"
#41 0x00007ffff7e85e90 in <emit signal '???' on instance 0x7ffff369e9a0 [GdkWaylandToplevel]>
(instance=instance@entry=0x7ffff369e9a0, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3675
var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffffe330, reg_save_area = 0x7fffffffe270}}
#36 0x00007ffff72023cc in _gdk_marshal_BOOLEAN__POINTERv
(closure=closure@entry=0x7fffe6b26520, return_value=return_value@entry=0x7fffffffe170, instance=instance@entry=0x7ffff369e9a0, args=args@entry=0x7fffffffe250, marshal_data=marshal_data@entry=0x0, n_params=n_params@entry=1, param_types=0x7ffff3726fe0) at gdk/gdkmarshalers.c:302
cc = <optimized out>
data1 = <optimized out>
data2 = <optimized out>
callback = <optimized out>
v_return = <optimized out>
arg0 = 0x8
args_copy = {{gp_offset = 32, fp_offset = 48, overflow_arg_area = 0x7fffffffe330, reg_save_area = 0x7fffffffe270}}
__func__ = "_gdk_marshal_BOOLEAN__POINTERv"
#37 0x00007ffff728f5d9 in gdk_surface_event_marshallerv
(closure=0x7fffe6b26520, return_value=0x7fffffffe170, instance=0x7ffff369e9a0, args=0x7fffffffe250, marshal_data=0x0, n_params=1, param_types=0x7ffff3726fe0) at ../gdk/gdksurface.c:462
args_copy = {{gp_offset = 32, fp_offset = 48, overflow_arg_area = 0x7fffffffe330, reg_save_area = 0x7fffffffe270}}
event = 0x7fffe48e47a0 [GdkButtonEvent]
#38 0x00007ffff7e85ce3 in _g_closure_invoke_va
(param_types=0x7ffff3726fe0, n_params=<optimized out>, args=0x7fffffffe250, instance=0x7ffff369e9a0, return_value=0x7fffffffe170, closure=0x7fffe6b26520) at ../gobject/gclosure.c:895
marshal = <optimized out>
marshal_data = <optimized out>
in_marshal = 0
real_closure = 0x7fffe6b26500
real_closure = <optimized out>
__func__ = {<optimized out> <repeats 21 times>}
_g_boolean_var_67 = <optimized out>
marshal = <optimized out>
marshal_data = <optimized out>
in_marshal = <optimized out>
_g_boolean_var_68 = <optimized out>
cunion = <optimized out>
new_int = <optimized out>
old_int = <optimized out>
success = <optimized out>
tmp = {closure = {ref_count = <optimized out>, meta_marshal_nouse = <optimized out>, n_guards = <optimized out>, n_fnotifiers = <optimized out>, n_inotifiers = <optimized out>, in_inotify = <optimized out>, floating = <optimized out>, derivative_flag = <optimized out>, in_marshal = <optimized out>, is_invalid = <optimized out>, marshal = <optimized out>, data = <optimized out>, notifiers = <optimized out>}, vint = <optimized out>}
gaicae_oldval = <optimized out>
cunion = <optimized out>
new_int = <optimized out>
old_int = <optimized out>
success = <optimized out>
tmp = {closure = {ref_count = <optimized out>, meta_marshal_nouse = <optimized out>, n_guards = <optimized out>, n_fnotifiers = <optimized out>, n_inotifiers = <optimized out>, in_inotify = <optimized out>, floating = <optimized out>, derivative_flag = <optimized out>, in_marshal = <optimized out>, is_invalid = <optimized out>, marshal = <optimized out>, data = <optimized out>, notifiers = <optimized out>}, vint = <optimized out>}
gaicae_oldval = <optimized out>
#39 signal_emit_valist_unlocked
(instance=instance@entry=0x7ffff369e9a0, signal_id=signal_id@entry=220, detail=detail@entry=0, var_args=var_args@entry=0x7fffffffe250) at ../gobject/gsignal.c:3516
return_accu = 0x7fffffffe170
accu = {g_type = 0x14, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
emission = {next = 0x0, instance = 0x7ffff369e9a0, ihint = {signal_id = 220, detail = 0, run_type = (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACCUMULATOR_FIRST_RUN)}, state = EMISSION_RUN, chain_type = 0x7ffff4e42af0 [GdkWaylandToplevel/GdkWaylandSurface/GdkSurface]}
instance_type = <optimized out>
emission_return = {g_type = 0x14, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
rtype = 0x14
static_scope = 0
fastpath_handler = <optimized out>
closure = <optimized out>
run_type = <optimized out>
hlist = <optimized out>
l = <optimized out>
fastpath = <optimized out>
instance_and_params = <optimized out>
param_values = <optimized out>
node = <optimized out>
i = <optimized out>
node_copy = {signal_id = 220, itype = 0x7ffff64855a0 [GdkSurface], name = 0x7ffff7c72dc6 "event", destroyed = 0, flags = 2, n_params = 1, single_va_closure_is_valid = 1, single_va_closure_is_after = 0, param_types = 0x7ffff3726fe0, return_type = 0x14, class_closure_bsa = 0x0, accumulator = 0x7ffff36fe0a0, c_marshaller = 0x7ffff728f620 <gdk_surface_event_marshaller>, va_marshaller = 0x7ffff728f550 <gdk_surface_event_marshallerv>, emission_hooks = 0x0, single_va_closure = 0x1}
__func__ = "signal_emit_valist_unlocked"
#40 0x00007ffff7e85dd3 in g_signal_emit_valist
(instance=0x7ffff369e9a0, signal_id=220, detail=0, var_args=var_args@entry=0x7fffffffe250) at ../gobject/gsignal.c:3355
#42 0x00007ffff7292f3c in gdk_surface_handle_event (event=event@entry=0x7fffe48e47a0 [GdkButtonEvent])
at ../gdk/gdksurface.c:2932
surface = 0x7ffff369e9a0 [GdkWaylandToplevel]
handled = 0
#43 0x00007ffff72704b2 in _gdk_event_emit (event=event@entry=0x7fffe48e47a0 [GdkButtonEvent]) at ../gdk/gdkevents.c:491
#44 0x00007ffff721877c in gdk_event_source_dispatch (base=<optimized out>, callback=<optimized out>, data=<optimized out>)
at ../gdk/wayland/gdkeventsource.c:142
source = <optimized out>
display = <optimized out>
event = 0x7fffe48e47a0 [GdkButtonEvent]
#45 0x00007ffff7d64295 in g_main_dispatch (context=0x7ffff6dffeb0) at ../glib/gmain.c:3476
dispatch = 0x7ffff7218760 <gdk_event_source_dispatch>
prev_source = 0x0
begin_time_nsec = 0
was_in_call = 0
user_data = 0x0
callback = 0x0
cb_funcs = <optimized out>
cb_data = <optimized out>
need_destroy = <optimized out>
source = 0x7ffff4e43510
current = 0x7ffff6988a30
i = 0
__func__ = "g_main_dispatch"
#46 0x00007ffff7dc5547 in g_main_context_dispatch_unlocked (context=0x7ffff6dffeb0) at ../glib/gmain.c:4284
#47 g_main_context_iterate_unlocked.isra.0
(context=context@entry=0x7ffff6dffeb0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>)
at ../glib/gmain.c:4349
max_priority = 2147483647
timeout = 294
some_ready = 1
nfds = <optimized out>
allocated_nfds = 2
fds = 0x7ffff3732240
#48 0x00007ffff7d6247e in g_main_context_iteration (context=context@entry=0x7ffff6dffeb0, may_block=may_block@entry=1)
at ../glib/gmain.c:4414
retval = <optimized out>
#49 0x00007ffff7c00b26 in g_application_run
(application=application@entry=0x7ffff6810b80 [UsageApplication], argc=argc@entry=1, argv=argv@entry=0x7fffffffe548)
at ../gio/gapplication.c:2577
arguments = 0x7ffff64dea70
status = 0
context = 0x7ffff6dffeb0
acquired_context = <optimized out>
__func__ = "g_application_run"
#50 0x000055555555d0b0 in _vala_main (args_length1=1, args=0x7fffffffe548) at src/gnome-usage.p/gnome-usage.c:84
application = 0x7ffff6810b80 [UsageApplication]
_tmp0_ = 0x7ffff6810b80 [UsageApplication]
result = <optimized out>
application = <optimized out>
_tmp0_ = <optimized out>
result = <optimized out>
#51 main (argc=1, argv=0x7fffffffe548) at src/gnome-usage.p/gnome-usage.c:93
```
</details>https://gitlab.gnome.org/GNOME/Incubator/papers/-/issues/108Instant crash when clicking the Print button from the printing dialog2024-03-19T14:12:10ZJeff FortinInstant crash when clicking the Print button from the printing dialogIt does not matter what you are printing, it can even be a blank PDF. Clicking the blue "Print" button from the GTK printing dialog called by Papers nightly will instantly crash like this:
```gdb
(papers:13): Gtk-WARNING **: 10:08:13.98...It does not matter what you are printing, it can even be a blank PDF. Clicking the blue "Print" button from the GTK printing dialog called by Papers nightly will instantly crash like this:
```gdb
(papers:13): Gtk-WARNING **: 10:08:13.989: GtkPrintOperation::create-custom-widget not supported with portal
[New Thread 0x7fffafe006c0 (LWP 63)]
[New Thread 0x7fffaf4006c0 (LWP 64)]
[New Thread 0x7fffbaa006c0 (LWP 65)]
free(): invalid pointer
Thread 1 "papers" received signal SIGABRT, Aborted.
__pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
44 return INTERNAL_SYSCALL_ERROR_P (ret) ? INTERNAL_SYSCALL_ERRNO (ret) : 0;
(gdb) bt full
#0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
tid = <optimized out>
ret = 0
pd = <optimized out>
old_mask = {__val = {1}}
ret = <optimized out>
#1 0x00007ffff68dae83 in __pthread_kill_internal (signo=6, threadid=<optimized out>) at pthread_kill.c:78
#2 0x00007ffff6888dce in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
ret = <optimized out>
#3 0x00007ffff687083f in __GI_abort () at abort.c:79
save_stage = 1
act = {__sigaction_handler = {sa_handler = 0x20, sa_sigaction = 0x20}, sa_mask = {__val = {11501601614302065724, 144, 112, 140737488341840, 140737329918730, 2, 140737331235520, 288, 93825012180464, 140737488341856, 18446744073709551280, 0, 93825010232288, 144, 112, 140737488341904}}, sa_flags = -158426162, sa_restorer = 0x555556683cf8}
#4 0x00007ffff6871710 in __libc_message (fmt=fmt@entry=0x7ffff69f455b "%s\n") at ../sysdeps/posix/libc_fatal.c:150
ap = {{gp_offset = 16, fp_offset = 21845, overflow_arg_area = 0x7fffffffcc90, reg_save_area = 0x7fffffffcc20}}
fd = 2
list = <optimized out>
nlist = <optimized out>
cp = <optimized out>
#5 0x00007ffff68e4fe5 in malloc_printerr (str=str@entry=0x7ffff69f2024 "free(): invalid pointer") at malloc.c:5765
#6 0x00007ffff68e725c in _int_free (av=<optimized out>, p=p@entry=0x555555b98518, have_lock=have_lock@entry=0) at malloc.c:4500
size = <optimized out>
fb = <optimized out>
#7 0x00007ffff68e9bce in __GI___libc_free (mem=0x555555b98528) at malloc.c:3391
ar_ptr = <optimized out>
p = 0x555555b98518
err = 0
#8 0x00007ffff6ddeab9 in g_free (mem=<optimized out>) at ../glib/gmem.c:208
#9 0x00007ffff7580981 in prepare_print_response
(connection=<optimized out>, sender_name=<optimized out>, object_path=<optimized out>, interface_name=<optimized out>, signal_name=<optimized out>, parameters=<optimized out>, data=0x55555795c4c0)
at ../gtk/print/gtkprintoperation-portal.c:457
filename = 0x555555b98528 ""
fd = <optimized out>
uri = 0x0
v = <optimized out>
settings = <optimized out>
page_setup = <optimized out>
printer = <optimized out>
portal = 0x55555795c4c0
response = 0
options = 0x7fffd80152e0
#10 0x00007ffff6fe5770 in emit_signal_instance_in_idle_cb (data=0x7fffd8014fe0) at ../gio/gdbusconnection.c:3798
signal_instance = 0x7fffd8014fe0
parameters = 0x7fffd8015330
has_subscription = 1
#11 0x00007ffff6dd5647 in g_main_dispatch (context=context@entry=0x555555ba71e0) at ../glib/gmain.c:3344
dispatch = 0x7ffff6dd3430 <g_idle_dispatch>
prev_source = 0x0
begin_time_nsec = 1513140684896484
was_in_call = 0
user_data = 0x7fffd8014fe0
callback = 0x7ffff6fe56f0 <emit_signal_instance_in_idle_cb>
cb_funcs = 0x7ffff6ec3260 <g_source_callback_funcs>
cb_data = 0x7fffd80222c0
need_destroy = <optimized out>
source = 0x7fffd8003320
current = 0x555555bb8510
i = 0
__func__ = "g_main_dispatch"
#12 0x00007ffff6dd7767 in g_main_context_dispatch_unlocked (context=0x555555ba71e0) at ../glib/gmain.c:4152
#13 g_main_context_iterate_unlocked (context=context@entry=0x555555ba71e0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4217
max_priority = 2147483647
timeout = 2210
some_ready = 1
nfds = 2
allocated_nfds = <optimized out>
fds = 0x5555566d5a30
begin_time_nsec = 1513139410697905
#14 0x00007ffff6dd7e23 in g_main_context_iteration (context=context@entry=0x555555ba71e0, may_block=may_block@entry=1) at ../glib/gmain.c:4282
retval = <optimized out>
#15 0x00007ffff6fbcfad in g_application_run (application=0x555555be85a0 [PpsApplication], argc=<optimized out>, argv=<optimized out>) at ../gio/gapplication.c:2712
arguments = 0x555555bc41e0
status = 0
context = 0x555555ba71e0
acquired_context = <optimized out>
__func__ = "g_application_run"
#16 0x00005555556273a2 in gio::application::ApplicationExtManual::run_with_args<papers_shell::auto::application::Application, alloc::string::String> (self=0x7fffffffd2d0, args=...)
at /run/build/papers/_flatpak_build/cargo-home/git/checkouts/gtk-rs-core-7be42ca38bd6361c/8e5054e/gio/src/application.rs:29
argc = 1
argv = alloc::vec::Vec<&str, alloc::alloc::Global> {buf: alloc::raw_vec::RawVec<&str, alloc::alloc::Global> {ptr: core::ptr::unique::Unique<&str> {pointer: core::ptr::non_null::NonNull<&str> {pointer: 0x555555bc4a30}, _marker: core::marker::PhantomData<&str>}, cap: alloc::raw_vec::Cap (1), alloc: alloc::alloc::Global}, len: 1}
#17 0x00005555556274b9 in gio::application::ApplicationExtManual::run<papers_shell::auto::application::Application> (self=0x7fffffffd2d0)
at /run/build/papers/_flatpak_build/cargo-home/git/checkouts/gtk-rs-core-7be42ca38bd6361c/8e5054e/gio/src/application.rs:22
#18 0x00005555555e6396 in papers::main () at src/main.rs:53
log_builder = env_logger::logger::Builder {filter: env_logger::filter::Builder {directives: alloc::vec::Vec<env_logger::filter::Directive, alloc::alloc::Global> {buf: alloc::raw_vec::RawVec<env_logger::filter::Directive, alloc::alloc::Global> {ptr: core::ptr::unique::Unique<env_logger::filter::Directive> {pointer: core::ptr::non_null::NonNull<env_logger::filter::Directive> {pointer: 0x8}, _marker: core::marker::PhantomData<env_logger::filter::Directive>}, cap: alloc::raw_vec::Cap (0), alloc: alloc::alloc::Global}, len: 0}, filter: core::option::Option<env_logger::filter::inner::Filter>::None, built: true}, writer: env_logger::fmt::writer::Builder {target: env_logger::fmt::writer::Target::Stderr, write_style: env_logger::fmt::writer::WriteStyle::Auto, is_test: false, built: true}, format: env_logger::fmt::Builder {format_timestamp: core::option::Option<env_logger::fmt::TimestampPrecision>::Some(env_logger::fmt::TimestampPrecision::Seconds), format_module_path: false, format_target: true, format_level: true, format_indent: core::option::Option<usize>::Some(4), custom_format: core::option::Option<alloc::boxed::Box<(dyn core::ops::function::Fn<(&mut env_logger::fmt::Formatter, &log::Record), Output=core::result::Result<(), std::io::error::Error>> + core::marker::Send + core::marker::Sync), alloc::alloc::Global>>::None, format_suffix: "\n", built: true}, built: true}
```
On the same machine with the same printer configured, Evince prints just fine.https://gitlab.gnome.org/GNOME/gimp/-/issues/110712.99 dialogs don't have opening transition from DWM anymore2024-03-18T18:13:25ZBruno Lopes2.99 dialogs don't have opening transition from DWM anymore### Environment/Versions
- GIMP version: 2.99.19 (256c795)
- Package: CI crossbuild
- Operating System: Windows 11
### Description of the bug
When opening any GIMP 2.99 dialog on Windows, the dialog will open abruptly, without a smoot...### Environment/Versions
- GIMP version: 2.99.19 (256c795)
- Package: CI crossbuild
- Operating System: Windows 11
### Description of the bug
When opening any GIMP 2.99 dialog on Windows, the dialog will open abruptly, without a smooth transition. But the transition exists when closing the dialog.
![299](/uploads/9c5ff46c0e181bda15a3bc626197a21d/299.mp4)
This is a regression comparing with 2.10, which have transition when opening and closing:
![210](/uploads/bec0a4664dccb066d49ae7e8289d64a7/210.mp4)
### Reproduction
Is the bug reproducible? Always
Reproduction steps:
1. Open a GIMP dialog (e.g. File>"New", Help>"About GIMP")
…
Expected result: dialog is opened with transition
Actual result: dialog is opened very harshhttps://gitlab.gnome.org/GNOME/Incubator/papers/-/issues/105In document properties dialog, Fonts list tab takes many seconds to populate2024-03-19T00:15:47ZJeff FortinIn document properties dialog, Fonts list tab takes many seconds to populateFor documents with embedded fonts (particularly complex/long documents), open the properties dialog and look at the "Fonts" tab. It will show up empty, and take somewhere between 3 to 7 seconds before its contents appear. At first, I tho...For documents with embedded fonts (particularly complex/long documents), open the properties dialog and look at the "Fonts" tab. It will show up empty, and take somewhere between 3 to 7 seconds before its contents appear. At first, I thought it was completely broken and that the fonts would not appear at all. In comparison, Evince 45 shows that tab's contents instantaneously.
![papers_slow_fonts_tab](/uploads/3c598f1355df3d822cb23fdd58b7cad1/papers_slow_fonts_tab.webm)https://gitlab.gnome.org/GNOME/gimp/-/issues/11040SF Unicode cuts open-input-string2024-03-26T12:51:26ZAlSchemistSF Unicode cuts open-input-string<!-- ⚠️ IMPORTANT: READ ME! ⚠️
This is the default template for bug reports.
For feature requests or performance issues, please switch instead to the appropriate template in the "Choose a template" list.
It is important that you fill al...<!-- ⚠️ IMPORTANT: READ ME! ⚠️
This is the default template for bug reports.
For feature requests or performance issues, please switch instead to the appropriate template in the "Choose a template" list.
It is important that you fill all the fields of the template.
-->
### Environment/Versions
- GIMP version: 2.99.18, 2.99.16
- Package: <!--[flatpak? Installer from gimp.org? If another installer, tell us where from] (write it after the > symbol)-->
- Operating System: <!--[Windows? macOS? Linux? All?] (write it after the > symbol) --> Windows 10, Ubuntu 23.04
<!--Note: bug reporters are expected to have verified the bug still exists
either in the last stable version of GIMP or on updated development code
(master branch).-->
### Description of the bug
<!--Please describe your issue with details.
Add screenshot or other files if needed.(write it after the > symbol)-->
### Reproduction
Is the bug reproducible? <!--[Always / Randomly / Happened only once ] (write it after the > symbol)--> Always
Reproduction steps:
1. Gimp menu "**Filters**" > "**Development**" > "**Script-Fu**" > "**Console**";
2. In the Script-Fu console, copy and **paste** the following Scheme expression:
```scheme
(read (open-input-string "'(λ)"))
```
Expected result:
```scheme
"'(λ)"
```
Actual result:
```scheme
Error: syntax error: expected right paren, found EOF
```
<details><summary>Click to reproduce the expected result?</summary>
The expected result is displayed in Windows 10 stable SF 2.10.36
```scheme
(read (open-input-string "'(λ)"))
'(λ)
```
### Additional information
The Unicode "λ" character is rendered in Script-Fu Console 2.99.18
However the count of characters could be wrong during the internal copy in the buffer of the input string port, hence the missing right parenthesis:
```scheme
; Read open-input-string port character by character until nbrChar. End at EOF before the right parenthesis
(define (MissingRightParenthesis nbrChar)
(let loop ((portStr (open-input-string "'(λ)")))
(let loop ((idxCh 0))
(if (< idxCh nbrChar)
(let ((ch (read-char portStr)))
(if (eof-object? ch)
(begin (display "\n0123\nEOF at 0-based index ")(display idxCh))
(begin (display ch) (loop (+ idxCh 1)))
) ) ) )
(close-port portStr) (newline)
) )
```
Run in the Script-Fu console of Gimp 2.99.18:
```scheme
(MissingRightParenthesis 4)
```
```scheme
'(λ
0123
EOF at 0-based index 3
#t
```
### Positive test
Without Unicode char, there are not any issues:
```scheme
; OK: Windows 10 Gimp 2.99.18 Script-Fu replacing "λ" with "ascii"
(read (open-input-string "'(ascii)"))
'(ascii)
```
The issue is located in open-**input**-string but not open-**output**-string:
```scheme
; OK: Win10 SF 2.99.18 replacing open-input-string with open-output-string + get-output-string
(let ((port (open-output-string)))(display "'(λ)" port)(prog1 (get-output-string port)(close-port port)))
"'(λ)"
```
Even if TS 1.42 renders Unicode char "λ" as "?", it does not eat the closed parenthesis.
C:\Tool\Gimp\scheme\TinyScheme\tinyscheme-1.42\bin>scheme.exe
```scheme
TinyScheme 1.42
ts> (read (open-input-string "'(λ)"))
'(?)
ts>
```
</details>
### Conclusion
This is SF 2.99 **open-input-string** Unicode **count** of **char** _regression_ with regards to 2.10https://gitlab.gnome.org/GNOME/nautilus/-/issues/3361When creating a new file from a template using the meatballs menu, the view i...2024-03-18T01:29:58ZJeff FortinWhen creating a new file from a template using the meatballs menu, the view is not focused, keyboard shortcuts cannot be usedWith version 46 / nightly:
1. Ensure you have some files in your `XDG_TEMPLATES_HOME` directory (i.e. `~/Templates`)
2. In any folder in listview, click the meatballs (…) menu in the location bar at the top
3. Click `New Document >` and...With version 46 / nightly:
1. Ensure you have some files in your `XDG_TEMPLATES_HOME` directory (i.e. `~/Templates`)
2. In any folder in listview, click the meatballs (…) menu in the location bar at the top
3. Click `New Document >` and select one of your template files
Result: the file gets created in the view, and is "apparently" selected in blue, but the view does not get the focus, so:
* You cannot rename directly with `F2` (but ideally it should prompt you directly to rename, #524)
* You cannot use the Up/Down arrow keys to navigate
* You cannot delete it directly with `Delete`, or `Ctrl+X` to cut it
* There is no clear way to get the focus there with the keyboard, without clicking
I wonder if this bug could also be an explanation for #2887 ?
However, this bug does not affect version 45.2.1, only version 46. It affects both the list view and the grid view.https://gitlab.gnome.org/GNOME/nautilus/-/issues/3354Empty “” selected text after deleting a file2024-03-22T16:01:39ZAlessandro BonoEmpty “” selected text after deleting a file# Affected Version
- Version: NautilusDevel
- Distribution: Flatpak
- Also happens with development version: Yes
# Steps to reproduce <!-- Explain in detail how the issue can be reproduced. -->
1. Select a file
2. Press Delete
# Expect...# Affected Version
- Version: NautilusDevel
- Distribution: Flatpak
- Also happens with development version: Yes
# Steps to reproduce <!-- Explain in detail how the issue can be reproduced. -->
1. Select a file
2. Press Delete
# Expected Behavior
No floating bar that says `“” selected` in the bottom right corner.
# Actual Behavior
The floating bar in the bottom right corner is shown and says `“” selected`.
# Additional Information
Photo of the issue![Screenshot_from_2024-03-08_11-15-03](/uploads/b3c0a01f6f88d78b57fca65e3f435ac2/Screenshot_from_2024-03-08_11-15-03.png)GNOME 46Khalid Abu ShawaribKhalid Abu Shawaribhttps://gitlab.gnome.org/GNOME/Incubator/papers/-/issues/102Papers constantly tries re-rendering while resizing the window, leading to 5-...2024-03-23T05:19:15ZJeff FortinPapers constantly tries re-rendering while resizing the window, leading to 5-10x longer render timesThis is like #98 and #100, combined, on steroids.
1. Open this [magical vector map](https://www.stm.info/sites/default/files/media/Stminfo/images/plan_reseau.pdf)* in Papers. Have a stopwatch and CPU usage monitor handy on the side
2. O...This is like #98 and #100, combined, on steroids.
1. Open this [magical vector map](https://www.stm.info/sites/default/files/media/Stminfo/images/plan_reseau.pdf)* in Papers. Have a stopwatch and CPU usage monitor handy on the side
2. Once Paper settles and finishes doing the initial rendering, slowly resize the window (whether to a big size filling the screen, or the other way around, to a small size)
3. Start the stopwatch and monitor your CPU usage
Result: as seen in [this demonstration video](https://youtu.be/SxW5zqxGQro)…
* Papers will take 35-40 seconds to render that map if you dragged-resized the window, instead of 13-17 seconds if you were to hit Ctrl+R (which is already slower than it should be, as per #98) without resizing involved
* Evince is not affected: once you release the drag (finish resizing the window), it _always_ takes exactly a maximum of 4 to 5 seconds to render that PDF, no matter the size and how often/slowly you resize the Evince window.
---
*: You can also test with the sample from [this poppler issue](https://gitlab.freedesktop.org/poppler/poppler/-/issues/1456), as both are extremely useful to make performance problems visible in Papers.https://gitlab.gnome.org/GNOME/Incubator/papers/-/issues/99Papers consuming considerably more memory than Evince on PDFs2024-03-25T07:16:15ZAlessandro BruniPapers consuming considerably more memory than Evince on PDFs### Summary
As per title, I have noticed that Papers consumes \~3 times more memory when browsing a PDF
### Description
See the following video where I open [this pdf](https://apps.dtic.mil/sti/pdfs/ADA441817.pdf).
[Screencast from 2...### Summary
As per title, I have noticed that Papers consumes \~3 times more memory when browsing a PDF
### Description
See the following video where I open [this pdf](https://apps.dtic.mil/sti/pdfs/ADA441817.pdf).
[Screencast from 2024-03-06 19-00-47.webm](/uploads/cadfb6fac41c9200f753afe5926de655/Screencast_from_2024-03-06_19-00-47.webm)
I think it is related to image rendering.https://gitlab.gnome.org/GNOME/Incubator/papers/-/issues/98Duplicate rendering causes documents to render 3x slower in Papers than in Ev...2024-03-17T21:33:06ZJeff FortinDuplicate rendering causes documents to render 3x slower in Papers than in Evince or OkularBenchmark: open this [wonderful vectorial map](https://www.stm.info/sites/default/files/media/Stminfo/images/plan_reseau.pdf) in Papers. Alternatively, you can also get another sample from [this poppler issue](https://gitlab.freedesktop....Benchmark: open this [wonderful vectorial map](https://www.stm.info/sites/default/files/media/Stminfo/images/plan_reseau.pdf) in Papers. Alternatively, you can also get another sample from [this poppler issue](https://gitlab.freedesktop.org/poppler/poppler/-/issues/1456), as both are extremely useful to make performance problems visible in Papers.
Result: https://www.youtube.com/watch?v=CSdtleP_QsY
* Papers shows the thumbnail in the sidebar after 5 seconds, but only shows the rendered page output in the main view after… 18 seconds.
* Evince and Okular render the whole document in 5-7 seconds.
| Papers' flame graph (Sysprof launched from Builder) | Evince 45's flame graph (standalone Sysprof) |
| - | - |
| ![Papers_rendering_the_STM_map_-_Sysprof_46_capture_from_Builder_-_flamegraph.opti](/uploads/0ee2b3979aa8484b2a927816a5094093/Papers_rendering_the_STM_map_-_Sysprof_46_capture_from_Builder_-_flamegraph.opti.png) | ![Evince_45_rendering_the_STM_Map_-_Sysprof_46_standalone_capture_-_flamegraph.opti](/uploads/21c5dc6652a1f183477e224ce39de37a/Evince_45_rendering_the_STM_Map_-_Sysprof_46_standalone_capture_-_flamegraph.opti.png) |
I see no specific mentions of "performance", "fast", "slow" in recent releases of https://poppler.freedesktop.org/releases.html that can immediately explain this.
Particularly suspicious is the fact that Papers is able to get the thumbnail rendered into the sidebar within 5 seconds.
Overall, in any case, Okular's realtime rendering of the shapes is a nicer experience than Papers/Evince's "let's block the whole view until everything is fully rendered", because it lets you immediately see the general of things.https://gitlab.gnome.org/GNOME/Incubator/papers/-/issues/90Document's Ctrl+Left / Ctrl+Right (rotation) keyboard shortcuts interfere wit...2024-03-26T19:58:27ZJeff FortinDocument's Ctrl+Left / Ctrl+Right (rotation) keyboard shortcuts interfere with SearchBar's standard text cursor shortcuts to move to the previous/next wordIn editable text entry fields, like the SearchEntry, `Ctrl+Left` and `Ctrl+Right` are standard shortcuts for being able to move the text cursor between words within the entry widget. However, Papers currently lets the same shortcuts from...In editable text entry fields, like the SearchEntry, `Ctrl+Left` and `Ctrl+Right` are standard shortcuts for being able to move the text cursor between words within the entry widget. However, Papers currently lets the same shortcuts from the document canvas (to rotate counterclockwise/clockwise) interfere with that, so instead of moving the text cursor within the SearchEntry, the document unexpectedly gets rotated and the cursor does not move.https://gitlab.gnome.org/GNOME/Incubator/papers/-/issues/84Document's `Ctrl+A` Select All shortcut interferes with searchbar's searchent...2024-03-26T19:58:27ZJeff FortinDocument's `Ctrl+A` Select All shortcut interferes with searchbar's searchentry widget1. `Ctrl+F`
2. Type some gibberish
3. Change your mind, hit `Ctrl+A` to select all the contents of the searchbar to replace them
Result: instead of selecting all text in the search entry, all the text in the document is selected / highl...1. `Ctrl+F`
2. Type some gibberish
3. Change your mind, hit `Ctrl+A` to select all the contents of the searchbar to replace them
Result: instead of selecting all text in the search entry, all the text in the document is selected / highlighted in blue.https://gitlab.gnome.org/GNOME/Incubator/papers/-/issues/83Page Up / Page Down shortcut skips pages2024-03-05T17:55:31ZJeff FortinPage Up / Page Down shortcut skips pagesTesting with the nightly flatpak version, pressing `PgUp` / `PgDown` on the keyboard, even after clicking/selecting something in the main contents view (to be sure the sidebar thumbnails are not the thing that have focus), PgUp/Down skip...Testing with the nightly flatpak version, pressing `PgUp` / `PgDown` on the keyboard, even after clicking/selecting something in the main contents view (to be sure the sidebar thumbnails are not the thing that have focus), PgUp/Down skips pages (especially the ones in the "middle" of the sidebar) instead of always going up/down 1 page at a time.
Demonstration video:
![Screencast_from_2024-03-05_00-03-40](/uploads/973193c9fe7eb7c65354cc3d57dd7aab/Screencast_from_2024-03-05_00-03-40.webm){width=75%}https://gitlab.gnome.org/GNOME/Incubator/papers/-/issues/81The focus leaves PpsView and impossible to get it back to it with TAB key2024-03-11T18:23:54ZQiu WenboThe focus leaves PpsView and impossible to get it back to it with TAB keySee !109 for the context.See !109 for the context.https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1190Show calculated age for automated birthday calendar events2024-03-05T07:41:13ZJeff FortinShow calculated age for automated birthday calendar eventsEDS contacts have a "birthday" date field, and an "anniversary" date field. Maybe eventually a [date of death field](https://gitlab.gnome.org/GNOME/evolution/-/issues/1518).
When a full valid date including year is included in the _birt...EDS contacts have a "birthday" date field, and an "anniversary" date field. Maybe eventually a [date of death field](https://gitlab.gnome.org/GNOME/evolution/-/issues/1518).
When a full valid date including year is included in the _birthday_ date field, it would be nice to show what age the person is on that day. Evolution (shown on the right in the screenshot below) does this, whereas GNOME Calendar (shown on the left) doesn't:
![image](/uploads/ed0c8f629d4bb17cc80aa05da127704f/image.png)
This would make the automated "Birthdays & Anniversaries" EDS calendar quite a bit more useful, because it would not only remind you of someone's birthday, but also save you from asking the awkward "so wait, what age are you again?" or might prompt you to celebrate some specific milestones (ex: in some cultures the 50th birthday is significant, etc.).
The design question is whether we should show the date directly in the event title label like Evolution does, or if this can/should only be in the tooltip when you hover it with the mouse, and in the event details popover widget.
---
Interesting fact: @thibaultamartin's screenshot in https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/49#note_779102 reveals that we used to show a birthday cake emoji (instead of the `Birthday: ` text prefix) and the birth yeay (as a suffix, ex.: ` (1992)`). I wonder what led to this behavior changing between 2020 and 2022. Was the cake emoji's replacement by a text string an EDS change @mcrha? I can't find a ticket about it in Evolution or EDS, nor anything related to calendar event labels when searching for "birthday" in the Evolution or EDS commits.
Of course, it is _much_ more useful to show the calculated age (like Evolution does) rather than the birth year (like GNOME Calendar used to do), as the birth year requires me to make a mental calculation that will inevitably be tedious and likely to be wrong.https://gitlab.gnome.org/GNOME/gimp/-/issues/10998GIMP-2.99.18 - a painted color color-picks differently than the color that wa...2024-03-06T05:36:07ZElle StoneGIMP-2.99.18 - a painted color color-picks differently than the color that was actually dialed in to be paintedOn GIMP-2.99.18 a painted color is not always the color that was intended to be painted. To reproduce:
1. Open a new 32-bit floating point image in the built-in sRGB color space. Make the background white (the background color is probab...On GIMP-2.99.18 a painted color is not always the color that was intended to be painted. To reproduce:
1. Open a new 32-bit floating point image in the built-in sRGB color space. Make the background white (the background color is probably irrelevant).
2. Using the Change Foreground Color tool, dial in sRGB reddest red (R=100, G=B=0). Now paint a patch of solid reddest red.
3. Repeat for sRGB bluest blue (R=G=0, B=100), greenest green (you get the idea), yellowest yellow, most cyan cyan, and most magenta magenta.
4. Now color-pick each of the just-painted "most saturated sRGB colors". One or more of the colors will not color-pick as the same color that was painted. For example, greenest green might color pick as R=0, B=17, G=100. And so forth.
Which colors are affected seems a bit random. How much a color is affected also seems a bit random.
This bug affects GIMP-2.99.18 on Debian Trixie Linux, installed from source downloaded from gitlab. It also affects GIMP-2.99.18 for Windows, downloaded from gimp.org.
The bug does *not* affect GIMP-2.99.16. It also does not affect various versions of GIMP-2.10.
Some possibly relevant older bug reports:
https://gitlab.gnome.org/GNOME/gimp/-/issues/1980
https://gitlab.gnome.org/GNOME/gimp/-/issues/2091
https://gitlab.gnome.org/GNOME/gimp/-/issues/1997
Using or not using "Sample average" and "Sample merged" didn't seem to make any difference.3.0 RC1https://gitlab.gnome.org/GNOME/Incubator/papers/-/issues/78Scrolling pdfs with lots of photos is blocked by loading the next pages2024-03-19T10:11:33Zdarkblaze69Scrolling pdfs with lots of photos is blocked by loading the next pages* OS: Arch Linux
* Papers 46.alpha e83caa2b
* gtk4 4.13.8
Scrolling pdfs with lots of photos is blocked by loading the next pages even on modern CPU/GPU. Compared to Evince, there's scrolling is asynchoronous of pages loading.
| Papers...* OS: Arch Linux
* Papers 46.alpha e83caa2b
* gtk4 4.13.8
Scrolling pdfs with lots of photos is blocked by loading the next pages even on modern CPU/GPU. Compared to Evince, there's scrolling is asynchoronous of pages loading.
| Papers | Evince |
| - | - |
| ![Screencast_from_2024-03-03_13-16-49](/uploads/bb65cf9b7882b75ce534cb103b9d8e11/Screencast_from_2024-03-03_13-16-49.webm){width=100%} | ![Screencast_from_2024-03-03_13-15-53](/uploads/82b6e8308b913bb3735be5150e7fd1c7/Screencast_from_2024-03-03_13-15-53.webm){width=100%}Move to Corehttps://gitlab.gnome.org/GNOME/nautilus/-/issues/3336Follow-up from "Improve Performance When Opening the Properties of a Large Nu...2024-03-20T00:52:30ZKhalid Abu ShawaribFollow-up from "Improve Performance When Opening the Properties of a Large Number of Files"The following discussion from !1375 should be addressed:
- [ ] @antoniof started a [discussion](https://gitlab.gnome.org/GNOME/nautilus/-/merge_requests/1375#note_2022599):
> This doesn't make sense. If `file->details->filesystem_...The following discussion from !1375 should be addressed:
- [ ] @antoniof started a [discussion](https://gitlab.gnome.org/GNOME/nautilus/-/merge_requests/1375#note_2022599):
> This doesn't make sense. If `file->details->filesystem_info_is_up_to_date` is TRUE, we wouldn't ever reach this else branch.
>
> Anyway, I think this whole commit is wrong and should be reverted. We should look at the parent of the file for fs info, not the file itself.
>
> This is important for the cases where the file is a mount into another file system, but what we want is the information about the fs where the mountpoint is.GNOME 46https://gitlab.gnome.org/GNOME/Incubator/papers/-/issues/59Excess padding of thumbnails in sidebar2024-03-12T10:18:51ZTobias BernardExcess padding of thumbnails in sidebarWith this landscape document I'm getting very narrow horizontal padding and huge vertical padding on the thumbnail containers:
![Screenshot_from_2024-02-26_11-21-36](/uploads/a7a1e7f24bd8efb7e43d987f198764b4/Screenshot_from_2024-02-26_1...With this landscape document I'm getting very narrow horizontal padding and huge vertical padding on the thumbnail containers:
![Screenshot_from_2024-02-26_11-21-36](/uploads/a7a1e7f24bd8efb7e43d987f198764b4/Screenshot_from_2024-02-26_11-21-36.png)
File: https://joinmastodon.org/reports/Mastodon%20Annual%20Report%202022.pdf