Commit ec68806354 ("xwayland: Honor size increments from
WM_SIZE_HINTS") adjusted only the window width/height according
to the size hints. If resizing from the top or left edge of the
window, we also need to adjust the window position to keep the
bottom or right edge from jumping around.
Handlers for the "destroy" signal need to unregister themselves from the
signal (using wl_list_remove()) before invoking free().
Invalid write of size 8
at 0x487DF27: wl_list_remove (in /usr/lib/libwayland-server.so.0.20.0)
by 0x4906FF0: wlr_signal_emit_safe (signal.c:32)
by 0x48EA304: reset_xdg_surface (wlr_xdg_surface.c:430)
by 0x48EA3D6: UnknownInlinedFun (wlr_xdg_surface.c:464)
by 0x48EA3D6: xdg_surface_handle_resource_destroy (wlr_xdg_surface.c:282)
by 0x4877899: ??? (in /usr/lib/libwayland-server.so.0.20.0)
by 0x487DEBF: ??? (in /usr/lib/libwayland-server.so.0.20.0)
by 0x487E3DF: ??? (in /usr/lib/libwayland-server.so.0.20.0)
by 0x487830D: wl_client_destroy (in /usr/lib/libwayland-server.so.0.20.0)
by 0x48783F6: ??? (in /usr/lib/libwayland-server.so.0.20.0)
by 0x487B1C9: wl_event_loop_dispatch (in /usr/lib/libwayland-server.so.0.20.0)
by 0x4878D36: wl_display_run (in /usr/lib/libwayland-server.so.0.20.0)
by 0x110DAC: main (main.c:81)
Address 0xc3213d8 is 424 bytes inside a block of size 704 free'd
at 0x484118B: free (vg_replace_malloc.c:755)
by 0x4906FDD: wlr_signal_emit_safe (signal.c:29)
by 0x48EA304: reset_xdg_surface (wlr_xdg_surface.c:430)
by 0x48EA3D6: UnknownInlinedFun (wlr_xdg_surface.c:464)
by 0x48EA3D6: xdg_surface_handle_resource_destroy (wlr_xdg_surface.c:282)
by 0x4877899: ??? (in /usr/lib/libwayland-server.so.0.20.0)
by 0x487DEBF: ??? (in /usr/lib/libwayland-server.so.0.20.0)
by 0x487E3DF: ??? (in /usr/lib/libwayland-server.so.0.20.0)
by 0x487830D: wl_client_destroy (in /usr/lib/libwayland-server.so.0.20.0)
by 0x48783F6: ??? (in /usr/lib/libwayland-server.so.0.20.0)
by 0x487B1C9: wl_event_loop_dispatch (in /usr/lib/libwayland-server.so.0.20.0)
by 0x4878D36: wl_display_run (in /usr/lib/libwayland-server.so.0.20.0)
by 0x110DAC: main (main.c:81)
Block was alloc'd at
at 0x48435FF: calloc (vg_replace_malloc.c:1117)
by 0x113E22: xdg_surface_new (xdg.c:401)
by 0x4906FDD: wlr_signal_emit_safe (signal.c:29)
by 0x48EABE7: handle_xdg_surface_commit (wlr_xdg_surface.c:331)
by 0x4908FE7: surface_commit_state (wlr_surface.c:457)
by 0x524DD49: ??? (in /usr/lib/libffi.so.8.1.0)
by 0x524D266: ??? (in /usr/lib/libffi.so.8.1.0)
by 0x487D322: ??? (in /usr/lib/libwayland-server.so.0.20.0)
by 0x48785CB: ??? (in /usr/lib/libwayland-server.so.0.20.0)
by 0x487B1C9: wl_event_loop_dispatch (in /usr/lib/libwayland-server.so.0.20.0)
by 0x4878D36: wl_display_run (in /usr/lib/libwayland-server.so.0.20.0)
by 0x110DAC: main (main.c:81)
Invalid write of size 8
at 0x487DF27: wl_list_remove (in /usr/lib/libwayland-server.so.0.20.0)
by 0x4906FF0: wlr_signal_emit_safe (signal.c:32)
by 0x48F5529: UnknownInlinedFun (wlr_input_device.c:34)
by 0x48F5529: wlr_input_device_destroy (wlr_input_device.c:29)
by 0x48CE4B5: backend_destroy.part.0.lto_priv.0 (backend.c:148)
by 0x48D2D55: multi_backend_destroy (backend.c:59)
by 0x48788FE: wl_display_destroy (in /usr/lib/libwayland-server.so.0.20.0)
by 0x110E71: UnknownInlinedFun (server.c:406)
by 0x110E71: main (main.c:83)
Address 0xc466568 is 24 bytes inside a block of size 56 free'd
at 0x484118B: free (vg_replace_malloc.c:755)
by 0x4906FDD: wlr_signal_emit_safe (signal.c:29)
by 0x48F5529: UnknownInlinedFun (wlr_input_device.c:34)
by 0x48F5529: wlr_input_device_destroy (wlr_input_device.c:29)
by 0x48CE4B5: backend_destroy.part.0.lto_priv.0 (backend.c:148)
by 0x48D2D55: multi_backend_destroy (backend.c:59)
by 0x48788FE: wl_display_destroy (in /usr/lib/libwayland-server.so.0.20.0)
by 0x110E71: UnknownInlinedFun (server.c:406)
by 0x110E71: main (main.c:83)
Block was alloc'd at
at 0x48435FF: calloc (vg_replace_malloc.c:1117)
by 0x11590F: new_input_notify (seat.c:137)
by 0x4906FDD: wlr_signal_emit_safe (signal.c:29)
by 0x4906FDD: wlr_signal_emit_safe (signal.c:29)
by 0x48CDCEE: UnknownInlinedFun (events.c:109)
by 0x48CDCEE: UnknownInlinedFun (events.c:242)
by 0x48CDCEE: UnknownInlinedFun (backend.c:58)
by 0x48CDCEE: handle_libinput_readable (backend.c:48)
by 0x48CE1BE: backend_start.lto_priv.0 (backend.c:114)
by 0x48D2CE5: multi_backend_start (backend.c:33)
by 0x110C45: UnknownInlinedFun (server.c:375)
by 0x110C45: main (main.c:68)
e.g., open an editor from a terminal, minimize it, then hit ^C in the terminal
simply don't unmap xdg or xwayland views if they are not currently marked as mapped
When a window title changed dynamically (for example when running
"cd" within an xfce4-terminal), the titlebar did not immediately
update to show the new title. (The titlebar would update as soon
as the mouse cursor moved.)
...and replace with a local MAX macro, because:
- They contain a ({}) construct which is a GNU extension and that's
against Drew's coding style
- min() is not used anyway
- MAX() clashes with cairo's macro, so best to not add this in labwc.h
Split desktop_focus_view() into the following two functions:
- desktop_focus_and_activate_view()
- desktop_raise_view()
Always call view_set_activated() rather than using the private
set_activated(). This keeps the code cleaner and ensures
wlr_foreign_toplevel_handle_v1_set_activated() is called.
...and take into account output layout co-ordinates.
Previously xdg-shell views were just positioned at (0, 0) on first map
regardless of output co-ordinates.
Fix issue #39
src/xdg.c:269:48: error: no member named 'subsurfaces' in 'struct wlr_surface'
wl_list_for_each(subsurface, &view->surface->subsurfaces,
~~~~~~~~~~~~~ ^
/usr/include/wayland-util.h:443:30: note: expanded from macro 'wl_list_for_each'
for (pos = wl_container_of((head)->next, pos, member); \
^~~~
/usr/include/wayland-util.h:409:32: note: expanded from macro 'wl_container_of'
(__typeof__(sample))((char *)(ptr) - \
^~~
Based on 3162766eef
Some xdg-shell applications remember the (un)maximized states when last
closed. We could honour this state, but it makes the code cumbersome
regarding padding and position. Prefer to keep it simple.
src/xdg.c:180:2: warning: implicit declaration of function 'wlr_xdg_surface_for_each_popup' is invalid in C99 [-Wimplicit-function-declaration]
wlr_xdg_surface_for_each_popup(view->xdg_surface, iterator, data);
^
ld: error: undefined symbol: wlr_xdg_surface_for_each_popup
>>> referenced by xdg.c:180 (src/xdg.c:180)
>>> labwc.p/src_xdg.c.o:(xdg_toplevel_view_for_each_popup)
Based on 5438cc158a