mate-desktop / mate-notification-daemon

Daemon to display passive pop-up notifications
https://mate-desktop.org
GNU General Public License v2.0
30 stars 26 forks source link

Wayland support #181

Closed wmww closed 3 years ago

wmww commented 3 years ago

Adds --enable-x11/--enable-wayland options. Like with the panel you can use the configure options to force enable or disable each backend, or not specify them let the build system detect if the required libraries are present. Wayland support requires GTK Layer Shell. I inserted Wayland code and made X11 code optional with minimal additional refactoring, so it's all a bit rough.

What works:

What doesn't:

raveit65 commented 3 years ago

For some reasons i got a segfault when running m-n-d under wayfire. I started the notification-window from mate-notification-properties.

warning: core file may not match specified executable file.
[New LWP 3686]
[New LWP 3690]
[New LWP 3687]
[New LWP 3689]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Core was generated by `/usr/libexec/mate-notification-daemon'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  magazine_chain_pop_head (magazine_chunks=0x56143dec5810) at ../glib/gslice.c:538
538 ../glib/gslice.c: No such file or directory.
[Current thread is 1 (Thread 0x7efd177faa40 (LWP 3686))]

Thread 1 (Thread 0x7efd177faa40 (LWP 3686)):
#0  magazine_chain_pop_head (magazine_chunks=0x56143dec5810) at ../glib/gslice.c:538
        chunk = 0xc00000000
        mag = 0x56143dec5810
        chunk = <optimized out>
        ix = 0
        tmem = 0x56143dec5800
        chunk_size = 16
        mem = <optimized out>
#1  thread_memory_magazine1_alloc (ix=0, tmem=0x56143dec5800) at ../glib/gslice.c:841
        mag = 0x56143dec5810
        chunk = <optimized out>
        ix = 0
        tmem = 0x56143dec5800
        chunk_size = 16
        mem = <optimized out>
#2  g_slice_alloc (mem_size=mem_size@entry=16) at ../glib/gslice.c:1015
        ix = 0
        tmem = 0x56143dec5800
        chunk_size = 16
        mem = <optimized out>
#3  0x00007efd18aa705a in g_slist_prepend (list=list@entry=0x56143e031950 = {...}, data=0x56143dfaf4c0) at ../glib/gslist.c:275
        new_list = <optimized out>
#4  0x00007efd18683aab in pango_attr_list_copy (list=<optimized out>) at ../pango/pango-attributes.c:1372
        new = 0x56143dfae720
        iter = 0x56143df46330 = {0x56143dfaf740}
        new_attrs = 0x56143e031950 = {0x56143dfae6c0, 0x56143dfae700, 0x56143dfada20}
#5  0x00007efd1868bc78 in pango_layout_get_effective_attributes (layout=layout@entry=0x56143dee9990 [PangoLayout]) at ../pango/pango-layout.c:4049
        attrs = <optimized out>
#6  0x00007efd1868feee in pango_layout_check_lines (layout=0x56143dee9990 [PangoLayout]) at ../pango/pango-layout.c:4200
        start = <optimized out>
        done = <optimized out>
        start_offset = <optimized out>
        attrs = <optimized out>
        itemize_attrs = <optimized out>
        shape_attrs = <optimized out>
        iter = <optimized out>
        prev_base_dir = <optimized out>
        base_dir = <optimized out>
        state = {line_height = 0, remaining_height = 0, attrs = 0x56143e3f19e0, items = 0x7fffa4fc7aac = {0x3dee999000007efd, <error reading variable>
        __func__ = "pango_layout_check_lines"
#7  0x00007efd18692069 in pango_layout_get_extents_internal (layout=layout@entry=0x56143dee9990 [PangoLayout], ink_rect=ink_rect@entry=0x0, logical_rect=logical_rect@entry=0x7fffa4fc7b80, line_extents=line_extents@entry=0x0) at ../pango/pango-layout.c:2623
        line_list = <optimized out>
        y_offset = 0
        width = <optimized out>
        need_width = 0
        line_index = 0
        baseline = 32509
        __func__ = "pango_layout_get_extents_internal"
#8  0x00007efd186924c0 in pango_layout_get_extents (layout=layout@entry=0x56143dee9990 [PangoLayout], ink_rect=ink_rect@entry=0x0, logical_rect=logical_rect@entry=0x7fffa4fc7b80) at ../pango/pango-layout.c:2817
        __func__ = "pango_layout_get_extents"
#9  0x00007efd19118900 in gtk_label_get_preferred_layout_size (widest=0x7fffa4fc7b70, smallest=0x7fffa4fc7b80, label=0x56143deed760 [GtkLabel]) at gtklabel.c:3725
        priv = 0x56143deed5f0
        layout = 0x56143dee9990 [PangoLayout]
        char_pixels = 0
        ypad = 0
        widest_rect = {x = 0, y = 0, width = 182272, height = 22528}
        label = 0x56143deed760 [GtkLabel]
        priv = 0x56143deed5f0
        xpad = 0
        smallest_rect = {x = 1039857536, y = 22036, width = 16, height = 16}
        widget = 0x56143deed760 [GtkLabel]
        label = 0x56143deed760 [GtkLabel]
        priv = <optimized out>
        xpad = 0
        ypad = 0
#10 gtk_label_get_preferred_size (natural_baseline=0x0, minimum_baseline=0x0, natural_size=0x7fffa4fc7d4c, minimum_size=0x7fffa4fc7d48, orientation=GTK_ORIENTATION_HORIZONTAL, widget=0x56143deed760 [GtkLabel]) at gtklabel.c:3768
        ypad = 0
        widest_rect = {x = 0, y = 0, width = 182272, height = 22528}
        label = 0x56143deed760 [GtkLabel]
        priv = 0x56143deed5f0
        xpad = 0
        smallest_rect = {x = 1039857536, y = 22036, width = 16, height = 16}
        widget = 0x56143deed760 [GtkLabel]
        label = 0x56143deed760 [GtkLabel]
        priv = <optimized out>
        xpad = 0
        ypad = 0
#11 gtk_label_measure (gadget=<optimized out>, orientation=GTK_ORIENTATION_HORIZONTAL, for_size=<optimized out>, minimum=0x7fffa4fc7d48, natural=0x7fffa4fc7d4c, minimum_baseline=0x0, natural_baseline=0x0, unused=0x0) at gtklabel.c:3927
        widget = 0x56143deed760 [GtkLabel]
        label = 0x56143deed760 [GtkLabel]
        priv = <optimized out>
        xpad = 0
        ypad = 0
#12 0x00007efd1905ba97 in gtk_css_custom_gadget_get_preferred_size (gadget=<optimized out>, orientation=<optimized out>, for_size=<optimized out>, minimum=<optimized out>, natural=<optimized out>, minimum_baseline=<optimized out>, natural_baseline=0x0) at gtkcsscustomgadget.c:124
        priv = <optimized out>
#13 0x00007efd1906098f in gtk_css_gadget_get_preferred_size (gadget=0x56143e15ff00 [GtkCssCustomGadget], orientation=orientation@entry=GTK_ORIENTATION_HORIZONTAL, for_size=for_size@entry=-1, minimum=0x7fffa4fc7d48, natural=0x7fffa4fc7d4c, minimum_baseline=minimum_baseline@entry=0x0, natural_baseline=0x0) at gtkcssgadget.c:683
        style = <optimized out>
        margin = {left = 0, right = 0, top = 0, bottom = 0}
        border = {left = 0, right = 0, top = 0, bottom = 0}
        padding = {left = 0, right = 0, top = 0, bottom = 0}
        min_size = 0
        extra_size = 0
        extra_opposite = 0
        extra_baseline = 0
        unused_minimum = 0
        unused_natural = 0
        forced_minimum = <optimized out>
        forced_natural = <optimized out>
        min_for_size = <optimized out>
        __func__ = "gtk_css_gadget_get_preferred_size"
#14 0x00007efd191152a7 in gtk_label_get_preferred_width (widget=<optimized out>, minimum_size=<optimized out>, natural_size=<optimized out>) at gtklabel.c:3935
#15 0x00007efd191ced71 in gtk_widget_query_size_for_orientation (widget=0x56143deed760 [GtkLabel], orientation=orientation@entry=GTK_ORIENTATION_HORIZONTAL, for_size=for_size@entry=-1, minimum_size=minimum_size@entry=0x7fffa4fc7e38, natural_size=natural_size@entry=0x7fffa4fc7e3c, minimum_baseline=minimum_baseline@entry=0x0, natural_baseline=0x0) at gtksizerequest.c:181
        adjusted_min = 30
        adjusted_natural = 30
        adjusted_for_size = -1
        cache = 0x56143deed6f8
        widget_class = <optimized out>
        min_size = 0
        nat_size = 0
        min_baseline = -1
        nat_baseline = -1
        found_in_cache = 0
        __func__ = "gtk_widget_query_size_for_orientation"
#16 0x00007efd191cf66c in gtk_widget_compute_size_for_orientation (widget=0x0, widget@entry=0x56143deed760 [GtkLabel], orientation=orientation@entry=GTK_ORIENTATION_HORIZONTAL, for_size=for_size@entry=-1, minimum=minimum@entry=0x7fffa4fc7e38, natural=natural@entry=0x7fffa4fc7e3c, minimum_baseline=minimum_baseline@entry=0x0, natural_baseline=<optimized out>) at gtksizerequest.c:399
        widgets = <optimized out>
        iter = {dummy1 = 0xffffd40000000400, dummy2 = 0x0, dummy3 = 0xffffffffffffffff, dummy4 = -1, dummy5 = 19456, dummy6 = 0x1e0000001e}
        key = 0x466700000000
        min_result = <optimized out>
        nat_result = <optimized out>
#17 0x00007efd191cf72e in gtk_widget_get_preferred_width (widget=0x56143deed760 [GtkLabel], minimum_width=minimum_width@entry=0x7fffa4fc7e38, natural_width=natural_width@entry=0x7fffa4fc7e3c) at gtksizerequest.c:492
        __func__ = "gtk_widget_get_preferred_width"
#18 0x00007efd19008063 in gtk_box_get_size (natural_baseline=0x0, minimum_baseline=0x0, natural_size=0x7fffa4fc7ffc, minimum_size=0x7fffa4fc7ff8, orientation=GTK_ORIENTATION_HORIZONTAL, widget=<optimized out>) at gtkbox.c:1608
        child_minimum = 30
        child_natural_baseline = -1
        child_natural = 30
        child_minimum_baseline = -1
        child = 0x56143e082470
        natural = 30
        center_min = 0
        minimum = 30
        box = <optimized out>
        private = 0x56143df544c0
        natural_above = 0
        natural_below = 0
        min_baseline = -1
        children = 0x56143dfa9a80 = {0x56143e082470, 0x56143e17a780}
        nvis_children = 1
        minimum_above = 0
        minimum_below = 0
        have_baseline = 0
        nat_baseline = -1
        center_nat = 0
        widget = <optimized out>
        box = <optimized out>
        private = 0x56143df544c0
#19 gtk_box_get_content_size (gadget=<optimized out>, orientation=GTK_ORIENTATION_HORIZONTAL, for_size=<optimized out>, minimum=0x7fffa4fc7ff8, natural=0x7fffa4fc7ffc, minimum_baseline=0x0, natural_baseline=0x0, unused=0x0) at gtkbox.c:2068
        widget = <optimized out>
        box = <optimized out>
        private = 0x56143df544c0
#20 0x00007efd1905ba97 in gtk_css_custom_gadget_get_preferred_size (gadget=<optimized out>, orientation=<optimized out>, for_size=<optimized out>, minimum=<optimized out>, natural=<optimized out>, minimum_baseline=<optimized out>, natural_baseline=0x0) at gtkcsscustomgadget.c:124
        priv = <optimized out>
#21 0x00007efd1906098f in gtk_css_gadget_get_preferred_size (gadget=0x56143e15f880 [GtkCssCustomGadget], orientation=orientation@entry=GTK_ORIENTATION_HORIZONTAL, for_size=for_size@entry=-1, minimum=0x7fffa4fc7ff8, natural=0x7fffa4fc7ffc, minimum_baseline=minimum_baseline@entry=0x0, natural_baseline=0x0) at gtkcssgadget.c:683
        style = <optimized out>
        margin = {left = 0, right = 0, top = 0, bottom = 0}
        border = {left = 0, right = 0, top = 0, bottom = 0}
        padding = {left = 0, right = 0, top = 0, bottom = 0}
        min_size = 0
        extra_size = 0
        extra_opposite = 0
        extra_baseline = 0
        unused_minimum = 0
        unused_natural = 0
        forced_minimum = <optimized out>
        forced_natural = <optimized out>
        min_for_size = <optimized out>
        __func__ = "gtk_css_gadget_get_preferred_size"
#22 0x00007efd19008c57 in gtk_box_get_preferred_width (widget=<optimized out>, minimum=<optimized out>, natural=<optimized out>) at gtkbox.c:1722
#23 0x00007efd191ced71 in gtk_widget_query_size_for_orientation (widget=0x56143df545f0 [GtkBox], orientation=orientation@entry=GTK_ORIENTATION_HORIZONTAL, for_size=for_size@entry=-1, minimum_size=minimum_size@entry=0x7fffa4fc80e8, natural_size=natural_size@entry=0x7fffa4fc80ec, minimum_baseline=minimum_baseline@entry=0x0, natural_baseline=0x0) at gtksizerequest.c:181
        adjusted_min = 0
        adjusted_natural = 22036
        adjusted_for_size = -1
        cache = 0x56143df54588
        widget_class = <optimized out>
        min_size = 0
        nat_size = 0
        min_baseline = -1
        nat_baseline = -1
        found_in_cache = 0
        __func__ = "gtk_widget_query_size_for_orientation"
#24 0x00007efd191cf66c in gtk_widget_compute_size_for_orientation (widget=0x0, widget@entry=0x56143df545f0 [GtkBox], orientation=orientation@entry=GTK_ORIENTATION_HORIZONTAL, for_size=for_size@entry=-1, minimum=minimum@entry=0x7fffa4fc80e8, natural=natural@entry=0x7fffa4fc80ec, minimum_baseline=minimum_baseline@entry=0x0, natural_baseline=<optimized out>) at gtksizerequest.c:399
        widgets = <optimized out>
        iter = {dummy1 = 0xffffcc0000000400, dummy2 = 0x0, dummy3 = 0xffffffffffffffff, dummy4 = -1, dummy5 = -62538568, dummy6 = 0x561400000000}
        key = 0x547a00000000
        min_result = <optimized out>
        nat_result = <optimized out>
#25 0x00007efd191cf72e in gtk_widget_get_preferred_width (widget=0x56143df545f0 [GtkBox], minimum_width=minimum_width@entry=0x7fffa4fc80e8, natural_width=natural_width@entry=0x7fffa4fc80ec) at gtksizerequest.c:492
        __func__ = "gtk_widget_get_preferred_width"
#26 0x00007efd19008063 in gtk_box_get_size (natural_baseline=0x0, minimum_baseline=0x0, natural_size=0x7fffa4fc82ac, minimum_size=0x7fffa4fc82a8, orientation=GTK_ORIENTATION_HORIZONTAL, widget=<optimized out>) at gtkbox.c:1608
        child_minimum = 421331408
        child_natural_baseline = -1
        child_natural = 32509
        child_minimum_baseline = -1
        child = 0x56143df1cf40
        natural = 0
        center_min = 0
        minimum = 0
        box = <optimized out>
        private = 0x56143df54360
        natural_above = 0
        natural_below = 0
        min_baseline = -1
        children = 0x56143dfa9940 = {0x56143df1cf40, 0x56143df0ae10}
        nvis_children = 0
        minimum_above = 0
        minimum_below = 0
        have_baseline = 0
        nat_baseline = -1
        center_nat = 0
        widget = <optimized out>
        box = <optimized out>
        private = 0x56143df54360
#27 gtk_box_get_content_size (gadget=<optimized out>, orientation=GTK_ORIENTATION_HORIZONTAL, for_size=<optimized out>, minimum=0x7fffa4fc82a8, natural=0x7fffa4fc82ac, minimum_baseline=0x0, natural_baseline=0x0, unused=0x0) at gtkbox.c:2068
        widget = <optimized out>
        box = <optimized out>
        private = 0x56143df54360
#28 0x00007efd1905ba97 in gtk_css_custom_gadget_get_preferred_size (gadget=<optimized out>, orientation=<optimized out>, for_size=<optimized out>, minimum=<optimized out>, natural=<optimized out>, minimum_baseline=<optimized out>, natural_baseline=0x0) at gtkcsscustomgadget.c:124
        priv = <optimized out>
#29 0x00007efd1906098f in gtk_css_gadget_get_preferred_size (gadget=0x56143e1696a0 [GtkCssCustomGadget], orientation=orientation@entry=GTK_ORIENTATION_HORIZONTAL, for_size=for_size@entry=-1, minimum=0x7fffa4fc82a8, natural=0x7fffa4fc82ac, minimum_baseline=minimum_baseline@entry=0x0, natural_baseline=0x0) at gtkcssgadget.c:683
        style = <optimized out>
        margin = {left = 0, right = 0, top = 0, bottom = 0}
        border = {left = 0, right = 0, top = 0, bottom = 0}
        padding = {left = 0, right = 0, top = 0, bottom = 0}
        min_size = 0
        extra_size = 0
        extra_opposite = 0
        extra_baseline = 0
        unused_minimum = 0
        unused_natural = 0
        forced_minimum = <optimized out>
        forced_natural = <optimized out>
        min_for_size = <optimized out>
        __func__ = "gtk_css_gadget_get_preferred_size"
#30 0x00007efd19008c57 in gtk_box_get_preferred_width (widget=<optimized out>, minimum=<optimized out>, natural=<optimized out>) at gtkbox.c:1722
#31 0x00007efd191ced71 in gtk_widget_query_size_for_orientation (widget=0x56143df54490 [GtkBox], orientation=orientation@entry=GTK_ORIENTATION_HORIZONTAL, for_size=for_size@entry=-1, minimum_size=minimum_size@entry=0x7fffa4fc8398, natural_size=natural_size@entry=0x7fffa4fc839c, minimum_baseline=minimum_baseline@entry=0x0, natural_baseline=0x0) at gtksizerequest.c:181
        adjusted_min = 0
        adjusted_natural = 0
        adjusted_for_size = -1
        cache = 0x56143df54428
        widget_class = <optimized out>
        min_size = 0
        nat_size = 0
        min_baseline = -1
        nat_baseline = -1
        found_in_cache = 0
        __func__ = "gtk_widget_query_size_for_orientation"
#32 0x00007efd191cf66c in gtk_widget_compute_size_for_orientation (widget=0x0, widget@entry=0x56143df54490 [GtkBox], orientation=orientation@entry=GTK_ORIENTATION_HORIZONTAL, for_size=for_size@entry=-1, minimum=minimum@entry=0x7fffa4fc8398, natural=natural@entry=0x7fffa4fc839c, minimum_baseline=minimum_baseline@entry=0x0, natural_baseline=<optimized out>) at gtksizerequest.c:399
        widgets = <optimized out>
        iter = {dummy1 = 0x7fff0000000e, dummy2 = 0x0, dummy3 = 0xffffffffffffffff, dummy4 = -1, dummy5 = -62538568, dummy6 = 0x0}
        key = 0x7fffa4fc82d4
        min_result = <optimized out>
        nat_result = <optimized out>
#33 0x00007efd191cf72e in gtk_widget_get_preferred_width (widget=0x56143df54490 [GtkBox], minimum_width=minimum_width@entry=0x7fffa4fc8398, natural_width=natural_width@entry=0x7fffa4fc839c) at gtksizerequest.c:492
        __func__ = "gtk_widget_get_preferred_width"
#34 0x00007efd19008063 in gtk_box_get_size (natural_baseline=0x0, minimum_baseline=0x0, natural_size=0x7fffa4fc855c, minimum_size=0x7fffa4fc8558, orientation=GTK_ORIENTATION_HORIZONTAL, widget=<optimized out>) at gtkbox.c:1608
        child_minimum = 366
        child_natural_baseline = -1
        child_natural = 0
        child_minimum_baseline = -1
        child = 0x56143df1af50
        natural = 0
        center_min = 0
        minimum = 0
        box = <optimized out>
        private = 0x56143df54200
        natural_above = 0
        natural_below = 0
        min_baseline = -1
        children = 0x56143dfa9880 = {0x56143df1af50}
        nvis_children = 0
        minimum_above = 0
        minimum_below = 0
        have_baseline = 0
        nat_baseline = -1
        center_nat = 0
        widget = <optimized out>
        box = <optimized out>
        private = 0x56143df54200
#35 gtk_box_get_content_size (gadget=<optimized out>, orientation=GTK_ORIENTATION_HORIZONTAL, for_size=<optimized out>, minimum=0x7fffa4fc8558, natural=0x7fffa4fc855c, minimum_baseline=0x0, natural_baseline=0x0, unused=0x0) at gtkbox.c:2068
        widget = <optimized out>
        box = <optimized out>
        private = 0x56143df54200
#36 0x00007efd1905ba97 in gtk_css_custom_gadget_get_preferred_size (gadget=<optimized out>, orientation=<optimized out>, for_size=<optimized out>, minimum=<optimized out>, natural=<optimized out>, minimum_baseline=<optimized out>, natural_baseline=0x0) at gtkcsscustomgadget.c:124
        priv = <optimized out>
#37 0x00007efd1906098f in gtk_css_gadget_get_preferred_size (gadget=0x56143e169420 [GtkCssCustomGadget], orientation=orientation@entry=GTK_ORIENTATION_HORIZONTAL, for_size=for_size@entry=-1, minimum=0x7fffa4fc8558, natural=0x7fffa4fc855c, minimum_baseline=minimum_baseline@entry=0x0, natural_baseline=0x0) at gtkcssgadget.c:683
        style = <optimized out>
        margin = {left = 0, right = 0, top = 0, bottom = 0}
        border = {left = 0, right = 0, top = 0, bottom = 0}
        padding = {left = 0, right = 0, top = 0, bottom = 0}
        min_size = 0
        extra_size = 0
        extra_opposite = 0
        extra_baseline = 0
        unused_minimum = 0
        unused_natural = 0
        forced_minimum = <optimized out>
        forced_natural = <optimized out>
        min_for_size = <optimized out>
        __func__ = "gtk_css_gadget_get_preferred_size"
#38 0x00007efd19008c57 in gtk_box_get_preferred_width (widget=<optimized out>, minimum=<optimized out>, natural=<optimized out>) at gtkbox.c:1722
#39 0x00007efd191ced71 in gtk_widget_query_size_for_orientation (widget=0x56143df54330 [GtkBox], orientation=orientation@entry=GTK_ORIENTATION_HORIZONTAL, for_size=for_size@entry=-1, minimum_size=minimum_size@entry=0x7fffa4fc8648, natural_size=natural_size@entry=0x7fffa4fc864c, minimum_baseline=minimum_baseline@entry=0x0, natural_baseline=0x0) at gtksizerequest.c:181
        adjusted_min = 1
        adjusted_natural = 0
        adjusted_for_size = -1
        cache = 0x56143df542c8
        widget_class = <optimized out>
        min_size = 0
        nat_size = 0
        min_baseline = -1
        nat_baseline = -1
        found_in_cache = 0
        __func__ = "gtk_widget_query_size_for_orientation"
#40 0x00007efd191cf66c in gtk_widget_compute_size_for_orientation (widget=0x0, widget@entry=0x56143df54330 [GtkBox], orientation=orientation@entry=GTK_ORIENTATION_HORIZONTAL, for_size=for_size@entry=-1, minimum=minimum@entry=0x7fffa4fc8648, natural=natural@entry=0x7fffa4fc864c, minimum_baseline=minimum_baseline@entry=0x0, natural_baseline=<optimized out>) at gtksizerequest.c:399
        widgets = <optimized out>
        iter = {dummy1 = 0x561400000000, dummy2 = 0x0, dummy3 = 0xffffffffffffffff, dummy4 = -1, dummy5 = 0, dummy6 = 0x1}
        key = 0x4f00000001
        min_result = <optimized out>
        nat_result = <optimized out>
#41 0x00007efd191cf72e in gtk_widget_get_preferred_width (widget=0x56143df54330 [GtkBox], minimum_width=minimum_width@entry=0x7fffa4fc8648, natural_width=natural_width@entry=0x7fffa4fc864c) at gtksizerequest.c:492
        __func__ = "gtk_widget_get_preferred_width"
#42 0x00007efd19008063 in gtk_box_get_size (natural_baseline=0x0, minimum_baseline=0x0, natural_size=0x7fffa4fc880c, minimum_size=0x7fffa4fc8808, orientation=GTK_ORIENTATION_HORIZONTAL, widget=<optimized out>) at gtkbox.c:1608
        child_minimum = 47
        child_natural_baseline = -1
        child_natural = 22036
        child_minimum_baseline = -1
        child = 0x56143df1c680
        natural = 0
        center_min = 0
        minimum = 0
        box = <optimized out>
        private = 0x56143df540a0
        natural_above = 0
        natural_below = 0
        min_baseline = -1
        children = 0x56143dfa96a0 = {0x56143df1c680, 0x56143df1b440}
        nvis_children = 0
        minimum_above = 0
        minimum_below = 0
        have_baseline = 0
        nat_baseline = -1
        center_nat = 0
        widget = <optimized out>
        box = <optimized out>
        private = 0x56143df540a0
#43 gtk_box_get_content_size (gadget=<optimized out>, orientation=GTK_ORIENTATION_HORIZONTAL, for_size=<optimized out>, minimum=0x7fffa4fc8808, natural=0x7fffa4fc880c, minimum_baseline=0x0, natural_baseline=0x0, unused=0x0) at gtkbox.c:2068
        widget = <optimized out>
        box = <optimized out>
        private = 0x56143df540a0
#44 0x00007efd1905ba97 in gtk_css_custom_gadget_get_preferred_size (gadget=<optimized out>, orientation=<optimized out>, for_size=<optimized out>, minimum=<optimized out>, natural=<optimized out>, minimum_baseline=<optimized out>, natural_baseline=0x0) at gtkcsscustomgadget.c:124
        priv = <optimized out>
#45 0x00007efd1906098f in gtk_css_gadget_get_preferred_size (gadget=0x56143e172a80 [GtkCssCustomGadget], orientation=orientation@entry=GTK_ORIENTATION_HORIZONTAL, for_size=for_size@entry=-1, minimum=0x7fffa4fc8808, natural=0x7fffa4fc880c, minimum_baseline=minimum_baseline@entry=0x0, natural_baseline=0x0) at gtkcssgadget.c:683
        style = <optimized out>
        margin = {left = 0, right = 0, top = 0, bottom = 0}
        border = {left = 0, right = 0, top = 0, bottom = 0}
        padding = {left = 0, right = 0, top = 0, bottom = 0}
        min_size = 0
        extra_size = 0
        extra_opposite = 0
        extra_baseline = 0
        unused_minimum = 0
        unused_natural = 0
        forced_minimum = <optimized out>
        forced_natural = <optimized out>
        min_for_size = <optimized out>
        __func__ = "gtk_css_gadget_get_preferred_size"
#46 0x00007efd19008c57 in gtk_box_get_preferred_width (widget=<optimized out>, minimum=<optimized out>, natural=<optimized out>) at gtkbox.c:1722
#47 0x00007efd191ced71 in gtk_widget_query_size_for_orientation (widget=0x56143df541d0 [GtkBox], orientation=orientation@entry=GTK_ORIENTATION_HORIZONTAL, for_size=for_size@entry=-1, minimum_size=minimum_size@entry=0x7fffa4fc88b8, natural_size=natural_size@entry=0x7fffa4fc88bc, minimum_baseline=minimum_baseline@entry=0x0, natural_baseline=0x0) at gtksizerequest.c:181
        adjusted_min = 0
        adjusted_natural = 0
        adjusted_for_size = -1
        cache = 0x56143df54168
        widget_class = <optimized out>
        min_size = 0
        nat_size = 0
        min_baseline = -1
        nat_baseline = -1
        found_in_cache = 0
        __func__ = "gtk_widget_query_size_for_orientation"
#48 0x00007efd191cf66c in gtk_widget_compute_size_for_orientation (widget=0x0, widget@entry=0x56143df541d0 [GtkBox], orientation=orientation@entry=GTK_ORIENTATION_HORIZONTAL, for_size=for_size@entry=-1, minimum=minimum@entry=0x7fffa4fc88b8, natural=natural@entry=0x7fffa4fc88bc, minimum_baseline=minimum_baseline@entry=0x0, natural_baseline=<optimized out>) at gtksizerequest.c:399
        widgets = <optimized out>
        iter = {dummy1 = 0x0, dummy2 = 0x0, dummy3 = 0xffffffffffffffff, dummy4 = -1, dummy5 = 32509, dummy6 = 0x0}
        key = 0x0
        min_result = <optimized out>
        nat_result = <optimized out>
#49 0x00007efd191cf72e in gtk_widget_get_preferred_width (widget=widget@entry=0x56143df541d0 [GtkBox], minimum_width=minimum_width@entry=0x7fffa4fc88b8, natural_width=natural_width@entry=0x7fffa4fc88bc) at gtksizerequest.c:492
        __func__ = "gtk_widget_get_preferred_width"
#50 0x00007efd1929851a in gtk_window_get_preferred_width (widget=0x56143df18540 [GtkWindow], minimum_size=0x7fffa4fc8978, natural_size=0x7fffa4fc897c) at gtkwindow.c:8838
        window = 0x56143df18540 [GtkWindow]
        child = 0x56143df541d0 [GtkBox]
        priv = 0x56143df182e0
        border_width = 0
        title_min = 0
        title_nat = 0
        child_min = 0
        child_nat = 0
        window_border = {left = 0, right = 0, top = 0, bottom = 0}
        has_size_request = 1
#51 0x00007efd191ced71 in gtk_widget_query_size_for_orientation (widget=0x56143df18540 [GtkWindow], orientation=orientation@entry=GTK_ORIENTATION_HORIZONTAL, for_size=for_size@entry=-1, minimum_size=minimum_size@entry=0x7fffa4fc8a10, natural_size=natural_size@entry=0x7fffa4fc8a14, minimum_baseline=minimum_baseline@entry=0x0, natural_baseline=0x0) at gtksizerequest.c:181
        adjusted_min = 0
        adjusted_natural = 0
        adjusted_for_size = -1
        cache = 0x56143df184d8
        widget_class = <optimized out>
        min_size = 0
        nat_size = 0
        min_baseline = -1
        nat_baseline = -1
        found_in_cache = 0
        __func__ = "gtk_widget_query_size_for_orientation"
#52 0x00007efd191cf66c in gtk_widget_compute_size_for_orientation (widget=0x0, widget@entry=0x56143df18540 [GtkWindow], orientation=orientation@entry=GTK_ORIENTATION_HORIZONTAL, for_size=for_size@entry=-1, minimum=minimum@entry=0x7fffa4fc8a10, natural=natural@entry=0x7fffa4fc8a14, minimum_baseline=minimum_baseline@entry=0x0, natural_baseline=<optimized out>) at gtksizerequest.c:399
        widgets = <optimized out>
        iter = {dummy1 = 0x0, dummy2 = 0x0, dummy3 = 0xffffffffffffffff, dummy4 = -1, dummy5 = 0, dummy6 = 0x0}
        key = 0x0
        min_result = <optimized out>
        nat_result = <optimized out>
#53 0x00007efd191cf72e in gtk_widget_get_preferred_width (widget=widget@entry=0x56143df18540 [GtkWindow], minimum_width=minimum_width@entry=0x7fffa4fc8a10, natural_width=natural_width@entry=0x7fffa4fc8a14) at gtksizerequest.c:492
        __func__ = "gtk_widget_get_preferred_width"
#54 0x00007efd191cfaf0 in _gtk_widget_get_preferred_size_and_baseline (widget=widget@entry=0x56143df18540 [GtkWindow], minimum_size=minimum_size@entry=0x7fffa4fc8ab0, natural_size=natural_size@entry=0x0, minimum_baseline=minimum_baseline@entry=0x0, natural_baseline=natural_baseline@entry=0x0) at gtksizerequest.c:685
        min_width = 24
        nat_width = 48
        min_height = 24
        nat_height = 48
        __func__ = "_gtk_widget_get_preferred_size_and_baseline"
#55 0x00007efd191cfb4e in gtk_widget_get_preferred_size (widget=widget@entry=0x56143df18540 [GtkWindow], minimum_size=minimum_size@entry=0x7fffa4fc8ab0, natural_size=natural_size@entry=0x0) at gtksizerequest.c:750
#56 0x00007efd1929a101 in gtk_window_compute_hints (new_flags=<synthetic pointer>, new_geometry=0x7fffa4fc8ac0, window=0x56143df18540 [GtkWindow]) at gtkwindow.c:10298
        widget = 0x56143df18540 [GtkWindow]
        extra_width = 0
        extra_height = 0
        geometry_info = <optimized out>
        priv = <optimized out>
        requisition = {width = 421380640, height = 32509}
        priv = 0x56143df182e0
        new_geometry = {min_width = 1, min_height = 32767, max_width = 1039259728, max_height = 22036, base_width = 2, base_height = 32509, width_inc = 421380700, height_inc = 32509, min_aspect = 0, max_aspect = 6.8984166038417731e-310, win_gravity = 0}
        new_flags = <optimized out>
        w = 1042737744
        h = 22036
        pos = <optimized out>
        parent_widget = <optimized out>
        info = <optimized out>
        screen = 0x56143dee9810 [GdkWaylandScreen]
        x = 1
        y = 32767
        __func__ = "gtk_window_compute_configure_request"
#57 gtk_window_compute_configure_request (window=window@entry=0x56143df18540 [GtkWindow], request=request@entry=0x7fffa4fc8bb0, geometry=geometry@entry=0x7fffa4fc8bd0, flags=flags@entry=0x7fffa4fc8ba8) at gtkwindow.c:9610
        priv = 0x56143df182e0
        new_geometry = {min_width = 1, min_height = 32767, max_width = 1039259728, max_height = 22036, base_width = 2, base_height = 32509, width_inc = 421380700, height_inc = 32509, min_aspect = 0, max_aspect = 6.8984166038417731e-310, win_gravity = 0}
        new_flags = <optimized out>
        w = 1042737744
        h = 22036
        pos = <optimized out>
        parent_widget = <optimized out>
        info = <optimized out>
        screen = 0x56143dee9810 [GdkWaylandScreen]
        x = 1
        y = 32767
        __func__ = "gtk_window_compute_configure_request"
#58 0x00007efd192a12cf in gtk_window_move_resize (window=0x56143df18540 [GtkWindow]) at gtkwindow.c:9819
        priv = 0x56143df182e0
        widget = 0x56143df18540 [GtkWindow]
        container = 0x56143df18540 [GtkWindow]
        info = 0x56143e3f3f30
        new_geometry = {min_width = 0, min_height = 0, max_width = 198, max_height = 0, base_width = -1526951872, base_height = 32767, width_inc = 1042463024, height_inc = 22036, min_aspect = 9.7824997876566816e-322, max_aspect = 4.676081270173364e-310, win_gravity = 1039238464}
        gdk_window = 0x56143deed450 [GdkWaylandWindow]
        new_flags = 0
        new_request = {x = -1526952928, y = 0, width = 4, height = 0}
        configure_request_size_changed = 0
        configure_request_pos_changed = 0
        hints_changed = <optimized out>
        saved_last_info = <optimized out>
        current_width = <optimized out>
        current_height = <optimized out>
#59 0x00007efd18b73ae6 in _g_closure_invoke_va (closure=<optimized out>, return_value=<optimized out>, instance=<optimized out>, args=<optimized out>, n_params=<optimized out>, param_types=<optimized out>) at ../gobject/gclosure.c:873
        real_closure = <optimized out>
        __func__ = "_g_closure_invoke_va"
#60 0x00007efd18b8c6e9 in g_signal_emit_valist (instance=0x56143df18540, signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7fffa4fc8e40) at ../gobject/gsignal.c:3407
        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}}}
        accumulator = 0x0
        emission = {next = 0x7fffa4fc9040, instance = 0x56143df18540, ihint = {signal_id = 124, detail = 0, run_type = G_SIGNAL_RUN_LAST}, state = EMISSION_RUN, chain_type = 0x56143df7a1e0 [GtkWindow/GtkBin/GtkContainer/GtkWidget/GInitiallyUnowned]}
        signal_id = 124
        instance_type = 0x56143df7a1e0 [GtkWindow/GtkBin/GtkContainer/GtkWidget/GInitiallyUnowned]
        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 [void]
        static_scope = 0
        fastpath_handler = <optimized out>
        closure = <optimized out>
        run_type = <optimized out>
        hlist = <optimized out>
        l = <optimized out>
        fastpath = 1
        instance_and_params = <optimized out>
        signal_return_type = <optimized out>
        param_values = <optimized out>
        node = <optimized out>
        i = <optimized out>
        n_params = <optimized out>
        __func__ = "g_signal_emit_valist"
#61 0x00007efd18b8cc63 in g_signal_emit (instance=instance@entry=0x56143df18540, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3554
        var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffa4fc8f20, reg_save_area = 0x7fffa4fc8e60}}
#62 0x00007efd19054692 in gtk_container_check_resize (container=container@entry=0x56143df18540 [GtkWindow]) at gtkcontainer.c:2175
        __func__ = "gtk_container_check_resize"
#63 0x00007efd1929c68e in gtk_window_show (widget=0x56143df18540 [GtkWindow]) at gtkwindow.c:6183
        window = 0x56143df18540 [GtkWindow]
        priv = <optimized out>
        container = 0x56143df18540 [GtkWindow]
        is_plug = <optimized out>
#67 0x00007efd18b8cc63 in <emit signal ??? on instance 0x56143df18540 [GtkWindow]> (instance=instance@entry=0x56143df18540, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3554
        var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffa4fc9330, reg_save_area = 0x7fffa4fc9270}}
    #64 0x00007efd18b7388a in g_closure_invoke (closure=<optimized out>, return_value=<optimized out>, n_param_values=<optimized out>, param_values=<optimized out>, invocation_hint=<optimized out>) at ../gobject/gclosure.c:810
                real_closure = <optimized out>
                __func__ = "g_closure_invoke"
    #65 0x00007efd18b860ba in signal_emit_unlocked_R (node=node@entry=0x56143df5a060, detail=detail@entry=0, instance=instance@entry=0x56143df18540, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffa4fc90d0) at ../gobject/gsignal.c:3672
                accumulator = 0x0
                emission = {next = 0x7fffa4fc97e0, instance = 0x56143df18540, ihint = {signal_id = 54, detail = 0, run_type = G_SIGNAL_RUN_FIRST}, state = EMISSION_RUN, chain_type = 0x56143df7a1e0 [GtkWindow/GtkBin/GtkContainer/GtkWidget/GInitiallyUnowned]}
                hlist = <optimized out>
                handler_list = <optimized out>
                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}}}
                signal_id = 54
                max_sequential_handler_number = 160
                return_value_altered = <optimized out>
    #66 0x00007efd18b8caf9 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7fffa4fc9250) at ../gobject/gsignal.c:3498
                instance_and_params = 0x7fffa4fc90d0
                signal_return_type = <optimized out>
                param_values = 0x7fffa4fc90e8
                node = <optimized out>
                i = <optimized out>
                n_params = <optimized out>
                __func__ = "g_signal_emit_valist"
#68 0x00007efd19288776 in gtk_widget_show (widget=0x56143df18540 [GtkWindow]) at gtkwidget.c:4848
        parent = 0x0
        __func__ = "gtk_widget_show"
#69 0x000056143d5ecde0 in notify_daemon_notify_handler ()
#70 0x00007efd17e22af0 in ffi_call_unix64 () at ../src/x86/unix64.S:76
#71 0x00007efd17e222ab in ffi_call (cif=cif@entry=0x7fffa4fc9670, fn=fn@entry=0x56143d5ec470 <notify_daemon_notify_handler>, rvalue=<optimized out>, avalue=avalue@entry=0x7fffa4fc9540) at ../src/x86/ffi64.c:525
        classes = {X86_64_INTEGER_CLASS, 22036, 2768016912, 32767}
        stack = <optimized out>
        argp = 0x7fffa4fc9448 "\n"
        arg_types = <optimized out>
        gprcount = 6
        ssecount = <optimized out>
        ngpr = 1
        nsse = 0
        i = <optimized out>
        avn = <optimized out>
        ret_in_memory = <optimized out>
        reg_args = <optimized out>
#74 0x00007efd18b86423 in <emit signal ??? on instance 0x56143df8e6a0 [NotifyDaemonNotificationsSkeleton]> (node=<optimized out>, detail=0, instance=0x56143df8e6a0, emission_return=0x7fffa4fc98a0, instance_and_params=0x56143dee70f0) at ../gobject/gsignal.c:3742
        tmp = <optimized out>
        handler = 0x56143e0942c0
        accumulator = 0x56143e0b46a0
        emission = {next = 0x0, instance = 0x56143df8e6a0, ihint = {signal_id = 189, detail = 0, run_type = G_SIGNAL_RUN_FIRST}, state = EMISSION_RUN, chain_type = 0x4 [void]}
        hlist = <optimized out>
        handler_list = 0x56143e0942c0
        return_accu = 0x7fffa4fc9810
        accu = {g_type = 0x14 [gboolean], 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 = 189
        max_sequential_handler_number = 61
        return_value_altered = <optimized out>
    #72 0x00007efd18b7438d in g_cclosure_marshal_generic (closure=<optimized out>, return_gvalue=<optimized out>, n_param_values=<optimized out>, param_values=<optimized out>, invocation_hint=<optimized out>, marshal_data=<optimized out>) at ../gobject/gclosure.c:1500
                rtype = <optimized out>
                rvalue = 0x7fffa4fc9600
                n_args = <optimized out>
                atypes = <optimized out>
                args = <optimized out>
                i = <optimized out>
                cif = {abi = FFI_UNIX64, nargs = 11, arg_types = 0x7fffa4fc95a0, rtype = 0x7efd17e230c0 <ffi_type_sint32>, bytes = 40, flags = 10}
                cc = <optimized out>
                enum_tmpval = <optimized out>
                tmpval_used = 0
    #73 0x00007efd18b7388a in g_closure_invoke (closure=<optimized out>, return_value=<optimized out>, n_param_values=<optimized out>, param_values=<optimized out>, invocation_hint=<optimized out>) at ../gobject/gclosure.c:810
                real_closure = <optimized out>
                __func__ = "g_closure_invoke"
#75 0x000056143d5eaa7c in _notify_daemon_notifications_skeleton_handle_method_call ()
#76 0x00007efd18ce4fe1 in g_dbus_interface_method_dispatch_helper (interface=<optimized out>, method_call_func=0x56143d5ea8c0 <_notify_daemon_notifications_skeleton_handle_method_call>, invocation=0x56143dfc9d90 [GDBusMethodInvocation]) at ../gio/gdbusinterfaceskeleton.c:613
        has_handlers = <optimized out>
        has_default_class_handler = <optimized out>
        emit_authorized_signal = <optimized out>
        run_in_thread = <optimized out>
        flags = <optimized out>
        object = 0x0
        __func__ = "g_dbus_interface_method_dispatch_helper"
#77 0x00007efd18ccabd2 in call_in_idle_cb (user_data=user_data@entry=0x56143dfc9d90) at ../gio/gdbusconnection.c:4888
        invocation = 0x56143dfc9d90 [GDBusMethodInvocation]
        vtable = <optimized out>
        registration_id = <optimized out>
        subtree_registration_id = <optimized out>
        __func__ = "call_in_idle_cb"
#78 0x00007efd18a8345b in g_idle_dispatch (source=source@entry=0x7efcf4009070, callback=0x7efd18ccaaa0 <call_in_idle_cb>, user_data=0x56143dfc9d90) at ../glib/gmain.c:5755
        again = <optimized out>
#79 0x00007efd18a8778f in g_main_dispatch (context=0x56143def9850) at ../glib/gmain.c:3309
        dispatch = <optimized out>
        prev_source = 0x0
        was_in_call = <optimized out>
        user_data = 0x56143dfc9d90
        callback = 0x7efd18ccaaa0 <call_in_idle_cb>
        cb_funcs = 0x7efd18b5e280 <g_source_callback_funcs>
        cb_data = 0x56143e069200
        need_destroy = <optimized out>
        source = 0x7efcf4009070
        current = 0x56143def9910
        i = 0
        __func__ = "g_main_dispatch"
#80 g_main_context_dispatch (context=0x56143def9850) at ../glib/gmain.c:3974
#81 0x00007efd18a87b18 in g_main_context_iterate (context=0x56143def9850, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4047
        max_priority = 2147483647
        timeout = 16593
        some_ready = 1
        nfds = <optimized out>
        allocated_nfds = <optimized out>
        fds = 0x56143e0a6530
#82 0x00007efd18a87e33 in g_main_loop_run (loop=loop@entry=0x56143e015be0) at ../glib/gmain.c:4241
        __func__ = "g_main_loop_run"
#83 0x00007efd1912eb4d in gtk_main () at gtkmain.c:1328
        loop = 0x56143e015be0
#84 0x000056143d5e8e8c in main ()

Full backtrace with all treads: https://www.dropbox.com/s/q2ja5napvi1y5uq/m-n-d-backtrace?dl=0

offtopic on Sadly, rootston doesn't compile here to verify the issue.

[rave@f32 rootston-run]$ ninja -C build
ninja: Entering directory `build'
[1/13] Compiling C object rootston.p/layer_shell.c.o
FAILED: rootston.p/layer_shell.c.o 
cc -Irootston.p -I. -I.. -I../include -Isubprojects/wlroots -I../subprojects/wlroots -Isubprojects/wlroots/include -I../subprojects/wlroots/include -Iprotocol -I/usr/include/libdrm -I/usr/include/pixman-1 -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -Werror -std=c11 -g -DWLR_USE_UNSTABLE -Wundef -Wlogical-op -Wmissing-include-dirs -Wold-style-definition -Wpointer-arith -Winit-self -Wstrict-prototypes -Wimplicit-fallthrough=2 -Wendif-labels -Wstrict-aliasing=2 -Woverflow -Wno-missing-braces -Wno-missing-field-initializers -Wno-unused-parameter -MD -MQ rootston.p/layer_shell.c.o -MF rootston.p/layer_shell.c.o.d -o rootston.p/layer_shell.c.o -c ../layer_shell.c
In file included from ../layer_shell.c:14:
../layer_shell.c: In function 'handle_layer_shell_surface':
../layer_shell.c:438:42: error: 'struct wlr_layer_surface_v1' has no member named 'layer'
  438 |   layer_surface->namespace, layer_surface->layer, layer_surface->layer,
      |                                          ^~
../subprojects/wlroots/include/wlr/util/log.h:62:60: note: in definition of macro 'wlr_log'
   62 |  _wlr_log(verb, "[%s:%d] " fmt, _WLR_FILENAME, __LINE__, ##__VA_ARGS__)
      |                                                            ^~~~~~~~~~~
../layer_shell.c:438:64: error: 'struct wlr_layer_surface_v1' has no member named 'layer'
  438 |   layer_surface->namespace, layer_surface->layer, layer_surface->layer,
      |                                                                ^~
../subprojects/wlroots/include/wlr/util/log.h:62:60: note: in definition of macro 'wlr_log'
   62 |  _wlr_log(verb, "[%s:%d] " fmt, _WLR_FILENAME, __LINE__, ##__VA_ARGS__)
      |                                                            ^~~~~~~~~~~
../layer_shell.c:496:46: error: 'struct wlr_layer_surface_v1' has no member named 'layer'
  496 |  wl_list_insert(&output->layers[layer_surface->layer], &roots_surface->link);
      |                                              ^~
[2/13] Compiling C object rootston.p/render.c.o
FAILED: rootston.p/render.c.o 
cc -Irootston.p -I. -I.. -I../include -Isubprojects/wlroots -I../subprojects/wlroots -Isubprojects/wlroots/include -I../subprojects/wlroots/include -Iprotocol -I/usr/include/libdrm -I/usr/include/pixman-1 -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -Werror -std=c11 -g -DWLR_USE_UNSTABLE -Wundef -Wlogical-op -Wmissing-include-dirs -Wold-style-definition -Wpointer-arith -Winit-self -Wstrict-prototypes -Wimplicit-fallthrough=2 -Wendif-labels -Wstrict-aliasing=2 -Woverflow -Wno-missing-braces -Wno-missing-field-initializers -Wno-unused-parameter -MD -MQ rootston.p/render.c.o -MF rootston.p/render.c.o.d -o rootston.p/render.c.o -c ../render.c
../render.c: In function 'scan_out_fullscreen_view':
../render.c:244:51: error: passing argument 2 of 'wlr_output_attach_buffer' from incompatible pointer type [-Werror=incompatible-pointer-types]
  244 |  if (!wlr_output_attach_buffer(wlr_output, surface->buffer)) {
      |                                            ~~~~~~~^~~~~~~~
      |                                                   |
      |                                                   struct wlr_client_buffer *
In file included from ../subprojects/wlroots/include/wlr/types/wlr_surface.h:18,
                 from ../include/layers.h:5,
                 from ../render.c:13:
../subprojects/wlroots/include/wlr/types/wlr_output.h:332:21: note: expected 'struct wlr_buffer *' but argument is of type 'struct wlr_client_buffer *'
  332 |  struct wlr_buffer *buffer);
      |  ~~~~~~~~~~~~~~~~~~~^~~~~~
../render.c:244:6: error: invalid use of void expression
  244 |  if (!wlr_output_attach_buffer(wlr_output, surface->buffer)) {
      |      ^
cc1: all warnings being treated as errors
[3/13] Compiling C object rootston.p/output.c.o
FAILED: rootston.p/output.c.o 
cc -Irootston.p -I. -I.. -I../include -Isubprojects/wlroots -I../subprojects/wlroots -Isubprojects/wlroots/include -I../subprojects/wlroots/include -Iprotocol -I/usr/include/libdrm -I/usr/include/pixman-1 -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -Werror -std=c11 -g -DWLR_USE_UNSTABLE -Wundef -Wlogical-op -Wmissing-include-dirs -Wold-style-definition -Wpointer-arith -Winit-self -Wstrict-prototypes -Wimplicit-fallthrough=2 -Wendif-labels -Wstrict-aliasing=2 -Woverflow -Wno-missing-braces -Wno-missing-field-initializers -Wno-unused-parameter -MD -MQ rootston.p/output.c.o -MF rootston.p/output.c.o.d -o rootston.p/output.c.o -c ../output.c
../output.c: In function 'handle_output_manager_apply':
../output.c:473:10: error: void value not ignored as it ought to be
  473 |    ok &= wlr_output_enable(wlr_output, false);
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../output.c:484:9: error: void value not ignored as it ought to be
  484 |   ok &= wlr_output_enable(wlr_output, true);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../output.c:486:10: error: void value not ignored as it ought to be
  486 |    ok &= wlr_output_set_mode(wlr_output, config_head->state.mode);
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../output.c:488:10: error: void value not ignored as it ought to be
  488 |    ok &= wlr_output_set_custom_mode(wlr_output,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  489 |     config_head->state.custom_mode.width,
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  490 |     config_head->state.custom_mode.height,
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  491 |     config_head->state.custom_mode.refresh);
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../output.c: In function 'surface_send_presented_iterator':
../output.c:578:2: error: implicit declaration of function 'wlr_presentation_send_surface_presented'; did you mean 'wlr_presentation_feedback_send_presented'? [-Werror=implicit-function-declaration]
  578 |  wlr_presentation_send_surface_presented(output->desktop->presentation,
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |  wlr_presentation_feedback_send_presented
cc1: all warnings being treated as errors
[5/13] Compiling C object rootston.p/seat.c.o
FAILED: rootston.p/seat.c.o 
cc -Irootston.p -I. -I.. -I../include -Isubprojects/wlroots -I../subprojects/wlroots -Isubprojects/wlroots/include -I../subprojects/wlroots/include -Iprotocol -I/usr/include/libdrm -I/usr/include/pixman-1 -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -Werror -std=c11 -g -DWLR_USE_UNSTABLE -Wundef -Wlogical-op -Wmissing-include-dirs -Wold-style-definition -Wpointer-arith -Winit-self -Wstrict-prototypes -Wimplicit-fallthrough=2 -Wendif-labels -Wstrict-aliasing=2 -Woverflow -Wno-missing-braces -Wno-missing-field-initializers -Wno-unused-parameter -MD -MQ rootston.p/seat.c.o -MF rootston.p/seat.c.o.d -o rootston.p/seat.c.o -c ../seat.c
../seat.c: In function 'roots_seat_set_focus_layer':
../seat.c:1465:11: error: 'struct wlr_layer_surface_v1' has no member named 'layer'
 1465 |  if (layer->layer >= ZWLR_LAYER_SHELL_V1_LAYER_TOP) {
      |           ^~
[6/13] Generating symbol file subprojects/wlroots/libwlroots.so.6.p/libwlroots.so.6.symbols
ninja: build stopped: subcommand failed.
wmww commented 3 years ago

IIRC rootston is deprecated or completely removed.

wmww commented 3 years ago

Hmm, that looks like a memory corruption error somewhere. I can't reproduce, and I'm not seeing anything but minor leaks in valgrind. Does it happen on startup, a notification or shutdown? If notification, what sort of notification? What theme are you using? Have you installed the applet you built?

If you didn't install it, it's using the daemon you built but the themes from your current install, which could explain this. You can configure with a --prefix so as not to replace your system installation. You might also be able to force it to use the correct theme libraries with LD_LIBRARY_PATH. (You likely already knew all that, but extra info never hurt)

raveit65 commented 3 years ago
  1. starting mate-notification-properties from terminal.
  2. Pressing the preview-button in that UI
  3. No notification will display and UI was freezed for a while.
  4. After that i found a coredump in fedora-bugreport-util (abrt) directory and i could generate a stacktace. I think it was nodoka.
    0x00007efd08556fd0  0x00007efd08559892  Yes (*)     /usr/lib64/mate-notification-daemon/engines/libnodoka.so

In general i don't see any notification with wayfire. Same with using notify-send "Hello World" I built m-n-d RPM like this.

# https://github.com/mate-desktop/mate-notification-daemon/pull/181
Patch1:         mate-notification-daemon_0001-Include-directory-in-warning-message-when-failed-to-.patch
Patch2:         mate-notification-daemon_0002-Support-enable-x11-and-enable-wayland.patch
Patch3:         mate-notification-daemon_0003-Use-gdk_set_allowed_backends.patch
Patch4:         mate-notification-daemon_0004-Remove-X11-calls-from-nodoka-theme.c.patch
Patch5:         mate-notification-daemon_0005-Hide-X11-specific-code-behind-ifdefs-and-checks.patch
Patch6:         mate-notification-daemon_0006-Add-initial-Wayland-backend.patch
Patch7:         mate-notification-daemon_0007-Implement-placement-on-Wayland.patch
Patch8:         mate-notification-daemon_0008-Set-layer-and-notificaiton.patch

<cut>
BuildRequires:  gtk-layer-shell-devel
<cut>

%build
%configure --disable-schemas-compile \
           --enable-x11 \
           --enable-wayland

No idea what goes wrong here, but i will try again today. How did you test notifications with wayland?

Btw. i found also a coredump of mirco from previous mate-panel PR and running Mir-compositor in VM in abrt directory,

IIRC rootston is deprecated or completely removed.

Ohh, then i can only test with wayfire in a VM for the moment.

raveit65 commented 3 years ago

If you didn't install it, it's using the daemon you built but the themes from your current install, which could explain this. You can configure with a --prefix so as not to replace your system installation. You might also be able to force it to use the correct theme libraries with LD_LIBRARY_PATH. (You likely already knew all that, but extra info never hurt)

Hmm, how should i test this PR without rebuilding and reinstalling?

Edit: As fedora package maintainer i use always a RPM to install with dnf from a local repository to test PRs.

raveit65 commented 3 years ago

RPM build log of m-n-d-1.25.0 + this PR. For me this looks OK. https://www.dropbox.com/s/l84ztvoqskbt7z7/m-n-d-build-log?dl=0

raveit65 commented 3 years ago

Same result today. I rebuild and reinstalled tha RPM again. I can't fire up any notification with mate-notification-properties or notify-send under wayland.

  1. First i got a coredump again.
  2. And with second try i got only a timeout warning from UI.

Tested with coco theme. Well, maybe it's a problem with wayfire, but how should i test PR without another working wayland-compositor in VM?

raveit65 commented 3 years ago

Now created a new account for testing all on baremetal.

Honestly, i have no idea any more how can i test your software.

raveit65 commented 3 years ago

I found an important hint in journal.

Okt 04 15:19:57 mother.mother.loc mate-notificati[13914]: gtk-layer-shell was not compiled with support for GTK v3.24.23, program may crash
Okt 04 15:19:57 mother.mother.loc mate-notificati[13914]: gtk-layer-shell was not compiled with support for GTK v3.24.23, program may crash

:/ Let see if rebuilding gtk-layer-shell helps....

Edit: Nope, rebuilding gtk-layer-shell from master and rebuilding m-n-d doesn't help. Mate-notification-daemon doesn't work for me with wayland. I am giving up...

rbuj commented 3 years ago

@raveit65 It's because of gtk version is checked at runtime, and it is not yet supported up to this commit: https://github.com/wmww/gtk-layer-shell/commit/34b1abe88bd7d90b4345c3232695538ddf63821d

wmww commented 3 years ago

Oof, sorry it's being so much trouble. There's a lot to unpack here.

First, thanks for the extra details on how you're testing. If you're building and installing the package, it should be using the newly built theme libraries (the issue I was talking about happens when you build in a directory, don't install and run the daemon then-and-there.)

I'm testing by running Sway and Mir on my laptop (directly or nested in another compositor, but not in a VM). I configure with ./autogen.sh --prefix ~/code/install/usr/local/ --enable-x11 --enable-wayland, I make and make install and then run ~/code/install/usr/local/libexec/mate-notification-daemon. After that notify-send and all the other things just work.

I still don't know what's up with the crashes, but they're unlikely to be caused by Wayfire. This PR works fine for me in both Mir and Sway, and the only direct Wayland interaction is via GTK and GTK Layer Shell (which have both been widely tested across compositors/distros). More likely I've introduced some normal bug that I'm not seeing for some reason or there's a problem with how you're building and installing.

I don't believe the mate-wayland snap includes support for NVIDIA proprietary drivers. It should just be a matter of adding the correct packages to the snap, I'll talk to the team about how I should go about that. Still shouldn't segfault though, so maybe there's some other problem. Definitely some kinks to work out, but we can look at that another day.

The GTK Layer Shell warnings are a red herring. GTK v3.24.23 didn't actually break anything I use, so GTK Layer Shell v0.3.0 (which doesn't explicitly support it and throws up those warnings) should still work fine. I'm going to improve that warning to link to relevant info and be less confusing.

wmww commented 3 years ago

I'm going to try running it in different ways on different distros to see if I can tease out the problem. I know you've already done a lot, but if you could run the program under Valgrind (valgrind /path/to/mate-notifications-daemon ) and then give me the output that would be big helpful. You can do that with Wayfire in a VM, or any other setup you have working. When I do this I only see some small leaks, but I'm guessing significant memory curruption is happening on your end and Valgrind should show it.

raveit65 commented 3 years ago

I am not familiar with running Valgrind. Does notifications work with using --prefix=/usr ? This is the main different to my standard installation. Edit: And does running mate-notification-properties works for you?

wmww commented 3 years ago

mate-notification-properties works for me. --prefix /usr should be fine.

EDIT: can you give me one of the crashing RPMs you've built so I can test it on a Fedora VM?

lukefromdc commented 3 years ago

Can this be effectively tested in a wayland session while the MATE x11 session is also running, or would notifications just get diverted to the X11 session's notification daemon? I don't have any support for snaps, flatpacks, etc installed and do all testing by direct installation. It gets time consuming if I have to trash my running session (with other tasks running) to test something

wmww commented 3 years ago

If you run it with --replace it should replace the running instance and intercept all notifications. Once you close it (or it hits the 30 second timeout with no activity) and you get another notification, dbus will spin up the default instance (presumably on X11 again).

lukefromdc commented 3 years ago

Thanks. I have been too busy this week to do much on this, but will try to get back to it

wmww commented 3 years ago

Cool, there's no particular rush. I changed the comment style, and I'm still unable to reproduce any crashes.

raveit65 commented 3 years ago

I tried to run mate-wayland snap on baremetal f31 with nouveau driver. It fails to load graphic driver when starting from lightdm or tty.

mate-wayland

[2020-10-21 22:31:42.973332] <information> mirserver: Starting
[2020-10-21 22:31:42.978326] < - debug - > mirserver: Using logind for session management
[2020-10-21 22:31:42.978460] <information> mircommon: Loading modules from: /snap/mate-wayland/276/usr/lib/x86_64-linux-gnu/mir/server-platform
[2020-10-21 22:31:42.978502] <information> mircommon: Loading module: /snap/mate-wayland/276/usr/lib/x86_64-linux-gnu/mir/server-platform/graphics-gbm-kms.so.18
[2020-10-21 22:31:42.978515] <information> mircommon: Loading module: /snap/mate-wayland/276/usr/lib/x86_64-linux-gnu/mir/server-platform/graphics-wayland.so.18
[2020-10-21 22:31:42.978523] <information> mircommon: Loading module: /snap/mate-wayland/276/usr/lib/x86_64-linux-gnu/mir/server-platform/server-x11.so.18
[2020-10-21 22:31:42.978530] <information> mircommon: Loading module: /snap/mate-wayland/276/usr/lib/x86_64-linux-gnu/mir/server-platform/input-evdev.so.7
[2020-10-21 22:31:42.979134] <information> gbm-kms: EGL platform does not support EGL_KHR_platform_gbm extension
MESA-LOADER: failed to open nouveau (search paths /snap/mate-wayland/276/usr/lib/x86_64-linux-gnu/dri)
failed to load driver: nouveau
MESA-LOADER: failed to open kms_swrast (search paths /snap/mate-wayland/276/usr/lib/x86_64-linux-gnu/dri)
failed to load driver: kms_swrast
MESA-LOADER: failed to open swrast (search paths /snap/mate-wayland/276/usr/lib/x86_64-linux-gnu/dri)
failed to load swrast driver
[2020-10-21 22:31:42.981321] <information> gbm-kms: Failed to create GBM device
[2020-10-21 22:31:42.981442] <information> mirserver: Found graphics driver: mir:gbm-kms (version 2.0.0) Support priority: 0
[2020-10-21 22:31:42.981454] <information> mirserver: Found graphics driver: mir:wayland (version 2.0.0) Support priority: 0
[2020-10-21 22:31:42.981468] <information> mirserver: Found graphics driver: mir:x11 (version 2.0.0) Support priority: 0
ERROR: /build/mate-wayland/parts/mir-git/src/src/server/graphics/default_configuration.cpp(136): Throw in function mir::DefaultServerConfiguration::the_graphics_platform()::<lambda()>
Dynamic exception type: boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<std::runtime_error> >
std::exception::what: Exception while creating graphics platform
ERROR: /build/mate-wayland/parts/mir-git/src/src/server/graphics/platform_probe.cpp(78): Throw in function std::shared_ptr<mir::SharedLibrary> mir::graphics::module_for_device(const std::vector<std::shared_ptr<mir::SharedLibrary> >&, const mir::options::ProgramOption&, const std::shared_ptr<mir::ConsoleServices>&)
Dynamic exception type: boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<std::runtime_error> >
std::exception::what: Failed to find platform for current system

sleeping
sleeping
ERROR: server failed to start

It looks like that search paths for nouveau, kms_swrast and swrast are wrong on a RPM based system which use /usr/lib64 as library path. But maybe i am wrong. You should know it better.

No idea how to confirm that notification-daemon works under wayland.....

wmww commented 3 years ago

Hmm, I'll look into that. You've been able to test my mate-panel PRs somehow, why can't you use the same method? This shouldn't have any more requirements that that. You can test on Sway, or whatever you have working. It works for me on Sway.

EDIT: If you did want to use Mir for some reason, you might have better luck with mir_demo_server from the mir-test-tools package, at least until I figure out what's wrong with the snap.

raveit65 commented 3 years ago

I never used sway What should i do?

Edit: I tried to use mate-wayland with Mir' because you said it is easy to use as snap on every distro.

why can't you use the same method?

Which same method? I don't use ubuntu :)

I hope you don't think that i am the problem......

wmww commented 3 years ago

No no, you're not the problem. It should be easy to use the snap on any distro, and hopefully I'll figure out those platform issues soon. Unfortunately the member of the team who's most likely to know this stuff is rather busy at the moment, so it's taking a while.

I just assumed you had some working Wayland compositor that supports layer shell, because it sounded like you were able to test my MATE Panel PRs on Wayland (ex: https://github.com/mate-desktop/mate-panel/pull/1148#issuecomment-710868498). This PR should be testable on any such compositor (mate-wayland snap, mir_demo_server, Sway, Wayfire, etc). Why is testing this harder than the panel?

raveit65 commented 3 years ago

I tried PR with wayfire first, but it doesn't work, only crashes of m-n-d in VM or baremetal. Than i tired mate-wayland , but that compositor doesn't run in VM, with nvidia driver and nouveau driver on my fedora system. Well, i will give mir_demo_server, from fedora repos a try when i find time again. And again, i have no idea to use sway. Not everyone knows how to use every kind of wayland software like you.

EDIT: Previous merged PR from today https://github.com/mate-desktop/mate-panel/pull/1148#issuecomment-710868498 did run out of box with wayfire.

wmww commented 3 years ago

The crashing is almost certainly unrelated to the compositor you're running on. If it's crashing on Wayfire, it will probably crash on Mir too. Can you give me the RPM or compiled binary you're seeing the crash on? I haven't been able to reproduce the crash, and I couldn't tell anything from the stack traces except that some memory was being corrupted somewhere.

EDIT: exact steps for how you're building and/or installing would also work. My plan is to set up a Fedora VM (what Fedora version are you using?) and reproduce what you're doing exactly. My guess is something is loading the wrong .so library or something, because on my machine there is no memory corruption at all.

raveit65 commented 3 years ago

Here is the RPM (SRPM,RPM,Debug-sources). https://www.dropbox.com/s/dto25c481cwr0ov/m-n-d-wayland.tar.xz?dl=0

raveit65 commented 3 years ago

I am building the RPM with the fedora mock build server (local).

  1. Building the SRPM from SPEC file mock -v -r fedora-32-x86_64-mate-1.26 --buildsrpm --spec /home/rave/rpmbuild/SPECS/Mate-1.26/mate-notification-daemon.spec --sources /home/rave/rpmbuild/SOURCES
  2. Building the RPMs from SRPM mock -v -r fedora-32-x86_64-mate-1.26 --rebuild /var/lib/mock/fedora-32-x86_64-mate-1.26/mate-notification-daemon-1.25.0-2.fc32.src.rpm

Mock is the underlying software for koji (the fedora build server) where we build all packages from fedora git sources. https://koji.fedoraproject.org/koji/ Using mock is the more advanced way to build a RPM. If you really are interested i can show the normal easy way to build a rpm.

I am using fedora 32. The mate-compiz spin for installation in VM you will find here. https://dl.fedoraproject.org/pub/fedora/linux/releases/32/Spins/x86_64/iso/ You can install the m-n-d RPM with sudo dnf install mate-notification-daemon-1.25.0-2.fc32.x86_64.rpm This will update the installed version of m-n-d.

Why there isn't no other team member who can confirm that this PR will work on wayland?

raveit65 commented 3 years ago

Starting with good news. The notifications are working with a x-embedded sway window :) Tested with an f31 installation on baremetal with nouveau driver. There is an lag with pressing the testing button of mate-notification-properties or you have to click 2 times. But i think this is more a problem with using nouveau driver and the resulting poor performance of sway.

Sadly i wasn't able to see a notification when starting sway from login manager for several reasons.

So , i can't confirm that the notification will work outside an x-embedded window.

[rave@mother ~]$ sway
2020-10-22 21:10:28 - [sway/main.c:99] Proprietary Nvidia drivers are NOT supported. Use Nouveau. To launch sway anyway, launch with --my-next-gpu-wont-be-nvidia and DO NOT report issues.
[rave@mother ~]$ 

Thank you, but no thanks, i will use X11 with nvidia gpu until x-server is EOL.

Please don't ask me again to use software from ignorant people ... What we need first is a working mate-wayland session for VMs to test more applications.

Btw. mir_demo_server from fedora repos is broken with nouveau driver. Edit: I don't think it is a problem with nouveau driver

wmww commented 3 years ago

i will use X11 with nvidia gpu until x-server is EOL.

That wont be necessary. Mir does support proprietary NVIDIA drivers, and we should have all the issues you've run into sorted out substantially before xorg is EOL.

What we need first is a working mate-wayland session for VMs to test more applications

I'm on it, but I don't know that much about mesa so who knows what the timeline will be.

Btw. mir_demo_server from fedora repos is broken with nouveau driver.

Ugh, why can't anything just work like it's supposed to? I'll forward that along to the people with the hardware and knowledge to fix it (though I doubt nouveau support will be a priority)

raveit65 commented 3 years ago

Btw., can you please take a look at this PR? https://github.com/mate-desktop/mate-system-monitor/pull/198 M-S-M is used as menu-entry in windows-list-applet.

wmww commented 3 years ago

Are the crashes raveit65 was seeing earlier still a mystery that needs to be solved? I can install a Fedora VM and try out that RPM as I had planned. Is it worth sinking time into that, or has that problem gone away?

raveit65 commented 3 years ago

No, they are happened when using wayfire as session in a VM. But i could reproduce them today again with wayfire as session on baremetal (fedora-rawhide + nouveau) Here the wayfire session is very fast but i don't see any notification, and it looks like that mate-notification-properties UI still freezes after pressing the show-notification-button. I have also a backtrace from mir_demo_server from fedora. Thinking about to file out a report at rhbz to inform maintainer.

raveit65 commented 3 years ago

@rbuj Any concern left or should we merge this?

raveit65 commented 3 years ago

Ok, code formating looks good, Let's merge the beast.

PS: it is also possible to edit commits instead of adding a new one for a fix. This looks much better in git log history.....