Smithay / wayland-window

A simple window-decorations library built on top of wayland-client.
MIT License
18 stars 11 forks source link

Integrate xdg_shell #17

Closed mitchmindtree closed 7 years ago

mitchmindtree commented 7 years ago

So far this commit mostly attempts to replace wl_shell with xdg_shell in order to simplify integration of xdg_shell for myself. The plan is to re-integrate support for wl_shell and move all xdg_shell functionality behind a (defaulted) feature gate in a future commit to allow for backward-compatibility with wl_shell.

Several xdg_surface methods have not yet been exposed in the DecoratedSurface API including set_api_id, minimize, etc.

@vberger Although this commit replaces usage of wl_shell with xdg_shell in the example, I'm finding that I still have the exact same problems that I had before mentioned in #16 - configure is still not being called by the mutter (v3.22.3) compositor during resizing or moving, even though it seems to work perfectly fine on weston (v2.0.0). This makes me wonder if the issue is perhaps not related to xdg_shell, and perhaps some other difference between the mutter and weston compositors? On the other hand, maybe I just haven't integrated xdg_shell properly?

I decided to run the example on both mutter and wayland to compare the output of WAYLAND_DEBUG=1 to see if I could spot any differences. I found only two:

The first difference was the very start of the log where globals are registered:

weston

[3812751.543] wl_registry@2.global(1, "wl_compositor", 4)
[3812751.554] wl_registry@2.global(2, "wl_subcompositor", 1)
[3812751.561] wl_registry@2.global(3, "wp_viewporter", 1)
[3812751.568] wl_registry@2.global(4, "wp_presentation", 1)
[3812751.584] wl_registry@2.global(5, "zwp_relative_pointer_manager_v1", 1)
[3812751.593] wl_registry@2.global(6, "zwp_pointer_constraints_v1", 1)
[3812751.602] wl_registry@2.global(7, "wl_data_device_manager", 3)
[3812751.612] wl_registry@2.global(8, "wl_shm", 1)
[3812751.623] wl_registry@2.global(9, "wl_seat", 5)
[3812751.637] wl_registry@2.global(10, "wl_drm", 2)
[3812751.647] wl_registry@2.global(11, "zwp_linux_dmabuf_v1", 1)
[3812751.658] wl_registry@2.global(12, "wl_output", 3)
[3812751.668] wl_registry@2.global(13, "zwp_input_panel_v1", 1)
[3812751.679] wl_registry@2.global(14, "zwp_input_method_v1", 1)
[3812751.691] wl_registry@2.global(15, "zwp_text_input_manager_v1", 1)
[3812751.702] wl_registry@2.global(16, "zxdg_shell_v6", 1)
[3812751.714]  -> wl_registry@2.bind(1, "wl_compositor", 4, new id [unknown]@4)
[3812751.749]  -> wl_registry@2.bind(2, "wl_subcompositor", 1, new id [unknown]@5)
[3812751.762]  -> wl_registry@2.bind(8, "wl_shm", 1, new id [unknown]@6)
[3812751.771]  -> wl_registry@2.bind(16, "zxdg_shell_v6", 1, new id [unknown]@7)
[3812751.798] wl_registry@2.global(17, "xdg_shell", 1)
[3812751.805] wl_registry@2.global(18, "wl_shell", 1)
[3812751.811] wl_registry@2.global(19, "weston_desktop_shell", 1)
[3812751.818] wl_registry@2.global(20, "weston_screenshooter", 1)

mutter

[2095686.583] wl_registry@2.global(1, "wl_drm", 2)
[2095686.598] wl_registry@2.global(2, "wl_compositor", 3)
[2095686.606] wl_registry@2.global(3, "wl_shm", 1)
[2095686.616] wl_registry@2.global(5, "wl_output", 2)
[2095686.640] wl_registry@2.global(6, "wl_data_device_manager", 3)
[2095686.652] wl_registry@2.global(7, "gtk_primary_selection_device_manager", 1)
[2095686.662] wl_registry@2.global(8, "zxdg_shell_v6", 1)
[2095686.675] wl_registry@2.global(9, "wl_shell", 1)
[2095686.687] wl_registry@2.global(10, "gtk_shell1", 1)
[2095686.699] wl_registry@2.global(11, "wl_subcompositor", 1)
[2095686.715]  -> wl_registry@2.bind(2, "wl_compositor", 3, new id [unknown]@4)
[2095686.728]  -> wl_registry@2.bind(11, "wl_subcompositor", 1, new id [unknown]@5)
[2095686.746]  -> wl_registry@2.bind(3, "wl_shm", 1, new id [unknown]@6)
[2095686.758]  -> wl_registry@2.bind(8, "zxdg_shell_v6", 1, new id [unknown]@7)
[2095686.774] wl_registry@2.global(12, "zwp_pointer_gestures_v1", 1)
[2095686.784] wl_registry@2.global(13, "zwp_tablet_manager_v2", 1)
[2095686.792] wl_registry@2.global(14, "wl_seat", 5)
[2095686.800] wl_registry@2.global(15, "zwp_relative_pointer_manager_v1", 1)
[2095686.810] wl_registry@2.global(16, "zwp_pointer_constraints_v1", 1)
[2095686.819] wl_registry@2.global(17, "zxdg_exporter_v1", 1)
[2095686.826] wl_registry@2.global(18, "zxdg_importer_v1", 1)

The main difference I noticed between these two (besides the ordering which I assume does not matter) is that weston registers a "xdg_shell", "weston_desktop_shell" and "weston_screenshooter" globals whereas mutter does not, but does register a "gtk_shell1" global. Does it seem strange to you that the mutter compositor does not register "xdg_shell" like weston does?

The second and only other difference I noticed (besides configure not being called during resize) was that weston used the surface.damage_buffer method to indicate surface damage when the ThemedPointer hovered over the resizable edge, whereas mutter used the surface.damage method. I found the related code here. This seems to indicate that mutter uses a pre-4 version of surface. Could this be related?

mitchmindtree commented 7 years ago

Seeing as the example works fine on weston but not on mutter, I've posted the issue to the gnome bugtracker here.

One person on the wayland IRC yesterday mentioned that the problem might be due to invalid input and as a result mutter refuses to create conigure events. They mentioned that it's quite possible that the reason it works on weston and not on mutter is that it is likely that weston has a bug in its input validation. @vberger does this sound like it might be possible? Where should I look in the codebase to verify the input handling?

elinorbgr commented 7 years ago

It's difficult to say, what kind of "invalid input" would they be mentioning?

elinorbgr commented 7 years ago

Regarding this PR, and the integration of wdg_shell into wayland-window:

First of all, thanks a lot for starting to tackle this ! šŸ˜„

Now, the way I was thinking to organize this:

elinorbgr commented 7 years ago

Also, regarding the globals advertized:

elinorbgr commented 7 years ago

Oh, okay, I checked the IRC logs about this input validation, and the serial things. That could have been a cause for trouble indeed...

However, it looks like we are indeed sending the proper values, given your logs :

[814139.649] wl_pointer@21.button(20109, 10070859, 272, 1)
[814139.727]  -> wl_shell_surface@20.resize(wl_seat@10, 20109, 8)

here the serial (20109) is correctly the same...

Could you generate a wayland trace from a simple program that resizes / moves correctly in mutter, so that we could compare ? (maybe one of the weston sample apps?)

mitchmindtree commented 7 years ago

First of all, thanks a lot for starting to tackle this ! šŸ˜„

No problem at all! Thanks for the library and for taking your time to help debug this with me - much appreciated!

Now, the way I was thinking to organize this...

Agreed, this all sounds good to me :+1:

Could you generate a wayland trace from a simple program that resizes / moves correctly in mutter, so that we could compare ? (maybe one of the weston sample apps?)

Sure thing!

Resize

screenshot from 2017-04-28 17-58-51

The following is the output of the WAYLAND_DEBUG=1 weston-eventdemo app where I

[3937602.171]  -> wl_display@1.get_registry(new id wl_registry@2)
[3937602.347]  -> wl_display@1.sync(new id wl_callback@3)
[3937602.567] wl_display@1.delete_id(3)
[3937602.607] wl_registry@2.global(1, "wl_drm", 2)
[3937602.653] wl_registry@2.global(2, "wl_compositor", 3)
[3937602.688]  -> wl_registry@2.bind(2, "wl_compositor", 3, new id [unknown]@4)
[3937602.743] wl_registry@2.global(3, "wl_shm", 1)
[3937602.776]  -> wl_registry@2.bind(3, "wl_shm", 1, new id [unknown]@5)
[3937602.818] wl_registry@2.global(5, "wl_output", 2)
[3937602.850]  -> wl_registry@2.bind(5, "wl_output", 2, new id [unknown]@6)
[3937602.895] wl_registry@2.global(6, "wl_data_device_manager", 3)
[3937602.926]  -> wl_registry@2.bind(6, "wl_data_device_manager", 3, new id [unknown]@7)
[3937602.968] wl_registry@2.global(7, "gtk_primary_selection_device_manager", 1)
[3937603.002] wl_registry@2.global(8, "zxdg_shell_v6", 1)
[3937603.033]  -> wl_registry@2.bind(8, "zxdg_shell_v6", 1, new id [unknown]@8)
[3937603.075] wl_registry@2.global(9, "wl_shell", 1)
[3937603.106] wl_registry@2.global(10, "gtk_shell1", 1)
[3937603.140] wl_registry@2.global(11, "wl_subcompositor", 1)
[3937603.171]  -> wl_registry@2.bind(11, "wl_subcompositor", 1, new id [unknown]@9)
[3937603.212] wl_registry@2.global(12, "zwp_pointer_gestures_v1", 1)
[3937603.246] wl_registry@2.global(13, "zwp_tablet_manager_v2", 1)
[3937603.277] wl_registry@2.global(14, "wl_seat", 5)
[3937603.308]  -> wl_registry@2.bind(14, "wl_seat", 5, new id [unknown]@10)
[3937603.352]  -> wl_data_device_manager@7.get_data_device(new id wl_data_device@11, wl_seat@10)
[3937603.383]  -> wl_compositor@4.create_surface(new id wl_surface@12)
[3937603.415] wl_registry@2.global(15, "zwp_relative_pointer_manager_v1", 1)
[3937603.448]  -> wl_registry@2.bind(15, "zwp_relative_pointer_manager_v1", 1, new id [unknown]@13)
[3937603.493] wl_registry@2.global(16, "zwp_pointer_constraints_v1", 1)
[3937603.525]  -> wl_registry@2.bind(16, "zwp_pointer_constraints_v1", 1, new id [unknown]@14)
[3937603.566] wl_registry@2.global(17, "zxdg_exporter_v1", 1)
[3937603.596] wl_registry@2.global(18, "zxdg_importer_v1", 1)
[3937603.630] wl_callback@3.done(300955)
[3937603.787]  -> wl_shm@5.create_pool(new id wl_shm_pool@3, fd 8, 4096)
[3937604.308]  -> wl_shm_pool@3.resize(12288)
[3937604.526]  -> wl_shm_pool@3.resize(28672)
[3937604.978]  -> wl_shm_pool@3.resize(61440)
[3937605.790]  -> wl_shm_pool@3.resize(126976)
[3937611.229]  -> wl_shm_pool@3.resize(258048)
[3937611.590]  -> wl_shm_pool@3.resize(520192)
[3937622.655]  -> wl_shm_pool@3.resize(1044480)
[3937626.101]  -> wl_shm_pool@3.resize(2093056)
[3937654.634]  -> wl_compositor@4.create_surface(new id wl_surface@15)
[3937654.665]  -> zxdg_shell_v6@8.get_xdg_surface(new id zxdg_surface_v6@16, wl_surface@15)
[3937654.673]  -> zxdg_surface_v6@16.get_toplevel(new id zxdg_toplevel_v6@17)
[3937654.680]  -> wl_surface@15.commit()
[3937654.823]  -> zxdg_toplevel_v6@17.set_title("EventDemo")
[3937735.107] wl_shm@5.format(0)
[3937735.153] wl_shm@5.format(1)
[3937735.159] wl_output@6.geometry(0, 0, 280, 160, 0, "SHP", "0x144d", 0)
[3937735.196] wl_output@6.mode(3, 3840, 2160, 59997)
[3937735.209] wl_output@6.scale(2)
[3937735.215] wl_output@6.done()
[3937735.219] wl_seat@10.capabilities(7)
[3937735.226]  -> wl_seat@10.get_pointer(new id wl_pointer@18)
[3937735.234]  -> wl_seat@10.get_keyboard(new id wl_keyboard@19)
[3937735.242]  -> wl_seat@10.get_touch(new id wl_touch@20)
[3937735.249] wl_seat@10.name("seat0")
[3937735.256] zxdg_toplevel_v6@17.configure(0, 0, array)
[3937735.269] zxdg_surface_v6@16.configure(300956)
[3937735.277]  -> zxdg_surface_v6@16.ack_configure(300956)
[3937735.285]  -> wl_compositor@4.create_region(new id wl_region@21)
[3937735.299]  -> wl_compositor@4.create_region(new id wl_region@22)
[3937735.307]  -> wl_region@22.add(32, 32, 436, 336)
[3937735.470]  -> wl_shm@5.create_pool(new id wl_shm_pool@23, fd 9, 800000)
[3937735.506]  -> wl_shm_pool@23.create_buffer(new id wl_buffer@24, 0, 500, 400, 2000, 0)
[3937735.530]  -> wl_surface@15.frame(new id wl_callback@25)
[3937741.572]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 436, 336)
[3937741.632]  -> wl_surface@15.set_opaque_region(wl_region@21)
[3937741.637]  -> wl_region@21.destroy()
[3937741.643]  -> wl_surface@15.set_input_region(wl_region@22)
[3937741.647]  -> wl_region@22.destroy()
[3937741.650]  -> wl_surface@15.attach(wl_buffer@24, 0, 0)
[3937741.659]  -> wl_surface@15.damage(0, 0, 500, 400)
[3937741.668]  -> wl_surface@15.commit()
[3937745.730] wl_display@1.delete_id(21)
[3937745.787] wl_display@1.delete_id(22)
[3937745.792] wl_keyboard@19.keymap(1, fd 8, 51740)
[3937752.189] wl_keyboard@19.repeat_info(33, 500)
[3937752.232] wl_buffer@24.release()
[3937766.073] zxdg_toplevel_v6@17.configure(436, 336, array)
[3937766.111] zxdg_surface_v6@16.configure(300959)
[3937766.118]  -> zxdg_surface_v6@16.ack_configure(300959)
[3937766.124] wl_keyboard@19.modifiers(300961, 0, 0, 0, 0)
[3937766.147] wl_keyboard@19.enter(300961, wl_surface@15, array)
[3937766.161] wl_data_device@11.data_offer(new id wl_data_offer@22186144)
[3937766.171] wl_data_offer@4278190080.offer("TARGETS")
[3937766.179] wl_data_offer@4278190080.offer("_VIMENC_TEXT")
[3937766.185] wl_data_offer@4278190080.offer("_VIM_TEXT")
[3937766.191] wl_data_offer@4278190080.offer("text/plain;charset=utf-8")
[3937766.198] wl_data_offer@4278190080.offer("UTF8_STRING")
[3937766.207] wl_data_offer@4278190080.offer("STRING")
[3937766.215] wl_data_offer@4278190080.offer("TEXT")
[3937766.229] wl_data_offer@4278190080.offer("COMPOUND_TEXT")
[3937766.235] wl_data_device@11.selection(wl_data_offer@4278190080)
[3937805.786] wl_display@1.delete_id(25)
[3937805.850] wl_surface@15.enter(wl_output@6)
[3937805.860] wl_callback@25.done(290279004)
[3937805.872]  -> wl_compositor@4.create_region(new id wl_region@25)
[3937805.888]  -> wl_compositor@4.create_region(new id wl_region@22)
[3937805.897]  -> wl_region@22.add(32, 32, 436, 336)
[3937805.913]  -> wl_surface@15.frame(new id wl_callback@21)
[3937806.818]  -> wl_surface@15.set_opaque_region(wl_region@25)
[3937806.851]  -> wl_region@25.destroy()
[3937806.856]  -> wl_surface@15.set_input_region(wl_region@22)
[3937806.860]  -> wl_region@22.destroy()
[3937806.864]  -> wl_surface@15.attach(wl_buffer@24, 0, 0)
[3937806.872]  -> wl_surface@15.damage(0, 0, 500, 400)
[3937806.882]  -> wl_surface@15.commit()
[3937821.606] wl_display@1.delete_id(25)
[3937821.687] wl_display@1.delete_id(22)
[3937821.697] wl_display@1.delete_id(21)
[3937821.703] wl_buffer@24.release()
[3937821.707] wl_callback@21.done(290279019)
[3949066.774] wl_pointer@18.enter(300963, wl_surface@15, 467.976562, 211.320312)
[3949066.965]  -> wl_shm_pool@3.create_buffer(new id wl_buffer@21, 806912, 32, 32, 128, 0)
[3949067.083]  -> wl_surface@12.attach(wl_buffer@21, 0, 0)
[3949067.135]  -> wl_surface@12.damage(0, 0, 32, 32)
[3949067.204]  -> wl_surface@12.commit()
[3949067.226]  -> wl_pointer@18.set_cursor(300963, wl_surface@12, 25, 17)
[3949067.321] wl_pointer@18.frame()
[3949067.343] wl_pointer@18.motion(290290258, 467.976562, 211.320312)
[3949067.394] wl_pointer@18.frame()
[3949104.391] wl_pointer@18.motion(290290289, 467.804688, 211.320312)
[3949104.556] wl_pointer@18.frame()
[3949120.225] wl_pointer@18.motion(290290304, 467.644531, 211.320312)
[3949120.324] wl_pointer@18.frame()
[3949137.048] wl_pointer@18.motion(290290319, 467.488281, 211.320312)
[3949137.134] wl_pointer@18.frame()
[3949153.602] wl_pointer@18.motion(290290335, 467.335938, 211.320312)
[3949153.688] wl_pointer@18.frame()
[3949193.533] wl_pointer@18.motion(290290389, 467.195312, 211.320312)
[3949193.643] wl_pointer@18.frame()
[3949209.947] wl_pointer@18.motion(290290404, 466.921875, 211.320312)
[3949210.028] wl_pointer@18.frame()
[3949247.318] wl_pointer@18.motion(290290443, 466.789062, 211.320312)
[3949247.399] wl_pointer@18.frame()
[3949262.856] wl_pointer@18.motion(290290450, 466.660156, 211.320312)
[3949262.929] wl_pointer@18.frame()
[3949278.719] wl_pointer@18.motion(290290473, 466.402344, 211.320312)
[3949278.809] wl_pointer@18.frame()
[3949347.584] wl_pointer@18.motion(290290543, 466.281250, 211.320312)
[3949347.672] wl_pointer@18.frame()
[3949884.249] wl_pointer@18.motion(290291081, 466.171875, 211.320312)
[3949884.286] wl_pointer@18.frame()

This is where I press the left mouse button on the right frame in order to begin dragging it to the right:

[3949937.319] wl_pointer@18.button(300964, 290291135, 272, 1)
[3949937.360]  -> zxdg_toplevel_v6@17.resize(wl_seat@10, 300964, 8)
[3949937.375] wl_pointer@18.frame()
[3949938.478] wl_keyboard@19.leave(300965, wl_surface@15)
[3949938.509] wl_pointer@18.leave(300966, wl_surface@15)
[3949938.519] wl_pointer@18.frame()
[3949938.523] zxdg_toplevel_v6@17.configure(436, 336, array)
[3949938.534] zxdg_surface_v6@16.configure(300967)
[3949938.540]  -> zxdg_surface_v6@16.ack_configure(300967)
[3949938.548]  -> wl_compositor@4.create_region(new id wl_region@22)
[3949938.557]  -> wl_compositor@4.create_region(new id wl_region@25)
[3949938.564]  -> wl_region@25.add(32, 32, 436, 336)
[3949938.581]  -> wl_surface@15.frame(new id wl_callback@26)
[3949939.229]  -> wl_surface@15.set_opaque_region(wl_region@22)
[3949939.245]  -> wl_region@22.destroy()
[3949939.248]  -> wl_surface@15.set_input_region(wl_region@25)
[3949939.252]  -> wl_region@25.destroy()
[3949939.256]  -> wl_surface@15.attach(wl_buffer@24, 0, 0)
[3949939.264]  -> wl_surface@15.damage(0, 0, 500, 400)
[3949939.274]  -> wl_surface@15.commit()
[3949954.187] wl_display@1.delete_id(22)
[3949954.209] wl_display@1.delete_id(25)
[3949954.214] wl_display@1.delete_id(26)
[3949954.219] wl_buffer@24.release()
[3949954.222] wl_callback@26.done(290291152)
[3950977.032] zxdg_toplevel_v6@17.configure(436, 336, array)
[3950977.073] zxdg_surface_v6@16.configure(300968)
[3950977.080]  -> zxdg_surface_v6@16.ack_configure(300968)
[3950977.089]  -> wl_compositor@4.create_region(new id wl_region@26)
[3950977.098]  -> wl_compositor@4.create_region(new id wl_region@25)
[3950977.105]  -> wl_region@25.add(32, 32, 436, 336)
[3950977.120]  -> wl_surface@15.frame(new id wl_callback@22)
[3950977.922]  -> wl_surface@15.set_opaque_region(wl_region@26)
[3950977.932]  -> wl_region@26.destroy()
[3950977.936]  -> wl_surface@15.set_input_region(wl_region@25)
[3950977.945]  -> wl_region@25.destroy()
[3950977.948]  -> wl_surface@15.attach(wl_buffer@24, 0, 0)
[3950977.956]  -> wl_surface@15.damage(0, 0, 500, 400)
[3950977.966]  -> wl_surface@15.commit()
[3950995.018] wl_display@1.delete_id(26)
[3950995.050] wl_display@1.delete_id(25)
[3950995.056] wl_display@1.delete_id(22)
[3950995.061] wl_buffer@24.release()
[3950995.067] zxdg_toplevel_v6@17.configure(437, 336, array)
[3950995.080] zxdg_surface_v6@16.configure(300969)
[3950995.086]  -> zxdg_surface_v6@16.ack_configure(300969)
[3950995.112] wl_callback@22.done(290292193)
[3950995.140]  -> wl_compositor@4.create_region(new id wl_region@22)
[3950995.149]  -> wl_compositor@4.create_region(new id wl_region@25)
[3950995.156]  -> wl_region@25.add(32, 32, 437, 336)
[3950995.173]  -> wl_buffer@24.destroy()
[3950995.232]  -> wl_shm_pool@23.destroy()
[3950996.390]  -> wl_shm@5.create_pool(new id wl_shm_pool@26, fd 9, 6291456)
[3950996.427]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@27, 0, 501, 400, 2004, 0)
[3950996.449]  -> wl_surface@15.frame(new id wl_callback@28)
[3950997.374]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 437, 336)
[3950997.406]  -> wl_surface@15.set_opaque_region(wl_region@22)
[3950997.413]  -> wl_region@22.destroy()
[3950997.418]  -> wl_surface@15.set_input_region(wl_region@25)
[3950997.424]  -> wl_region@25.destroy()
[3950997.428]  -> wl_surface@15.attach(wl_buffer@27, 0, 0)
[3950997.441]  -> wl_surface@15.damage(0, 0, 501, 400)
[3950997.455]  -> wl_surface@15.commit()
[3951015.593] wl_display@1.delete_id(24)
[3951015.689] wl_display@1.delete_id(23)
[3951015.701] wl_display@1.delete_id(22)
[3951015.711] wl_display@1.delete_id(25)
[3951015.722] wl_display@1.delete_id(28)
[3951015.732] wl_buffer@27.release()
[3951015.741] zxdg_toplevel_v6@17.configure(437, 336, array)
[3951015.764] zxdg_surface_v6@16.configure(300970)
[3951015.776]  -> zxdg_surface_v6@16.ack_configure(300970)
[3951015.789] wl_callback@28.done(290292213)
[3951015.801]  -> wl_compositor@4.create_region(new id wl_region@28)
[3951015.820]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951015.859]  -> wl_region@25.add(32, 32, 437, 336)
[3951015.903]  -> wl_surface@15.frame(new id wl_callback@22)
[3951017.477]  -> wl_surface@15.set_opaque_region(wl_region@28)
[3951017.544]  -> wl_region@28.destroy()
[3951017.552]  -> wl_surface@15.set_input_region(wl_region@25)
[3951017.562]  -> wl_region@25.destroy()
[3951017.570]  -> wl_surface@15.attach(wl_buffer@27, 0, 0)
[3951017.591]  -> wl_surface@15.damage(0, 0, 501, 400)
[3951017.616]  -> wl_surface@15.commit()
[3951038.373] wl_display@1.delete_id(28)
[3951038.503] wl_display@1.delete_id(25)
[3951038.519] wl_display@1.delete_id(22)
[3951038.532] wl_buffer@27.release()
[3951038.545] zxdg_toplevel_v6@17.configure(438, 336, array)
[3951038.579] zxdg_surface_v6@16.configure(300971)
[3951038.598]  -> zxdg_surface_v6@16.ack_configure(300971)
[3951038.618] wl_callback@22.done(290292236)
[3951038.638]  -> wl_compositor@4.create_region(new id wl_region@22)
[3951038.668]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951038.691]  -> wl_region@25.add(32, 32, 438, 336)
[3951038.746]  -> wl_buffer@27.destroy()
[3951038.774]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@28, 0, 502, 400, 2008, 0)
[3951038.846]  -> wl_surface@15.frame(new id wl_callback@23)
[3951041.846]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 438, 336)
[3951041.966]  -> wl_surface@15.set_opaque_region(wl_region@22)
[3951041.989]  -> wl_region@22.destroy()
[3951042.000]  -> wl_surface@15.set_input_region(wl_region@25)
[3951042.013]  -> wl_region@25.destroy()
[3951042.026]  -> wl_surface@15.attach(wl_buffer@28, 0, 0)
[3951042.056]  -> wl_surface@15.damage(0, 0, 502, 400)
[3951042.094]  -> wl_surface@15.commit()
[3951059.247] wl_display@1.delete_id(27)
[3951059.389] wl_display@1.delete_id(22)
[3951059.405] wl_display@1.delete_id(25)
[3951059.418] wl_display@1.delete_id(23)
[3951059.433] wl_buffer@28.release()
[3951059.449] zxdg_toplevel_v6@17.configure(438, 336, array)
[3951059.487] zxdg_surface_v6@16.configure(300972)
[3951059.524]  -> zxdg_surface_v6@16.ack_configure(300972)
[3951059.544] wl_callback@23.done(290292256)
[3951059.565]  -> wl_compositor@4.create_region(new id wl_region@23)
[3951059.595]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951059.617]  -> wl_region@25.add(32, 32, 438, 336)
[3951059.669]  -> wl_surface@15.frame(new id wl_callback@22)
[3951062.518]  -> wl_surface@15.set_opaque_region(wl_region@23)
[3951062.595]  -> wl_region@23.destroy()
[3951062.613]  -> wl_surface@15.set_input_region(wl_region@25)
[3951062.634]  -> wl_region@25.destroy()
[3951062.644]  -> wl_surface@15.attach(wl_buffer@28, 0, 0)
[3951062.672]  -> wl_surface@15.damage(0, 0, 502, 400)
[3951062.707]  -> wl_surface@15.commit()
[3951071.243] wl_display@1.delete_id(23)
[3951071.332] wl_display@1.delete_id(25)
[3951071.350] wl_display@1.delete_id(22)
[3951071.365] wl_buffer@28.release()
[3951071.380] zxdg_toplevel_v6@17.configure(439, 336, array)
[3951071.413] zxdg_surface_v6@16.configure(300973)
[3951071.429]  -> zxdg_surface_v6@16.ack_configure(300973)
[3951071.468] wl_callback@22.done(290292269)
[3951071.495]  -> wl_compositor@4.create_region(new id wl_region@22)
[3951071.525]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951071.546]  -> wl_region@25.add(32, 32, 439, 336)
[3951071.596]  -> wl_buffer@28.destroy()
[3951071.634]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@23, 0, 503, 400, 2012, 0)
[3951071.737]  -> wl_surface@15.frame(new id wl_callback@27)
[3951074.754]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 439, 336)
[3951074.850]  -> wl_surface@15.set_opaque_region(wl_region@22)
[3951074.882]  -> wl_region@22.destroy()
[3951074.899]  -> wl_surface@15.set_input_region(wl_region@25)
[3951074.913]  -> wl_region@25.destroy()
[3951074.926]  -> wl_surface@15.attach(wl_buffer@23, 0, 0)
[3951074.955]  -> wl_surface@15.damage(0, 0, 503, 400)
[3951074.992]  -> wl_surface@15.commit()
[3951091.245] wl_display@1.delete_id(28)
[3951091.411] wl_display@1.delete_id(22)
[3951091.431] wl_display@1.delete_id(25)
[3951091.441] wl_display@1.delete_id(27)
[3951091.495] wl_buffer@23.release()
[3951091.508] zxdg_toplevel_v6@17.configure(439, 336, array)
[3951091.568] zxdg_surface_v6@16.configure(300974)
[3951091.586]  -> zxdg_surface_v6@16.ack_configure(300974)
[3951091.603] wl_callback@27.done(290292288)
[3951091.623]  -> wl_compositor@4.create_region(new id wl_region@27)
[3951091.645]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951091.661]  -> wl_region@25.add(32, 32, 439, 336)
[3951091.700]  -> wl_surface@15.frame(new id wl_callback@22)
[3951094.023]  -> wl_surface@15.set_opaque_region(wl_region@27)
[3951094.123]  -> wl_region@27.destroy()
[3951094.132]  -> wl_surface@15.set_input_region(wl_region@25)
[3951094.141]  -> wl_region@25.destroy()
[3951094.148]  -> wl_surface@15.attach(wl_buffer@23, 0, 0)
[3951094.165]  -> wl_surface@15.damage(0, 0, 503, 400)
[3951094.182]  -> wl_surface@15.commit()
[3951103.075] wl_display@1.delete_id(27)
[3951103.111] wl_display@1.delete_id(25)
[3951103.119] wl_display@1.delete_id(22)
[3951103.126] wl_buffer@23.release()
[3951103.132] zxdg_toplevel_v6@17.configure(439, 336, array)
[3951103.150] zxdg_surface_v6@16.configure(300975)
[3951103.164]  -> zxdg_surface_v6@16.ack_configure(300975)
[3951103.181] wl_callback@22.done(290292301)
[3951103.195]  -> wl_compositor@4.create_region(new id wl_region@22)
[3951103.237]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951103.249]  -> wl_region@25.add(32, 32, 439, 336)
[3951103.279]  -> wl_surface@15.frame(new id wl_callback@27)
[3951105.292]  -> wl_surface@15.set_opaque_region(wl_region@22)
[3951105.346]  -> wl_region@22.destroy()
[3951105.353]  -> wl_surface@15.set_input_region(wl_region@25)
[3951105.361]  -> wl_region@25.destroy()
[3951105.367]  -> wl_surface@15.attach(wl_buffer@23, 0, 0)
[3951105.381]  -> wl_surface@15.damage(0, 0, 503, 400)
[3951105.398]  -> wl_surface@15.commit()
[3951119.792] wl_display@1.delete_id(22)
[3951119.837] wl_display@1.delete_id(25)
[3951119.846] wl_display@1.delete_id(27)
[3951119.853] wl_buffer@23.release()
[3951119.860] zxdg_toplevel_v6@17.configure(440, 336, array)
[3951119.879] zxdg_surface_v6@16.configure(300976)
[3951119.904]  -> zxdg_surface_v6@16.ack_configure(300976)
[3951119.930] wl_callback@27.done(290292317)
[3951119.944]  -> wl_compositor@4.create_region(new id wl_region@27)
[3951119.961]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951119.974]  -> wl_region@25.add(32, 32, 440, 336)
[3951120.005]  -> wl_buffer@23.destroy()
[3951120.033]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@22, 0, 504, 400, 2016, 0)
[3951120.069]  -> wl_surface@15.frame(new id wl_callback@28)
[3951122.217]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 440, 336)
[3951122.409]  -> wl_surface@15.set_opaque_region(wl_region@27)
[3951122.445]  -> wl_region@27.destroy()
[3951122.451]  -> wl_surface@15.set_input_region(wl_region@25)
[3951122.459]  -> wl_region@25.destroy()
[3951122.466]  -> wl_surface@15.attach(wl_buffer@22, 0, 0)
[3951122.481]  -> wl_surface@15.damage(0, 0, 504, 400)
[3951122.499]  -> wl_surface@15.commit()
[3951138.644] wl_display@1.delete_id(23)
[3951138.736] wl_display@1.delete_id(27)
[3951138.750] wl_display@1.delete_id(25)
[3951138.757] wl_display@1.delete_id(28)
[3951138.765] wl_buffer@22.release()
[3951138.774] zxdg_toplevel_v6@17.configure(440, 336, array)
[3951138.795] zxdg_surface_v6@16.configure(300977)
[3951138.808]  -> zxdg_surface_v6@16.ack_configure(300977)
[3951138.825] wl_callback@28.done(290292336)
[3951138.841]  -> wl_compositor@4.create_region(new id wl_region@28)
[3951138.861]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951138.872]  -> wl_region@25.add(32, 32, 440, 336)
[3951138.915]  -> wl_surface@15.frame(new id wl_callback@27)
[3951141.098]  -> wl_surface@15.set_opaque_region(wl_region@28)
[3951141.168]  -> wl_region@28.destroy()
[3951141.175]  -> wl_surface@15.set_input_region(wl_region@25)
[3951141.182]  -> wl_region@25.destroy()
[3951141.188]  -> wl_surface@15.attach(wl_buffer@22, 0, 0)
[3951141.201]  -> wl_surface@15.damage(0, 0, 504, 400)
[3951141.217]  -> wl_surface@15.commit()
[3951153.111] wl_display@1.delete_id(28)
[3951153.154] wl_display@1.delete_id(25)
[3951153.164] wl_display@1.delete_id(27)
[3951153.172] wl_buffer@22.release()
[3951153.182] zxdg_toplevel_v6@17.configure(441, 336, array)
[3951153.211] zxdg_surface_v6@16.configure(300978)
[3951153.241]  -> zxdg_surface_v6@16.ack_configure(300978)
[3951153.257] wl_callback@27.done(290292351)
[3951153.272]  -> wl_compositor@4.create_region(new id wl_region@27)
[3951153.294]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951153.308]  -> wl_region@25.add(32, 32, 441, 336)
[3951153.340]  -> wl_buffer@22.destroy()
[3951153.365]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@28, 0, 505, 400, 2020, 0)
[3951153.397]  -> wl_surface@15.frame(new id wl_callback@23)
[3951155.421]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 441, 336)
[3951155.518]  -> wl_surface@15.set_opaque_region(wl_region@27)
[3951155.527]  -> wl_region@27.destroy()
[3951155.533]  -> wl_surface@15.set_input_region(wl_region@25)
[3951155.540]  -> wl_region@25.destroy()
[3951155.547]  -> wl_surface@15.attach(wl_buffer@28, 0, 0)
[3951155.560]  -> wl_surface@15.damage(0, 0, 505, 400)
[3951155.576]  -> wl_surface@15.commit()
[3951171.737] wl_display@1.delete_id(22)
[3951171.791] wl_display@1.delete_id(27)
[3951171.806] wl_display@1.delete_id(25)
[3951171.814] wl_display@1.delete_id(23)
[3951171.821] wl_buffer@28.release()
[3951171.829] zxdg_toplevel_v6@17.configure(441, 336, array)
[3951171.852] zxdg_surface_v6@16.configure(300979)
[3951171.864]  -> zxdg_surface_v6@16.ack_configure(300979)
[3951171.903] wl_callback@23.done(290292369)
[3951171.921]  -> wl_compositor@4.create_region(new id wl_region@23)
[3951171.941]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951171.956]  -> wl_region@25.add(32, 32, 441, 336)
[3951171.979]  -> wl_surface@15.frame(new id wl_callback@27)
[3951174.074]  -> wl_surface@15.set_opaque_region(wl_region@23)
[3951174.128]  -> wl_region@23.destroy()
[3951174.135]  -> wl_surface@15.set_input_region(wl_region@25)
[3951174.141]  -> wl_region@25.destroy()
[3951174.147]  -> wl_surface@15.attach(wl_buffer@28, 0, 0)
[3951174.165]  -> wl_surface@15.damage(0, 0, 505, 400)
[3951174.184]  -> wl_surface@15.commit()
[3951186.329] wl_display@1.delete_id(23)
[3951186.378] wl_display@1.delete_id(25)
[3951186.388] wl_display@1.delete_id(27)
[3951186.401] wl_buffer@28.release()
[3951186.418] zxdg_toplevel_v6@17.configure(442, 336, array)
[3951186.444] zxdg_surface_v6@16.configure(300980)
[3951186.461]  -> zxdg_surface_v6@16.ack_configure(300980)
[3951186.472] wl_callback@27.done(290292384)
[3951186.485]  -> wl_compositor@4.create_region(new id wl_region@27)
[3951186.504]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951186.519]  -> wl_region@25.add(32, 32, 442, 336)
[3951186.548]  -> wl_buffer@28.destroy()
[3951186.574]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@23, 0, 506, 400, 2024, 0)
[3951186.611]  -> wl_surface@15.frame(new id wl_callback@22)
[3951188.871]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 442, 336)
[3951189.108]  -> wl_surface@15.set_opaque_region(wl_region@27)
[3951189.126]  -> wl_region@27.destroy()
[3951189.138]  -> wl_surface@15.set_input_region(wl_region@25)
[3951189.152]  -> wl_region@25.destroy()
[3951189.163]  -> wl_surface@15.attach(wl_buffer@23, 0, 0)
[3951189.182]  -> wl_surface@15.damage(0, 0, 506, 400)
[3951189.207]  -> wl_surface@15.commit()
[3951205.256] wl_display@1.delete_id(28)
[3951205.330] wl_display@1.delete_id(27)
[3951205.339] wl_display@1.delete_id(25)
[3951205.346] wl_display@1.delete_id(22)
[3951205.355] wl_buffer@23.release()
[3951205.364] zxdg_toplevel_v6@17.configure(442, 336, array)
[3951205.393] zxdg_surface_v6@16.configure(300981)
[3951205.417]  -> zxdg_surface_v6@16.ack_configure(300981)
[3951205.428] wl_callback@22.done(290292403)
[3951205.442]  -> wl_compositor@4.create_region(new id wl_region@22)
[3951205.456]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951205.468]  -> wl_region@25.add(32, 32, 442, 336)
[3951205.491]  -> wl_surface@15.frame(new id wl_callback@27)
[3951207.609]  -> wl_surface@15.set_opaque_region(wl_region@22)
[3951207.703]  -> wl_region@22.destroy()
[3951207.708]  -> wl_surface@15.set_input_region(wl_region@25)
[3951207.716]  -> wl_region@25.destroy()
[3951207.721]  -> wl_surface@15.attach(wl_buffer@23, 0, 0)
[3951207.734]  -> wl_surface@15.damage(0, 0, 506, 400)
[3951207.750]  -> wl_surface@15.commit()
[3951219.751] wl_display@1.delete_id(22)
[3951219.790] wl_display@1.delete_id(25)
[3951219.799] wl_display@1.delete_id(27)
[3951219.807] wl_buffer@23.release()
[3951219.813] zxdg_toplevel_v6@17.configure(443, 336, array)
[3951219.832] zxdg_surface_v6@16.configure(300982)
[3951219.850]  -> zxdg_surface_v6@16.ack_configure(300982)
[3951219.859] wl_callback@27.done(290292417)
[3951219.872]  -> wl_compositor@4.create_region(new id wl_region@27)
[3951219.893]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951219.909]  -> wl_region@25.add(32, 32, 443, 336)
[3951219.961]  -> wl_buffer@23.destroy()
[3951219.988]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@22, 0, 507, 400, 2028, 0)
[3951220.027]  -> wl_surface@15.frame(new id wl_callback@28)
[3951222.190]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 443, 336)
[3951222.321]  -> wl_surface@15.set_opaque_region(wl_region@27)
[3951222.334]  -> wl_region@27.destroy()
[3951222.342]  -> wl_surface@15.set_input_region(wl_region@25)
[3951222.348]  -> wl_region@25.destroy()
[3951222.354]  -> wl_surface@15.attach(wl_buffer@22, 0, 0)
[3951222.370]  -> wl_surface@15.damage(0, 0, 507, 400)
[3951222.388]  -> wl_surface@15.commit()
[3951238.514] wl_display@1.delete_id(23)
[3951238.561] wl_display@1.delete_id(27)
[3951238.571] wl_display@1.delete_id(25)
[3951238.580] wl_display@1.delete_id(28)
[3951238.594] wl_buffer@22.release()
[3951238.606] zxdg_toplevel_v6@17.configure(443, 336, array)
[3951238.628] zxdg_surface_v6@16.configure(300983)
[3951238.641]  -> zxdg_surface_v6@16.ack_configure(300983)
[3951238.677] wl_callback@28.done(290292436)
[3951238.701]  -> wl_compositor@4.create_region(new id wl_region@28)
[3951238.725]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951238.740]  -> wl_region@25.add(32, 32, 443, 336)
[3951238.767]  -> wl_surface@15.frame(new id wl_callback@27)
[3951240.967]  -> wl_surface@15.set_opaque_region(wl_region@28)
[3951241.061]  -> wl_region@28.destroy()
[3951241.068]  -> wl_surface@15.set_input_region(wl_region@25)
[3951241.075]  -> wl_region@25.destroy()
[3951241.082]  -> wl_surface@15.attach(wl_buffer@22, 0, 0)
[3951241.096]  -> wl_surface@15.damage(0, 0, 507, 400)
[3951241.112]  -> wl_surface@15.commit()
[3951252.997] wl_display@1.delete_id(28)
[3951253.058] wl_display@1.delete_id(25)
[3951253.068] wl_display@1.delete_id(27)
[3951253.078] wl_buffer@22.release()
[3951253.087] zxdg_toplevel_v6@17.configure(445, 336, array)
[3951253.114] zxdg_surface_v6@16.configure(300984)
[3951253.128]  -> zxdg_surface_v6@16.ack_configure(300984)
[3951253.140] wl_callback@27.done(290292451)
[3951253.154]  -> wl_compositor@4.create_region(new id wl_region@27)
[3951253.178]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951253.190]  -> wl_region@25.add(32, 32, 445, 336)
[3951253.219]  -> wl_buffer@22.destroy()
[3951253.239]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@28, 0, 509, 400, 2036, 0)
[3951253.293]  -> wl_surface@15.frame(new id wl_callback@23)
[3951255.217]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 445, 336)
[3951255.312]  -> wl_surface@15.set_opaque_region(wl_region@27)
[3951255.323]  -> wl_region@27.destroy()
[3951255.329]  -> wl_surface@15.set_input_region(wl_region@25)
[3951255.337]  -> wl_region@25.destroy()
[3951255.342]  -> wl_surface@15.attach(wl_buffer@28, 0, 0)
[3951255.358]  -> wl_surface@15.damage(0, 0, 509, 400)
[3951255.374]  -> wl_surface@15.commit()
[3951271.604] wl_display@1.delete_id(22)
[3951271.654] wl_display@1.delete_id(27)
[3951271.674] wl_display@1.delete_id(25)
[3951271.691] wl_display@1.delete_id(23)
[3951271.702] wl_buffer@28.release()
[3951271.712] zxdg_toplevel_v6@17.configure(446, 336, array)
[3951271.732] zxdg_surface_v6@16.configure(300985)
[3951271.786]  -> zxdg_surface_v6@16.ack_configure(300985)
[3951271.803] wl_callback@23.done(290292469)
[3951271.819]  -> wl_compositor@4.create_region(new id wl_region@23)
[3951271.838]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951271.849]  -> wl_region@25.add(32, 32, 446, 336)
[3951271.910]  -> wl_buffer@28.destroy()
[3951271.950]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@27, 0, 510, 400, 2040, 0)
[3951271.985]  -> wl_surface@15.frame(new id wl_callback@22)
[3951274.074]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 446, 336)
[3951274.143]  -> wl_surface@15.set_opaque_region(wl_region@23)
[3951274.152]  -> wl_region@23.destroy()
[3951274.159]  -> wl_surface@15.set_input_region(wl_region@25)
[3951274.167]  -> wl_region@25.destroy()
[3951274.172]  -> wl_surface@15.attach(wl_buffer@27, 0, 0)
[3951274.188]  -> wl_surface@15.damage(0, 0, 510, 400)
[3951274.209]  -> wl_surface@15.commit()
[3951288.255] wl_display@1.delete_id(28)
[3951288.365] wl_display@1.delete_id(23)
[3951288.390] wl_display@1.delete_id(25)
[3951288.412] wl_display@1.delete_id(22)
[3951288.426] wl_buffer@27.release()
[3951288.460] zxdg_toplevel_v6@17.configure(448, 336, array)
[3951288.491] zxdg_surface_v6@16.configure(300986)
[3951288.503]  -> zxdg_surface_v6@16.ack_configure(300986)
[3951288.514] wl_callback@22.done(290292486)
[3951288.529]  -> wl_compositor@4.create_region(new id wl_region@22)
[3951288.549]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951288.562]  -> wl_region@25.add(32, 32, 448, 336)
[3951288.589]  -> wl_buffer@27.destroy()
[3951288.615]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@23, 0, 512, 400, 2048, 0)
[3951288.656]  -> wl_surface@15.frame(new id wl_callback@28)
[3951291.041]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 448, 336)
[3951291.151]  -> wl_surface@15.set_opaque_region(wl_region@22)
[3951291.169]  -> wl_region@22.destroy()
[3951291.182]  -> wl_surface@15.set_input_region(wl_region@25)
[3951291.193]  -> wl_region@25.destroy()
[3951291.201]  -> wl_surface@15.attach(wl_buffer@23, 0, 0)
[3951291.225]  -> wl_surface@15.damage(0, 0, 512, 400)
[3951291.270]  -> wl_surface@15.commit()
[3951303.976] wl_display@1.delete_id(27)
[3951304.017] wl_display@1.delete_id(22)
[3951304.023] wl_display@1.delete_id(25)
[3951304.028] wl_display@1.delete_id(28)
[3951304.033] wl_buffer@23.release()
[3951304.038] zxdg_toplevel_v6@17.configure(449, 336, array)
[3951304.055] zxdg_surface_v6@16.configure(300987)
[3951304.073]  -> zxdg_surface_v6@16.ack_configure(300987)
[3951304.080] wl_callback@28.done(290292502)
[3951304.089]  -> wl_compositor@4.create_region(new id wl_region@28)
[3951304.115]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951304.130]  -> wl_region@25.add(32, 32, 449, 336)
[3951304.156]  -> wl_buffer@23.destroy()
[3951304.177]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@22, 0, 513, 400, 2052, 0)
[3951304.196]  -> wl_surface@15.frame(new id wl_callback@27)
[3951306.072]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 449, 336)
[3951306.161]  -> wl_surface@15.set_opaque_region(wl_region@28)
[3951306.169]  -> wl_region@28.destroy()
[3951306.174]  -> wl_surface@15.set_input_region(wl_region@25)
[3951306.179]  -> wl_region@25.destroy()
[3951306.185]  -> wl_surface@15.attach(wl_buffer@22, 0, 0)
[3951306.195]  -> wl_surface@15.damage(0, 0, 513, 400)
[3951306.209]  -> wl_surface@15.commit()
[3951320.899] wl_display@1.delete_id(23)
[3951320.932] wl_display@1.delete_id(28)
[3951320.937] wl_display@1.delete_id(25)
[3951320.943] wl_display@1.delete_id(27)
[3951320.947] wl_buffer@22.release()
[3951320.952] zxdg_toplevel_v6@17.configure(449, 336, array)
[3951320.964] zxdg_surface_v6@16.configure(300988)
[3951320.977]  -> zxdg_surface_v6@16.ack_configure(300988)
[3951320.999] wl_callback@27.done(290292518)
[3951321.020]  -> wl_compositor@4.create_region(new id wl_region@27)
[3951321.051]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951321.060]  -> wl_region@25.add(32, 32, 449, 336)
[3951321.077]  -> wl_surface@15.frame(new id wl_callback@28)
[3951322.939]  -> wl_surface@15.set_opaque_region(wl_region@27)
[3951323.007]  -> wl_region@27.destroy()
[3951323.012]  -> wl_surface@15.set_input_region(wl_region@25)
[3951323.017]  -> wl_region@25.destroy()
[3951323.021]  -> wl_surface@15.attach(wl_buffer@22, 0, 0)
[3951323.030]  -> wl_surface@15.damage(0, 0, 513, 400)
[3951323.040]  -> wl_surface@15.commit()
[3951335.882] wl_display@1.delete_id(27)
[3951335.912] wl_display@1.delete_id(25)
[3951335.917] wl_display@1.delete_id(28)
[3951335.921] wl_buffer@22.release()
[3951335.926] zxdg_toplevel_v6@17.configure(450, 336, array)
[3951335.937] zxdg_surface_v6@16.configure(300989)
[3951335.943]  -> zxdg_surface_v6@16.ack_configure(300989)
[3951335.949] wl_callback@28.done(290292533)
[3951335.968]  -> wl_compositor@4.create_region(new id wl_region@28)
[3951336.018]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951336.025]  -> wl_region@25.add(32, 32, 450, 336)
[3951336.048]  -> wl_buffer@22.destroy()
[3951336.066]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@27, 0, 514, 400, 2056, 0)
[3951336.096]  -> wl_surface@15.frame(new id wl_callback@23)
[3951337.977]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 450, 336)
[3951338.041]  -> wl_surface@15.set_opaque_region(wl_region@28)
[3951338.047]  -> wl_region@28.destroy()
[3951338.052]  -> wl_surface@15.set_input_region(wl_region@25)
[3951338.058]  -> wl_region@25.destroy()
[3951338.063]  -> wl_surface@15.attach(wl_buffer@27, 0, 0)
[3951338.072]  -> wl_surface@15.damage(0, 0, 514, 400)
[3951338.082]  -> wl_surface@15.commit()
[3951353.998] wl_display@1.delete_id(22)
[3951354.028] wl_display@1.delete_id(28)
[3951354.034] wl_display@1.delete_id(25)
[3951354.039] wl_display@1.delete_id(23)
[3951354.044] wl_buffer@27.release()
[3951354.049] zxdg_toplevel_v6@17.configure(452, 336, array)
[3951354.063] zxdg_surface_v6@16.configure(300990)
[3951354.075]  -> zxdg_surface_v6@16.ack_configure(300990)
[3951354.086] wl_callback@23.done(290292552)
[3951354.119]  -> wl_compositor@4.create_region(new id wl_region@23)
[3951354.144]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951354.156]  -> wl_region@25.add(32, 32, 452, 336)
[3951354.185]  -> wl_buffer@27.destroy()
[3951354.209]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@28, 0, 516, 400, 2064, 0)
[3951354.235]  -> wl_surface@15.frame(new id wl_callback@22)
[3951356.165]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 452, 336)
[3951356.241]  -> wl_surface@15.set_opaque_region(wl_region@23)
[3951356.250]  -> wl_region@23.destroy()
[3951356.254]  -> wl_surface@15.set_input_region(wl_region@25)
[3951356.258]  -> wl_region@25.destroy()
[3951356.263]  -> wl_surface@15.attach(wl_buffer@28, 0, 0)
[3951356.272]  -> wl_surface@15.damage(0, 0, 516, 400)
[3951356.282]  -> wl_surface@15.commit()
[3951370.654] wl_display@1.delete_id(27)
[3951370.683] wl_display@1.delete_id(23)
[3951370.688] wl_display@1.delete_id(25)
[3951370.693] wl_display@1.delete_id(22)
[3951370.698] wl_buffer@28.release()
[3951370.703] zxdg_toplevel_v6@17.configure(454, 336, array)
[3951370.718] zxdg_surface_v6@16.configure(300991)
[3951370.729]  -> zxdg_surface_v6@16.ack_configure(300991)
[3951370.753] wl_callback@22.done(290292568)
[3951370.766]  -> wl_compositor@4.create_region(new id wl_region@22)
[3951370.787]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951370.806]  -> wl_region@25.add(32, 32, 454, 336)
[3951370.843]  -> wl_buffer@28.destroy()
[3951370.868]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@23, 0, 518, 400, 2072, 0)
[3951370.893]  -> wl_surface@15.frame(new id wl_callback@27)
[3951373.243]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 454, 336)
[3951373.323]  -> wl_surface@15.set_opaque_region(wl_region@22)
[3951373.354]  -> wl_region@22.destroy()
[3951373.358]  -> wl_surface@15.set_input_region(wl_region@25)
[3951373.363]  -> wl_region@25.destroy()
[3951373.367]  -> wl_surface@15.attach(wl_buffer@23, 0, 0)
[3951373.376]  -> wl_surface@15.damage(0, 0, 518, 400)
[3951373.388]  -> wl_surface@15.commit()
[3951387.380] wl_display@1.delete_id(28)
[3951387.418] wl_display@1.delete_id(22)
[3951387.447] wl_display@1.delete_id(25)
[3951387.454] wl_display@1.delete_id(27)
[3951387.465] wl_buffer@23.release()
[3951387.477] zxdg_toplevel_v6@17.configure(458, 336, array)
[3951387.490] zxdg_surface_v6@16.configure(300992)
[3951387.504]  -> zxdg_surface_v6@16.ack_configure(300992)
[3951387.518] wl_callback@27.done(290292585)
[3951387.531]  -> wl_compositor@4.create_region(new id wl_region@27)
[3951387.571]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951387.593]  -> wl_region@25.add(32, 32, 458, 336)
[3951387.617]  -> wl_buffer@23.destroy()
[3951387.638]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@22, 0, 522, 400, 2088, 0)
[3951387.665]  -> wl_surface@15.frame(new id wl_callback@28)
[3951389.554]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 458, 336)
[3951389.618]  -> wl_surface@15.set_opaque_region(wl_region@27)
[3951389.625]  -> wl_region@27.destroy()
[3951389.629]  -> wl_surface@15.set_input_region(wl_region@25)
[3951389.634]  -> wl_region@25.destroy()
[3951389.640]  -> wl_surface@15.attach(wl_buffer@22, 0, 0)
[3951389.650]  -> wl_surface@15.damage(0, 0, 522, 400)
[3951389.661]  -> wl_surface@15.commit()
[3951404.164] wl_display@1.delete_id(23)
[3951404.198] wl_display@1.delete_id(27)
[3951404.203] wl_display@1.delete_id(25)
[3951404.208] wl_display@1.delete_id(28)
[3951404.213] wl_buffer@22.release()
[3951404.218] zxdg_toplevel_v6@17.configure(460, 336, array)
[3951404.230] zxdg_surface_v6@16.configure(300993)
[3951404.238]  -> zxdg_surface_v6@16.ack_configure(300993)
[3951404.255] wl_callback@28.done(290292602)
[3951404.269]  -> wl_compositor@4.create_region(new id wl_region@28)
[3951404.283]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951404.293]  -> wl_region@25.add(32, 32, 460, 336)
[3951404.326]  -> wl_buffer@22.destroy()
[3951404.364]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@27, 0, 524, 400, 2096, 0)
[3951404.386]  -> wl_surface@15.frame(new id wl_callback@23)
[3951406.241]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 460, 336)
[3951406.311]  -> wl_surface@15.set_opaque_region(wl_region@28)
[3951406.319]  -> wl_region@28.destroy()
[3951406.326]  -> wl_surface@15.set_input_region(wl_region@25)
[3951406.331]  -> wl_region@25.destroy()
[3951406.336]  -> wl_surface@15.attach(wl_buffer@27, 0, 0)
[3951406.344]  -> wl_surface@15.damage(0, 0, 524, 400)
[3951406.358]  -> wl_surface@15.commit()
[3951420.784] wl_display@1.delete_id(22)
[3951420.844] wl_display@1.delete_id(28)
[3951420.850] wl_display@1.delete_id(25)
[3951420.855] wl_display@1.delete_id(23)
[3951420.860] wl_buffer@27.release()
[3951420.865] zxdg_toplevel_v6@17.configure(463, 336, array)
[3951420.878] zxdg_surface_v6@16.configure(300994)
[3951420.889]  -> zxdg_surface_v6@16.ack_configure(300994)
[3951420.902] wl_callback@23.done(290292618)
[3951420.914]  -> wl_compositor@4.create_region(new id wl_region@23)
[3951420.927]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951420.938]  -> wl_region@25.add(32, 32, 463, 336)
[3951420.965]  -> wl_buffer@27.destroy()
[3951420.984]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@28, 0, 527, 400, 2108, 0)
[3951421.008]  -> wl_surface@15.frame(new id wl_callback@22)
[3951422.967]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 463, 336)
[3951423.035]  -> wl_surface@15.set_opaque_region(wl_region@23)
[3951423.042]  -> wl_region@23.destroy()
[3951423.046]  -> wl_surface@15.set_input_region(wl_region@25)
[3951423.051]  -> wl_region@25.destroy()
[3951423.056]  -> wl_surface@15.attach(wl_buffer@28, 0, 0)
[3951423.066]  -> wl_surface@15.damage(0, 0, 527, 400)
[3951423.077]  -> wl_surface@15.commit()
[3951437.436] wl_display@1.delete_id(27)
[3951437.496] wl_display@1.delete_id(23)
[3951437.503] wl_display@1.delete_id(25)
[3951437.508] wl_display@1.delete_id(22)
[3951437.513] wl_buffer@28.release()
[3951437.519] zxdg_toplevel_v6@17.configure(465, 336, array)
[3951437.541] zxdg_surface_v6@16.configure(300995)
[3951437.559]  -> zxdg_surface_v6@16.ack_configure(300995)
[3951437.594] wl_callback@22.done(290292635)
[3951437.606]  -> wl_compositor@4.create_region(new id wl_region@22)
[3951437.657]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951437.669]  -> wl_region@25.add(32, 32, 465, 336)
[3951437.691]  -> wl_buffer@28.destroy()
[3951437.721]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@23, 0, 529, 400, 2116, 0)
[3951437.757]  -> wl_surface@15.frame(new id wl_callback@27)
[3951439.751]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 465, 336)
[3951439.826]  -> wl_surface@15.set_opaque_region(wl_region@22)
[3951439.834]  -> wl_region@22.destroy()
[3951439.840]  -> wl_surface@15.set_input_region(wl_region@25)
[3951439.845]  -> wl_region@25.destroy()
[3951439.849]  -> wl_surface@15.attach(wl_buffer@23, 0, 0)
[3951439.859]  -> wl_surface@15.damage(0, 0, 529, 400)
[3951439.870]  -> wl_surface@15.commit()
[3951454.099] wl_display@1.delete_id(28)
[3951454.157] wl_display@1.delete_id(22)
[3951454.165] wl_display@1.delete_id(25)
[3951454.170] wl_display@1.delete_id(27)
[3951454.175] wl_buffer@23.release()
[3951454.179] zxdg_toplevel_v6@17.configure(467, 336, array)
[3951454.192] zxdg_surface_v6@16.configure(300996)
[3951454.202]  -> zxdg_surface_v6@16.ack_configure(300996)
[3951454.216] wl_callback@27.done(290292652)
[3951454.233]  -> wl_compositor@4.create_region(new id wl_region@27)
[3951454.246]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951454.256]  -> wl_region@25.add(32, 32, 467, 336)
[3951454.280]  -> wl_buffer@23.destroy()
[3951454.300]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@22, 0, 531, 400, 2124, 0)
[3951454.326]  -> wl_surface@15.frame(new id wl_callback@28)
[3951456.205]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 467, 336)
[3951456.272]  -> wl_surface@15.set_opaque_region(wl_region@27)
[3951456.279]  -> wl_region@27.destroy()
[3951456.282]  -> wl_surface@15.set_input_region(wl_region@25)
[3951456.286]  -> wl_region@25.destroy()
[3951456.289]  -> wl_surface@15.attach(wl_buffer@22, 0, 0)
[3951456.298]  -> wl_surface@15.damage(0, 0, 531, 400)
[3951456.309]  -> wl_surface@15.commit()
[3951470.694] wl_display@1.delete_id(23)
[3951470.725] wl_display@1.delete_id(27)
[3951470.730] wl_display@1.delete_id(25)
[3951470.735] wl_display@1.delete_id(28)
[3951470.740] wl_buffer@22.release()
[3951470.744] zxdg_toplevel_v6@17.configure(469, 336, array)
[3951470.758] zxdg_surface_v6@16.configure(300997)
[3951470.766]  -> zxdg_surface_v6@16.ack_configure(300997)
[3951470.773] wl_callback@28.done(290292668)
[3951470.783]  -> wl_compositor@4.create_region(new id wl_region@28)
[3951470.799]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951470.847]  -> wl_region@25.add(32, 32, 469, 336)
[3951470.870]  -> wl_buffer@22.destroy()
[3951470.890]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@27, 0, 533, 400, 2132, 0)
[3951470.917]  -> wl_surface@15.frame(new id wl_callback@23)
[3951472.809]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 469, 336)
[3951472.900]  -> wl_surface@15.set_opaque_region(wl_region@28)
[3951472.908]  -> wl_region@28.destroy()
[3951472.912]  -> wl_surface@15.set_input_region(wl_region@25)
[3951472.916]  -> wl_region@25.destroy()
[3951472.920]  -> wl_surface@15.attach(wl_buffer@27, 0, 0)
[3951472.928]  -> wl_surface@15.damage(0, 0, 533, 400)
[3951472.939]  -> wl_surface@15.commit()
[3951487.413] wl_display@1.delete_id(22)
[3951487.452] wl_display@1.delete_id(28)
[3951487.458] wl_display@1.delete_id(25)
[3951487.462] wl_display@1.delete_id(23)
[3951487.467] wl_buffer@27.release()
[3951487.471] zxdg_toplevel_v6@17.configure(472, 336, array)
[3951487.483] zxdg_surface_v6@16.configure(300998)
[3951487.488]  -> zxdg_surface_v6@16.ack_configure(300998)
[3951487.495] wl_callback@23.done(290292685)
[3951487.503]  -> wl_compositor@4.create_region(new id wl_region@23)
[3951487.513]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951487.520]  -> wl_region@25.add(32, 32, 472, 336)
[3951487.539]  -> wl_buffer@27.destroy()
[3951487.555]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@28, 0, 536, 400, 2144, 0)
[3951487.584]  -> wl_surface@15.frame(new id wl_callback@22)
[3951489.329]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 472, 336)
[3951489.414]  -> wl_surface@15.set_opaque_region(wl_region@23)
[3951489.421]  -> wl_region@23.destroy()
[3951489.425]  -> wl_surface@15.set_input_region(wl_region@25)
[3951489.429]  -> wl_region@25.destroy()
[3951489.433]  -> wl_surface@15.attach(wl_buffer@28, 0, 0)
[3951489.441]  -> wl_surface@15.damage(0, 0, 536, 400)
[3951489.450]  -> wl_surface@15.commit()
[3951504.299] wl_display@1.delete_id(27)
[3951504.327] wl_display@1.delete_id(23)
[3951504.332] wl_display@1.delete_id(25)
[3951504.338] wl_display@1.delete_id(22)
[3951504.345] wl_buffer@28.release()
[3951504.351] zxdg_toplevel_v6@17.configure(474, 336, array)
[3951504.365] zxdg_surface_v6@16.configure(300999)
[3951504.370]  -> zxdg_surface_v6@16.ack_configure(300999)
[3951504.377] wl_callback@22.done(290292702)
[3951504.385]  -> wl_compositor@4.create_region(new id wl_region@22)
[3951504.393]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951504.403]  -> wl_region@25.add(32, 32, 474, 336)
[3951504.420]  -> wl_buffer@28.destroy()
[3951504.432]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@23, 0, 538, 400, 2152, 0)
[3951504.459]  -> wl_surface@15.frame(new id wl_callback@27)
[3951506.122]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 474, 336)
[3951506.204]  -> wl_surface@15.set_opaque_region(wl_region@22)
[3951506.211]  -> wl_region@22.destroy()
[3951506.215]  -> wl_surface@15.set_input_region(wl_region@25)
[3951506.219]  -> wl_region@25.destroy()
[3951506.224]  -> wl_surface@15.attach(wl_buffer@23, 0, 0)
[3951506.232]  -> wl_surface@15.damage(0, 0, 538, 400)
[3951506.242]  -> wl_surface@15.commit()
[3951520.746] wl_display@1.delete_id(28)
[3951520.777] wl_display@1.delete_id(22)
[3951520.781] wl_display@1.delete_id(25)
[3951520.785] wl_display@1.delete_id(27)
[3951520.789] wl_buffer@23.release()
[3951520.793] zxdg_toplevel_v6@17.configure(475, 336, array)
[3951520.803] zxdg_surface_v6@16.configure(301000)
[3951520.808]  -> zxdg_surface_v6@16.ack_configure(301000)
[3951520.814] wl_callback@27.done(290292718)
[3951520.821]  -> wl_compositor@4.create_region(new id wl_region@27)
[3951520.838]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951520.845]  -> wl_region@25.add(32, 32, 475, 336)
[3951520.858]  -> wl_buffer@23.destroy()
[3951520.866]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@22, 0, 539, 400, 2156, 0)
[3951520.884]  -> wl_surface@15.frame(new id wl_callback@28)
[3951522.004]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 475, 336)
[3951522.048]  -> wl_surface@15.set_opaque_region(wl_region@27)
[3951522.055]  -> wl_region@27.destroy()
[3951522.060]  -> wl_surface@15.set_input_region(wl_region@25)
[3951522.066]  -> wl_region@25.destroy()
[3951522.072]  -> wl_surface@15.attach(wl_buffer@22, 0, 0)
[3951522.084]  -> wl_surface@15.damage(0, 0, 539, 400)
[3951522.099]  -> wl_surface@15.commit()
[3951537.391] wl_display@1.delete_id(23)
[3951537.418] wl_display@1.delete_id(27)
[3951537.422] wl_display@1.delete_id(25)
[3951537.426] wl_display@1.delete_id(28)
[3951537.431] wl_buffer@22.release()
[3951537.435] zxdg_toplevel_v6@17.configure(476, 336, array)
[3951537.445] zxdg_surface_v6@16.configure(301001)
[3951537.450]  -> zxdg_surface_v6@16.ack_configure(301001)
[3951537.457] wl_callback@28.done(290292735)
[3951537.464]  -> wl_compositor@4.create_region(new id wl_region@28)
[3951537.475]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951537.482]  -> wl_region@25.add(32, 32, 476, 336)
[3951537.497]  -> wl_buffer@22.destroy()
[3951537.507]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@27, 0, 540, 400, 2160, 0)
[3951537.526]  -> wl_surface@15.frame(new id wl_callback@23)
[3951538.708]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 476, 336)
[3951538.750]  -> wl_surface@15.set_opaque_region(wl_region@28)
[3951538.760]  -> wl_region@28.destroy()
[3951538.775]  -> wl_surface@15.set_input_region(wl_region@25)
[3951538.781]  -> wl_region@25.destroy()
[3951538.789]  -> wl_surface@15.attach(wl_buffer@27, 0, 0)
[3951538.798]  -> wl_surface@15.damage(0, 0, 540, 400)
[3951538.827]  -> wl_surface@15.commit()
[3951554.046] wl_display@1.delete_id(22)
[3951554.079] wl_display@1.delete_id(28)
[3951554.084] wl_display@1.delete_id(25)
[3951554.088] wl_display@1.delete_id(23)
[3951554.092] wl_buffer@27.release()
[3951554.096] zxdg_toplevel_v6@17.configure(477, 336, array)
[3951554.106] zxdg_surface_v6@16.configure(301002)
[3951554.111]  -> zxdg_surface_v6@16.ack_configure(301002)
[3951554.116] wl_callback@23.done(290292752)
[3951554.122]  -> wl_compositor@4.create_region(new id wl_region@23)
[3951554.137]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951554.147]  -> wl_region@25.add(32, 32, 477, 336)
[3951554.163]  -> wl_buffer@27.destroy()
[3951554.171]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@28, 0, 541, 400, 2164, 0)
[3951554.190]  -> wl_surface@15.frame(new id wl_callback@22)
[3951555.408]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 477, 336)
[3951555.459]  -> wl_surface@15.set_opaque_region(wl_region@23)
[3951555.464]  -> wl_region@23.destroy()
[3951555.467]  -> wl_surface@15.set_input_region(wl_region@25)
[3951555.473]  -> wl_region@25.destroy()
[3951555.481]  -> wl_surface@15.attach(wl_buffer@28, 0, 0)
[3951555.494]  -> wl_surface@15.damage(0, 0, 541, 400)
[3951555.504]  -> wl_surface@15.commit()
[3951570.641] wl_display@1.delete_id(27)
[3951570.667] wl_display@1.delete_id(23)
[3951570.672] wl_display@1.delete_id(25)
[3951570.676] wl_display@1.delete_id(22)
[3951570.680] wl_buffer@28.release()
[3951570.684] zxdg_toplevel_v6@17.configure(477, 336, array)
[3951570.694] zxdg_surface_v6@16.configure(301003)
[3951570.699]  -> zxdg_surface_v6@16.ack_configure(301003)
[3951570.704] wl_callback@22.done(290292768)
[3951570.710]  -> wl_compositor@4.create_region(new id wl_region@22)
[3951570.718]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951570.725]  -> wl_region@25.add(32, 32, 477, 336)
[3951570.737]  -> wl_surface@15.frame(new id wl_callback@23)
[3951571.837]  -> wl_surface@15.set_opaque_region(wl_region@22)
[3951571.870]  -> wl_region@22.destroy()
[3951571.874]  -> wl_surface@15.set_input_region(wl_region@25)
[3951571.878]  -> wl_region@25.destroy()
[3951571.882]  -> wl_surface@15.attach(wl_buffer@28, 0, 0)
[3951571.890]  -> wl_surface@15.damage(0, 0, 541, 400)
[3951571.900]  -> wl_surface@15.commit()
[3951585.963] wl_display@1.delete_id(22)
[3951586.033] wl_display@1.delete_id(25)
[3951586.041] wl_display@1.delete_id(23)
[3951586.048] wl_buffer@28.release()
[3951586.055] zxdg_toplevel_v6@17.configure(478, 336, array)
[3951586.081] zxdg_surface_v6@16.configure(301004)
[3951586.092]  -> zxdg_surface_v6@16.ack_configure(301004)
[3951586.099] wl_callback@23.done(290292784)
[3951586.110]  -> wl_compositor@4.create_region(new id wl_region@23)
[3951586.124]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951586.132]  -> wl_region@25.add(32, 32, 478, 336)
[3951586.154]  -> wl_buffer@28.destroy()
[3951586.173]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@22, 0, 542, 400, 2168, 0)
[3951586.197]  -> wl_surface@15.frame(new id wl_callback@27)
[3951588.051]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 478, 336)
[3951588.110]  -> wl_surface@15.set_opaque_region(wl_region@23)
[3951588.118]  -> wl_region@23.destroy()
[3951588.123]  -> wl_surface@15.set_input_region(wl_region@25)
[3951588.130]  -> wl_region@25.destroy()
[3951588.134]  -> wl_surface@15.attach(wl_buffer@22, 0, 0)
[3951588.144]  -> wl_surface@15.damage(0, 0, 542, 400)
[3951588.154]  -> wl_surface@15.commit()
[3951604.218] wl_display@1.delete_id(28)
[3951604.256] wl_display@1.delete_id(23)
[3951604.262] wl_display@1.delete_id(25)
[3951604.266] wl_display@1.delete_id(27)
[3951604.271] wl_buffer@22.release()
[3951604.276] zxdg_toplevel_v6@17.configure(479, 336, array)
[3951604.290] zxdg_surface_v6@16.configure(301005)
[3951604.307]  -> zxdg_surface_v6@16.ack_configure(301005)
[3951604.315] wl_callback@27.done(290292802)
[3951604.327]  -> wl_compositor@4.create_region(new id wl_region@27)
[3951604.360]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951604.373]  -> wl_region@25.add(32, 32, 479, 336)
[3951604.424]  -> wl_buffer@22.destroy()
[3951604.450]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@23, 0, 543, 400, 2172, 0)
[3951604.479]  -> wl_surface@15.frame(new id wl_callback@28)
[3951606.461]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 479, 336)
[3951606.525]  -> wl_surface@15.set_opaque_region(wl_region@27)
[3951606.533]  -> wl_region@27.destroy()
[3951606.539]  -> wl_surface@15.set_input_region(wl_region@25)
[3951606.544]  -> wl_region@25.destroy()
[3951606.548]  -> wl_surface@15.attach(wl_buffer@23, 0, 0)
[3951606.635]  -> wl_surface@15.damage(0, 0, 543, 400)
[3951606.656]  -> wl_surface@15.commit()
[3951620.863] wl_display@1.delete_id(22)
[3951620.902] wl_display@1.delete_id(27)
[3951620.908] wl_display@1.delete_id(25)
[3951620.913] wl_display@1.delete_id(28)
[3951620.918] wl_buffer@23.release()
[3951620.924] zxdg_toplevel_v6@17.configure(479, 336, array)
[3951620.939] zxdg_surface_v6@16.configure(301006)
[3951620.952]  -> zxdg_surface_v6@16.ack_configure(301006)
[3951620.959] wl_callback@28.done(290292818)
[3951620.970]  -> wl_compositor@4.create_region(new id wl_region@28)
[3951620.982]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951620.989]  -> wl_region@25.add(32, 32, 479, 336)
[3951621.005]  -> wl_surface@15.frame(new id wl_callback@27)
[3951622.978]  -> wl_surface@15.set_opaque_region(wl_region@28)
[3951623.042]  -> wl_region@28.destroy()
[3951623.049]  -> wl_surface@15.set_input_region(wl_region@25)
[3951623.053]  -> wl_region@25.destroy()
[3951623.057]  -> wl_surface@15.attach(wl_buffer@23, 0, 0)
[3951623.066]  -> wl_surface@15.damage(0, 0, 543, 400)
[3951623.076]  -> wl_surface@15.commit()
[3951636.043] wl_display@1.delete_id(28)
[3951636.078] wl_display@1.delete_id(25)
[3951636.083] wl_display@1.delete_id(27)
[3951636.087] wl_buffer@23.release()
[3951636.091] zxdg_toplevel_v6@17.configure(480, 336, array)
[3951636.104] zxdg_surface_v6@16.configure(301007)
[3951636.111]  -> zxdg_surface_v6@16.ack_configure(301007)
[3951636.120] wl_callback@27.done(290292834)
[3951636.126]  -> wl_compositor@4.create_region(new id wl_region@27)
[3951636.138]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951636.146]  -> wl_region@25.add(32, 32, 480, 336)
[3951636.168]  -> wl_buffer@23.destroy()
[3951636.187]  -> wl_shm_pool@26.create_buffer(new id wl_buffer@28, 0, 544, 400, 2176, 0)
[3951636.212]  -> wl_surface@15.frame(new id wl_callback@22)
[3951638.221]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 480, 336)
[3951638.294]  -> wl_surface@15.set_opaque_region(wl_region@27)
[3951638.300]  -> wl_region@27.destroy()
[3951638.305]  -> wl_surface@15.set_input_region(wl_region@25)
[3951638.310]  -> wl_region@25.destroy()
[3951638.314]  -> wl_surface@15.attach(wl_buffer@28, 0, 0)
[3951638.324]  -> wl_surface@15.damage(0, 0, 544, 400)
[3951638.335]  -> wl_surface@15.commit()
[3951653.868] wl_display@1.delete_id(23)
[3951653.904] wl_display@1.delete_id(27)
[3951653.909] wl_display@1.delete_id(25)
[3951653.914] wl_display@1.delete_id(22)
[3951653.920] wl_buffer@28.release()
[3951653.934] wl_callback@22.done(290292851)
[3951997.691] zxdg_toplevel_v6@17.configure(480, 336, array)
[3951997.863] zxdg_surface_v6@16.configure(301008)
[3951997.898]  -> zxdg_surface_v6@16.ack_configure(301008)
[3951997.926] wl_keyboard@19.modifiers(301009, 0, 0, 0, 0)
[3951997.980] wl_keyboard@19.enter(301009, wl_surface@15, array)
[3951998.039] wl_data_device@11.data_offer(new id wl_data_offer@22295616)
[3951998.073] wl_data_offer@4278190081.offer("TARGETS")
[3951998.098] wl_data_offer@4278190081.offer("_VIMENC_TEXT")
[3951998.124] wl_data_offer@4278190081.offer("_VIM_TEXT")
[3951998.150] wl_data_offer@4278190081.offer("text/plain;charset=utf-8")
[3951998.181] wl_data_offer@4278190081.offer("UTF8_STRING")
[3951998.200] wl_data_offer@4278190081.offer("STRING")
[3951998.216] wl_data_offer@4278190081.offer("TEXT")
[3951998.233] wl_data_offer@4278190081.offer("COMPOUND_TEXT")
[3951998.256] wl_data_device@11.selection(wl_data_offer@4278190081)
[3951998.278]  -> wl_data_offer@4278190080.destroy()
[3951998.335] wl_pointer@18.enter(301010, wl_surface@15, 510.289062, 216.968750)
[3951998.393]  -> wl_surface@12.attach(wl_buffer@21, 0, 0)
[3951998.433]  -> wl_surface@12.damage(0, 0, 32, 32)
[3951998.481]  -> wl_surface@12.commit()
[3951998.496]  -> wl_pointer@18.set_cursor(301010, wl_surface@12, 25, 17)
[3951998.544] wl_pointer@18.frame()
[3951998.562]  -> wl_compositor@4.create_region(new id wl_region@22)
[3951998.595]  -> wl_compositor@4.create_region(new id wl_region@25)
[3951998.620]  -> wl_region@25.add(32, 32, 480, 336)
[3951998.677]  -> wl_buffer@28.destroy()
[3951998.813]  -> wl_shm_pool@26.destroy()
[3951999.381]  -> wl_shm@5.create_pool(new id wl_shm_pool@27, fd 9, 870400)
[3951999.475]  -> wl_shm_pool@27.create_buffer(new id wl_buffer@23, 0, 544, 400, 2176, 0)
[3951999.541]  -> wl_surface@15.frame(new id wl_callback@24)
[3952002.779]  -> wl_surface@15.set_opaque_region(wl_region@22)
[3952002.848]  -> wl_region@22.destroy()
[3952002.861]  -> wl_surface@15.set_input_region(wl_region@25)
[3952002.877]  -> wl_region@25.destroy()
[3952002.890]  -> wl_surface@15.attach(wl_buffer@23, 0, 0)
[3952002.921]  -> wl_surface@15.damage(0, 0, 544, 400)
[3952002.961]  -> wl_surface@15.commit()
[3952019.369] wl_display@1.delete_id(28)
[3952019.513] wl_display@1.delete_id(26)
[3952019.518] wl_display@1.delete_id(22)
[3952019.523] wl_display@1.delete_id(25)
[3952019.527] wl_display@1.delete_id(24)
[3952019.533] wl_buffer@23.release()
[3952019.541] wl_callback@24.done(290293217)
[3952081.540] wl_pointer@18.motion(290293274, 510.406250, 216.968750)
[3952081.678] wl_pointer@18.frame()
[3952106.330] wl_pointer@18.motion(290293297, 510.824219, 216.968750)
[3952106.524] wl_pointer@18.frame()
[3952121.760] wl_pointer@18.leave(301011, wl_surface@15)
[3952121.894] wl_pointer@18.frame()
[3954099.772] zxdg_toplevel_v6@17.configure(480, 336, array)
[3954099.859] zxdg_surface_v6@16.configure(301013)
[3954099.871]  -> zxdg_surface_v6@16.ack_configure(301013)
[3954099.882] wl_keyboard@19.leave(301015, wl_surface@15)
[3954099.905]  -> wl_compositor@4.create_region(new id wl_region@24)
[3954099.923]  -> wl_compositor@4.create_region(new id wl_region@25)
[3954099.935]  -> wl_region@25.add(32, 32, 480, 336)
[3954099.967]  -> wl_surface@15.frame(new id wl_callback@22)
[3954101.606]  -> wl_surface@15.set_opaque_region(wl_region@24)
[3954101.666]  -> wl_region@24.destroy()
[3954101.675]  -> wl_surface@15.set_input_region(wl_region@25)
[3954101.684]  -> wl_region@25.destroy()
[3954101.692]  -> wl_surface@15.attach(wl_buffer@23, 0, 0)
[3954101.711]  -> wl_surface@15.damage(0, 0, 544, 400)
[3954101.733]  -> wl_surface@15.commit()
[3954141.502] wl_display@1.delete_id(24)
[3954141.543] wl_display@1.delete_id(25)
[3954141.549] wl_display@1.delete_id(22)
[3954141.554] wl_buffer@23.release()
[3954141.558] wl_callback@22.done(290295339)

Sorry for the lengthy output! I tried to make the interaction as short as possible however wayland still likes to print a lot of info :)

Move

Here's another output from WAYLAND_DEBUG=1 weston-eventdemo except this time I

[285154.993]  -> wl_display@1.get_registry(new id wl_registry@2)
[285155.128]  -> wl_display@1.sync(new id wl_callback@3)
[285155.399] wl_display@1.delete_id(3)
[285155.431] wl_registry@2.global(1, "wl_drm", 2)
[285155.474] wl_registry@2.global(2, "wl_compositor", 3)
[285155.516]  -> wl_registry@2.bind(2, "wl_compositor", 3, new id [unknown]@4)
[285155.564] wl_registry@2.global(3, "wl_shm", 1)
[285155.598]  -> wl_registry@2.bind(3, "wl_shm", 1, new id [unknown]@5)
[285155.646] wl_registry@2.global(5, "wl_output", 2)
[285155.679]  -> wl_registry@2.bind(5, "wl_output", 2, new id [unknown]@6)
[285155.742] wl_registry@2.global(6, "wl_data_device_manager", 3)
[285155.794]  -> wl_registry@2.bind(6, "wl_data_device_manager", 3, new id [unknown]@7)
[285155.844] wl_registry@2.global(7, "gtk_primary_selection_device_manager", 1)
[285155.885] wl_registry@2.global(8, "zxdg_shell_v6", 1)
[285155.923]  -> wl_registry@2.bind(8, "zxdg_shell_v6", 1, new id [unknown]@8)
[285155.972] wl_registry@2.global(9, "wl_shell", 1)
[285156.012] wl_registry@2.global(10, "gtk_shell1", 1)
[285156.049] wl_registry@2.global(11, "wl_subcompositor", 1)
[285156.086]  -> wl_registry@2.bind(11, "wl_subcompositor", 1, new id [unknown]@9)
[285156.139] wl_registry@2.global(12, "zwp_pointer_gestures_v1", 1)
[285156.176] wl_registry@2.global(13, "zwp_tablet_manager_v2", 1)
[285156.211] wl_registry@2.global(14, "wl_seat", 5)
[285156.250]  -> wl_registry@2.bind(14, "wl_seat", 5, new id [unknown]@10)
[285156.305]  -> wl_data_device_manager@7.get_data_device(new id wl_data_device@11, wl_seat@10)
[285156.338]  -> wl_compositor@4.create_surface(new id wl_surface@12)
[285156.376] wl_registry@2.global(15, "zwp_relative_pointer_manager_v1", 1)
[285156.418]  -> wl_registry@2.bind(15, "zwp_relative_pointer_manager_v1", 1, new id [unknown]@13)
[285156.467] wl_registry@2.global(16, "zwp_pointer_constraints_v1", 1)
[285156.508]  -> wl_registry@2.bind(16, "zwp_pointer_constraints_v1", 1, new id [unknown]@14)
[285156.557] wl_registry@2.global(17, "zxdg_exporter_v1", 1)
[285156.594] wl_registry@2.global(18, "zxdg_importer_v1", 1)
[285156.634] wl_callback@3.done(303003)
[285156.811]  -> wl_shm@5.create_pool(new id wl_shm_pool@3, fd 8, 4096)
[285157.384]  -> wl_shm_pool@3.resize(12288)
[285157.631]  -> wl_shm_pool@3.resize(28672)
[285158.051]  -> wl_shm_pool@3.resize(61440)
[285158.911]  -> wl_shm_pool@3.resize(126976)
[285164.762]  -> wl_shm_pool@3.resize(258048)
[285165.059]  -> wl_shm_pool@3.resize(520192)
[285172.456]  -> wl_shm_pool@3.resize(1044480)
[285178.674]  -> wl_shm_pool@3.resize(2093056)
[285206.729]  -> wl_compositor@4.create_surface(new id wl_surface@15)
[285206.758]  -> zxdg_shell_v6@8.get_xdg_surface(new id zxdg_surface_v6@16, wl_surface@15)
[285206.767]  -> zxdg_surface_v6@16.get_toplevel(new id zxdg_toplevel_v6@17)
[285206.774]  -> wl_surface@15.commit()
[285206.902]  -> zxdg_toplevel_v6@17.set_title("EventDemo")
[285243.453] wl_shm@5.format(0)
[285243.477] wl_shm@5.format(1)
[285243.481] wl_output@6.geometry(0, 0, 280, 160, 0, "SHP", "0x144d", 0)
[285243.506] wl_output@6.mode(3, 3840, 2160, 59997)
[285243.518] wl_output@6.scale(2)
[285243.522] wl_output@6.done()
[285243.525] wl_seat@10.capabilities(7)
[285243.530]  -> wl_seat@10.get_pointer(new id wl_pointer@18)
[285243.537]  -> wl_seat@10.get_keyboard(new id wl_keyboard@19)
[285243.542]  -> wl_seat@10.get_touch(new id wl_touch@20)
[285243.547] wl_seat@10.name("seat0")
[285243.552] zxdg_toplevel_v6@17.configure(0, 0, array)
[285243.563] zxdg_surface_v6@16.configure(303005)
[285243.569]  -> zxdg_surface_v6@16.ack_configure(303005)
[285243.575]  -> wl_compositor@4.create_region(new id wl_region@21)
[285243.585]  -> wl_compositor@4.create_region(new id wl_region@22)
[285243.591]  -> wl_region@22.add(32, 32, 436, 336)
[285243.718]  -> wl_shm@5.create_pool(new id wl_shm_pool@23, fd 9, 800000)
[285243.739]  -> wl_shm_pool@23.create_buffer(new id wl_buffer@24, 0, 500, 400, 2000, 0)
[285243.758]  -> wl_surface@15.frame(new id wl_callback@25)
[285249.766]  -> zxdg_surface_v6@16.set_window_geometry(32, 32, 436, 336)
[285249.815]  -> wl_surface@15.set_opaque_region(wl_region@21)
[285249.836]  -> wl_region@21.destroy()
[285249.842]  -> wl_surface@15.set_input_region(wl_region@22)
[285249.846]  -> wl_region@22.destroy()
[285249.850]  -> wl_surface@15.attach(wl_buffer@24, 0, 0)
[285249.858]  -> wl_surface@15.damage(0, 0, 500, 400)
[285249.869]  -> wl_surface@15.commit()
[285253.727] wl_display@1.delete_id(21)
[285253.759] wl_display@1.delete_id(22)
[285253.763] wl_keyboard@19.keymap(1, fd 8, 51740)
[285260.197] wl_keyboard@19.repeat_info(33, 500)
[285260.224] wl_buffer@24.release()
[285276.328] zxdg_toplevel_v6@17.configure(436, 336, array)
[285276.370] zxdg_surface_v6@16.configure(303007)
[285276.378]  -> zxdg_surface_v6@16.ack_configure(303007)
[285276.384] wl_keyboard@19.modifiers(303009, 0, 0, 0, 0)
[285276.436] wl_keyboard@19.enter(303009, wl_surface@15, array)
[285276.452] wl_data_device@11.data_offer(new id wl_data_offer@23591232)
[285276.462] wl_data_offer@4278190080.offer("TARGETS")
[285276.470] wl_data_offer@4278190080.offer("_VIMENC_TEXT")
[285276.476] wl_data_offer@4278190080.offer("_VIM_TEXT")
[285276.482] wl_data_offer@4278190080.offer("text/plain;charset=utf-8")
[285276.490] wl_data_offer@4278190080.offer("UTF8_STRING")
[285276.496] wl_data_offer@4278190080.offer("STRING")
[285276.503] wl_data_offer@4278190080.offer("TEXT")
[285276.510] wl_data_offer@4278190080.offer("COMPOUND_TEXT")
[285276.516] wl_data_device@11.selection(wl_data_offer@4278190080)
[285313.759] wl_display@1.delete_id(25)
[285313.838] wl_surface@15.enter(wl_output@6)
[285313.848] wl_callback@25.done(290921479)
[285313.859]  -> wl_compositor@4.create_region(new id wl_region@25)
[285313.872]  -> wl_compositor@4.create_region(new id wl_region@22)
[285313.881]  -> wl_region@22.add(32, 32, 436, 336)
[285313.895]  -> wl_surface@15.frame(new id wl_callback@21)
[285314.892]  -> wl_surface@15.set_opaque_region(wl_region@25)
[285315.038]  -> wl_region@25.destroy()
[285315.045]  -> wl_surface@15.set_input_region(wl_region@22)
[285315.050]  -> wl_region@22.destroy()
[285315.053]  -> wl_surface@15.attach(wl_buffer@24, 0, 0)
[285315.062]  -> wl_surface@15.damage(0, 0, 500, 400)
[285315.073]  -> wl_surface@15.commit()
[285330.353] wl_display@1.delete_id(25)
[285330.410] wl_display@1.delete_id(22)
[285330.419] wl_display@1.delete_id(21)
[285330.426] wl_buffer@24.release()
[285330.433] wl_callback@21.done(290921495)
[288467.447] wl_pointer@18.enter(303013, wl_surface@15, 315.320312, 32.343750)
[288467.631]  -> wl_shm_pool@3.create_buffer(new id wl_buffer@21, 434176, 32, 32, 128, 0)
[288467.731]  -> wl_surface@12.attach(wl_buffer@21, 0, 0)
[288467.786]  -> wl_surface@12.damage(0, 0, 32, 32)
[288467.843]  -> wl_surface@12.commit()
[288467.862]  -> wl_pointer@18.set_cursor(303013, wl_surface@12, 17, 7)
[288467.920] wl_pointer@18.frame()
[288467.940] wl_pointer@18.motion(290924631, 315.320312, 32.343750)
[288468.008] wl_pointer@18.frame()
[288487.483] wl_pointer@18.motion(290924646, 315.093750, 33.218750)
[288487.625] wl_pointer@18.frame()
[288503.211] wl_pointer@18.motion(290924661, 314.859375, 34.140625)
[288503.334] wl_pointer@18.frame()
[288518.639] wl_pointer@18.motion(290924677, 314.859375, 34.863281)
[288518.752] wl_pointer@18.frame()
[288535.451] wl_pointer@18.motion(290924692, 314.859375, 35.347656)
[288535.551] wl_pointer@18.frame()
[288551.402] wl_pointer@18.motion(290924708, 314.609375, 36.074219)
[288551.486] wl_pointer@18.frame()
[288568.184] wl_pointer@18.motion(290924731, 313.859375, 37.539062)
[288568.373] wl_pointer@18.frame()
[288584.538] wl_pointer@18.motion(290924746, 313.351562, 38.777344)
[288584.635] wl_pointer@18.frame()
[288600.917] wl_pointer@18.motion(290924761, 312.835938, 39.781250)
[288600.995] wl_pointer@18.frame()
[288617.412] wl_pointer@18.motion(290924777, 312.308594, 41.324219)
[288617.503]  -> wl_shm_pool@3.create_buffer(new id wl_buffer@22, 1400832, 32, 32, 128, 0)
[288617.583]  -> wl_surface@12.attach(wl_buffer@22, 0, 0)
[288617.621]  -> wl_surface@12.damage(0, 0, 32, 32)
[288617.666]  -> wl_surface@12.commit()
[288617.679]  -> wl_pointer@18.set_cursor(303013, wl_surface@12, 5, 5)
[288617.741] wl_pointer@18.frame()
[288634.155] wl_pointer@18.motion(290924792, 311.761719, 42.394531)
[288634.266] wl_pointer@18.frame()
[288650.663] wl_pointer@18.motion(290924808, 311.480469, 43.488281)
[288650.743] wl_pointer@18.frame()
[288667.424] wl_pointer@18.motion(290924823, 311.480469, 44.035156)
[288667.524] wl_pointer@18.frame()
[288683.175] wl_pointer@18.motion(290924846, 311.480469, 44.835938)
[288683.296] wl_pointer@18.frame()
[288699.910] wl_pointer@18.motion(290924861, 311.480469, 45.332031)
[288700.028] wl_pointer@18.frame()
[288716.429] wl_pointer@18.motion(290924869, 311.480469, 45.562500)
[288716.531] wl_pointer@18.frame()
[288732.759] wl_pointer@18.motion(290924892, 311.042969, 45.785156)
[288732.864] wl_pointer@18.frame()
[288749.477] wl_pointer@18.motion(290924908, 310.460938, 46.164062)
[288749.571] wl_pointer@18.frame()
[288766.008] wl_pointer@18.motion(290924923, 309.910156, 46.523438)
[288766.152] wl_pointer@18.frame()
[288782.641] wl_pointer@18.motion(290924938, 309.117188, 46.703125)
[288782.753] wl_pointer@18.frame()
[288798.432] wl_pointer@18.motion(290924962, 307.636719, 46.703125)
[288798.519] wl_pointer@18.frame()
[288814.836] wl_pointer@18.motion(290924977, 307.148438, 46.703125)
[288814.969] wl_pointer@18.frame()
[288831.910] wl_pointer@18.motion(290924992, 306.683594, 46.703125)
[288832.002] wl_pointer@18.frame()
[288848.564] wl_pointer@18.motion(290925008, 306.234375, 46.703125)
[288848.651] wl_pointer@18.frame()
[288865.232] wl_pointer@18.motion(290925023, 305.789062, 46.703125)
[288865.327] wl_pointer@18.frame()
[288881.899] wl_pointer@18.motion(290925038, 305.363281, 46.703125)
[288882.017] wl_pointer@18.frame()
[288898.583] wl_pointer@18.motion(290925054, 304.957031, 46.703125)
[288898.685] wl_pointer@18.frame()
[288914.761] wl_pointer@18.motion(290925077, 304.398438, 46.703125)
[288914.840] wl_pointer@18.frame()
[288931.871] wl_pointer@18.motion(290925092, 304.042969, 46.703125)
[288931.960] wl_pointer@18.frame()
[288948.171] wl_pointer@18.motion(290925108, 303.687500, 46.703125)
[288948.330] wl_pointer@18.frame()
[288965.235] wl_pointer@18.motion(290925123, 303.332031, 46.703125)
[288965.322] wl_pointer@18.frame()
[288981.785] wl_pointer@18.motion(290925139, 302.976562, 46.703125)
[288981.924] wl_pointer@18.frame()
[288998.405] wl_pointer@18.motion(290925154, 302.800781, 46.703125)
[288998.507] wl_pointer@18.frame()
[289015.402] wl_pointer@18.motion(290925177, 302.289062, 46.703125)
[289015.505] wl_pointer@18.frame()
[289032.057] wl_pointer@18.motion(290925192, 301.945312, 46.703125)
[289032.162] wl_pointer@18.frame()
[289048.146] wl_pointer@18.motion(290925208, 301.601562, 46.703125)
[289048.250] wl_pointer@18.frame()
[289065.023] wl_pointer@18.motion(290925223, 301.257812, 46.703125)
[289065.141] wl_pointer@18.frame()
[289081.893] wl_pointer@18.motion(290925239, 300.914062, 46.703125)
[289082.007] wl_pointer@18.frame()
[289098.113] wl_pointer@18.motion(290925254, 300.570312, 46.703125)
[289098.208] wl_pointer@18.frame()
[289114.847] wl_pointer@18.motion(290925277, 299.667969, 46.703125)
[289115.004] wl_pointer@18.frame()
[289131.504] wl_pointer@18.motion(290925292, 298.882812, 46.703125)
[289131.583] wl_pointer@18.frame()
[289148.224] wl_pointer@18.motion(290925308, 298.050781, 46.703125)
[289148.372] wl_pointer@18.frame()
[289165.450] wl_pointer@18.motion(290925323, 297.164062, 46.703125)
[289165.535] wl_pointer@18.frame()
[289181.788] wl_pointer@18.motion(290925339, 296.230469, 46.703125)
[289181.892] wl_pointer@18.frame()
[289198.478] wl_pointer@18.motion(290925354, 295.496094, 46.703125)
[289198.560] wl_pointer@18.frame()
[289215.498] wl_pointer@18.motion(290925377, 294.761719, 46.703125)
[289215.575] wl_pointer@18.frame()
[289231.942] wl_pointer@18.motion(290925393, 294.281250, 46.703125)
[289232.015] wl_pointer@18.frame()
[289248.683] wl_pointer@18.motion(290925408, 293.824219, 46.703125)
[289248.760] wl_pointer@18.frame()
[289265.015] wl_pointer@18.motion(290925423, 293.394531, 46.703125)
[289265.094] wl_pointer@18.frame()
[289281.565] wl_pointer@18.motion(290925439, 292.992188, 46.703125)
[289281.746] wl_pointer@18.frame()
[289298.247] wl_pointer@18.motion(290925454, 292.609375, 46.703125)
[289298.396] wl_pointer@18.frame()
[289314.914] wl_pointer@18.motion(290925477, 292.074219, 46.703125)
[289315.082] wl_pointer@18.frame()
[289331.758] wl_pointer@18.motion(290925493, 291.535156, 46.703125)
[289331.845] wl_pointer@18.frame()
[289348.241] wl_pointer@18.motion(290925508, 290.980469, 46.703125)
[289348.419] wl_pointer@18.frame()
[289364.830] wl_pointer@18.motion(290925523, 290.195312, 46.703125)
[289364.907] wl_pointer@18.frame()
[289381.556] wl_pointer@18.motion(290925539, 289.789062, 46.703125)
[289381.791] wl_pointer@18.frame()
[289398.254] wl_pointer@18.motion(290925554, 289.382812, 46.703125)
[289398.396] wl_pointer@18.frame()
[289414.752] wl_pointer@18.motion(290925577, 288.347656, 46.703125)
[289414.823] wl_pointer@18.frame()
[289431.576] wl_pointer@18.motion(290925593, 287.691406, 46.703125)
[289431.728] wl_pointer@18.frame()
[289448.319] wl_pointer@18.motion(290925608, 286.785156, 46.703125)
[289448.411] wl_pointer@18.frame()
[289465.023] wl_pointer@18.motion(290925623, 285.859375, 46.703125)
[289465.091] wl_pointer@18.frame()
[289481.752] wl_pointer@18.motion(290925639, 285.402344, 46.703125)
[289481.838] wl_pointer@18.frame()
[289498.456] wl_pointer@18.motion(290925654, 284.960938, 46.703125)
[289498.550] wl_pointer@18.frame()
[289514.903] wl_pointer@18.motion(290925677, 284.296875, 46.703125)
[289515.047] wl_pointer@18.frame()
[289531.914] wl_pointer@18.motion(290925693, 283.867188, 46.703125)
[289531.985] wl_pointer@18.frame()
[289548.109] wl_pointer@18.motion(290925708, 283.460938, 46.703125)
[289548.178] wl_pointer@18.frame()
[289565.346] wl_pointer@18.motion(290925723, 283.066406, 46.703125)
[289565.430] wl_pointer@18.frame()
[289581.910] wl_pointer@18.motion(290925739, 282.699219, 46.703125)
[289581.996] wl_pointer@18.frame()

Here is where I press the left mouse button in order to begin moving the window:

[290028.746] wl_pointer@18.button(303014, 290926193, 272, 1)
[290028.883]  -> zxdg_toplevel_v6@17.move(wl_seat@10, 303014)
[290028.921] wl_pointer@18.frame()
[290032.157] wl_keyboard@19.leave(303015, wl_surface@15)
[290032.255] wl_pointer@18.leave(303016, wl_surface@15)
[290032.296] wl_pointer@18.frame()
[290032.323]  -> wl_surface@15.frame(new id wl_callback@25)
[290034.208]  -> wl_surface@15.attach(wl_buffer@24, 0, 0)
[290034.261]  -> wl_surface@15.damage(0, 0, 500, 400)
[290034.301]  -> wl_surface@15.commit()
[290046.563] wl_display@1.delete_id(25)
[290046.627] wl_buffer@24.release()
[290046.642] wl_callback@25.done(290926211)
[294808.688] wl_keyboard@19.modifiers(303017, 0, 0, 0, 0)
[294808.734] wl_keyboard@19.enter(303017, wl_surface@15, array)
[294808.751] wl_data_device@11.data_offer(new id wl_data_offer@23403088)
[294808.762] wl_data_offer@4278190081.offer("TARGETS")
[294808.769] wl_data_offer@4278190081.offer("_VIMENC_TEXT")
[294808.776] wl_data_offer@4278190081.offer("_VIM_TEXT")
[294808.782] wl_data_offer@4278190081.offer("text/plain;charset=utf-8")
[294808.788] wl_data_offer@4278190081.offer("UTF8_STRING")
[294808.795] wl_data_offer@4278190081.offer("STRING")
[294808.800] wl_data_offer@4278190081.offer("TEXT")
[294808.806] wl_data_offer@4278190081.offer("COMPOUND_TEXT")
[294808.812] wl_data_device@11.selection(wl_data_offer@4278190081)
[294808.819]  -> wl_data_offer@4278190080.destroy()
[294808.829] wl_pointer@18.enter(303018, wl_surface@15, 282.664062, 46.503906)
[294808.865]  -> wl_surface@12.attach(wl_buffer@22, 0, 0)
[294808.880]  -> wl_surface@12.damage(0, 0, 32, 32)
[294808.895]  -> wl_surface@12.commit()
[294808.900]  -> wl_pointer@18.set_cursor(303018, wl_surface@12, 5, 5)
[294808.917] wl_pointer@18.frame()
[294808.926]  -> wl_surface@15.frame(new id wl_callback@25)
[294809.905]  -> wl_surface@15.attach(wl_buffer@24, 0, 0)
[294809.942]  -> wl_surface@15.damage(0, 0, 500, 400)
[294809.955]  -> wl_surface@15.commit()
[294831.680] wl_display@1.delete_id(25)
[294831.748] wl_buffer@24.release()
[294831.760] wl_callback@25.done(290930996)
[296757.527] wl_pointer@18.motion(290932919, 282.664062, 42.105469)
[296757.771] wl_pointer@18.frame()
[296773.750] wl_pointer@18.motion(290932934, 282.664062, 33.085938)
[296773.860]  -> wl_surface@12.attach(wl_buffer@21, 0, 0)
[296773.899]  -> wl_surface@12.damage(0, 0, 32, 32)
[296773.941]  -> wl_surface@12.commit()
[296773.957]  -> wl_pointer@18.set_cursor(303018, wl_surface@12, 17, 7)
[296773.999] wl_pointer@18.frame()
[296790.035] wl_pointer@18.leave(303019, wl_surface@15)
[296790.126] wl_pointer@18.frame()
[297382.026] zxdg_toplevel_v6@17.configure(436, 336, array)
[297382.077] zxdg_surface_v6@16.configure(303021)
[297382.087]  -> zxdg_surface_v6@16.ack_configure(303021)
[297382.095] wl_keyboard@19.leave(303023, wl_surface@15)
[297382.111]  -> wl_compositor@4.create_region(new id wl_region@25)
[297382.122]  -> wl_compositor@4.create_region(new id wl_region@26)
[297382.136]  -> wl_region@26.add(32, 32, 436, 336)
[297382.169]  -> wl_surface@15.frame(new id wl_callback@27)
[297384.110]  -> wl_surface@15.set_opaque_region(wl_region@25)
[297384.196]  -> wl_region@25.destroy()
[297384.210]  -> wl_surface@15.set_input_region(wl_region@26)
[297384.223]  -> wl_region@26.destroy()
[297384.235]  -> wl_surface@15.attach(wl_buffer@24, 0, 0)
[297384.265]  -> wl_surface@15.damage(0, 0, 500, 400)
[297384.318]  -> wl_surface@15.commit()
[297419.225] wl_display@1.delete_id(25)
[297419.266] wl_display@1.delete_id(26)
[297419.281] wl_display@1.delete_id(27)
[297419.288] wl_buffer@24.release()
[297419.295] wl_callback@27.done(290933584)
elinorbgr commented 7 years ago

Thanks!

As a comparison, do you have a trace of wayland-window with your patch? We need to see what differs. Looks like the xdg_shell has changed the "configure" protocol (requiring an ack apparently). Maybe something is not implemented properly on this regard. I haven't yet taken the time to familiarize myself with xdg_shell.

mitchmindtree commented 7 years ago

Ah of course! Here's the full output of WAYLAND_DEBUG=1 cargo run --example simple_window using this new xdg-shell branch:

[ 92682.377]  -> wl_display@1.get_registry(new id wl_registry@2)
[ 92682.400]  -> wl_display@1.sync(new id wl_callback@3)
[ 92682.537] wl_display@1.delete_id(3)
[ 92682.543] wl_registry@2.global(1, "wl_drm", 2)
[ 92682.554] wl_registry@2.global(2, "wl_compositor", 3)
[ 92682.560] wl_registry@2.global(3, "wl_shm", 1)
[ 92682.567] wl_registry@2.global(4, "wl_output", 2)
[ 92682.582] wl_registry@2.global(5, "wl_data_device_manager", 3)
[ 92682.591] wl_registry@2.global(6, "gtk_primary_selection_device_manager", 1)
[ 92682.600] wl_registry@2.global(7, "zxdg_shell_v6", 1)
[ 92682.612] wl_registry@2.global(8, "wl_shell", 1)
[ 92682.620] wl_registry@2.global(9, "gtk_shell1", 1)
[ 92682.630] wl_registry@2.global(10, "wl_subcompositor", 1)
[ 92682.642]  -> wl_registry@2.bind(2, "wl_compositor", 3, new id [unknown]@4)
[ 92682.654]  -> wl_registry@2.bind(10, "wl_subcompositor", 1, new id [unknown]@5)
[ 92682.664]  -> wl_registry@2.bind(3, "wl_shm", 1, new id [unknown]@6)
[ 92682.673]  -> wl_registry@2.bind(7, "zxdg_shell_v6", 1, new id [unknown]@7)
[ 92682.682] wl_registry@2.global(11, "zwp_pointer_gestures_v1", 1)
[ 92682.689] wl_registry@2.global(12, "zwp_tablet_manager_v2", 1)
[ 92682.695] wl_registry@2.global(13, "wl_seat", 5)
[ 92682.702] wl_registry@2.global(14, "zwp_relative_pointer_manager_v1", 1)
[ 92682.708] wl_registry@2.global(15, "zwp_pointer_constraints_v1", 1)
[ 92682.714] wl_registry@2.global(16, "zxdg_exporter_v1", 1)
[ 92682.720] wl_registry@2.global(17, "zxdg_importer_v1", 1)
[ 92682.728] wl_callback@3.done(637)
[ 92682.765]  -> wl_compositor@4.create_surface(new id wl_surface@3)
[ 92682.772]  -> wl_shm@6.create_pool(new id wl_shm_pool@8, fd 5, 64)
[ 92682.780]  -> wl_shm_pool@8.create_buffer(new id wl_buffer@9, 0, 4, 4, 16, 0)
[ 92682.795]  -> wl_registry@2.bind(13, "wl_seat", 1, new id [unknown]@10)
[ 92682.812]  -> wl_shm@6.create_pool(new id wl_shm_pool@11, fd 7, 1536)
[ 92682.821]  -> wl_compositor@4.create_surface(new id wl_surface@12)
[ 92682.826]  -> wl_compositor@4.create_surface(new id wl_surface@13)
[ 92682.830]  -> wl_compositor@4.create_surface(new id wl_surface@14)
[ 92682.834]  -> wl_compositor@4.create_surface(new id wl_surface@15)
[ 92682.841]  -> wl_subcompositor@5.get_subsurface(new id wl_subsurface@16, wl_surface@12, wl_surface@3)
[ 92682.849]  -> wl_subcompositor@5.get_subsurface(new id wl_subsurface@17, wl_surface@13, wl_surface@3)
[ 92682.858]  -> wl_subcompositor@5.get_subsurface(new id wl_subsurface@18, wl_surface@14, wl_surface@3)
[ 92682.865]  -> wl_subcompositor@5.get_subsurface(new id wl_subsurface@19, wl_surface@15, wl_surface@3)
[ 92682.874]  -> wl_subsurface@16.set_desync()
[ 92682.876]  -> wl_subsurface@17.set_desync()
[ 92682.879]  -> wl_subsurface@18.set_desync()
[ 92682.881]  -> wl_subsurface@19.set_desync()
[ 92682.884]  -> zxdg_shell_v6@7.get_xdg_surface(new id zxdg_surface_v6@20, wl_surface@3)
[ 92682.890]  -> zxdg_surface_v6@20.get_toplevel(new id zxdg_toplevel_v6@21)
[ 92682.895]  -> wl_surface@3.commit()
[ 92682.898]  -> wl_seat@10.get_pointer(new id wl_pointer@22)
[ 92682.984]  -> wl_shm@6.create_pool(new id wl_shm_pool@23, fd 9, 1024)
[ 92683.089]  -> wl_shm_pool@23.resize(4352)
[ 92683.114]  -> wl_shm_pool@23.resize(11008)
[ 92683.159]  -> wl_shm_pool@23.resize(24320)
[ 92683.283]  -> wl_shm_pool@23.resize(50944)
[ 92683.450]  -> wl_shm_pool@23.resize(104192)
[ 92684.054]  -> wl_shm_pool@23.resize(210688)
[ 92684.193]  -> wl_shm_pool@23.resize(423680)
[ 92685.260]  -> wl_shm_pool@23.resize(849664)
[ 92687.587]  -> wl_shm_pool@23.resize(1701632)
[ 92692.950]  -> wl_compositor@4.create_surface(new id wl_surface@24)
[ 92692.967]  -> wl_shm_pool@11.resize(3072)
[ 92694.637]  -> wl_shm_pool@11.create_buffer(new id wl_buffer@25, 0, 32, 24, 128, 0)
[ 92694.652]  -> wl_surface@12.attach(wl_buffer@25, 0, 0)
[ 92694.659]  -> wl_subsurface@16.set_position(-8, -24)
[ 92694.665]  -> wl_shm_pool@11.create_buffer(new id wl_buffer@26, 0, 8, 16, 32, 0)
[ 92694.677]  -> wl_surface@13.attach(wl_buffer@26, 0, 0)
[ 92694.689]  -> wl_subsurface@17.set_position(16, 0)
[ 92694.694]  -> wl_shm_pool@11.create_buffer(new id wl_buffer@27, 0, 32, 8, 128, 0)
[ 92694.706]  -> wl_surface@14.attach(wl_buffer@27, 0, 0)
[ 92694.712]  -> wl_subsurface@18.set_position(-8, 16)
[ 92694.717]  -> wl_shm_pool@11.create_buffer(new id wl_buffer@28, 0, 8, 16, 32, 0)
[ 92694.731]  -> wl_surface@15.attach(wl_buffer@28, 0, 0)
[ 92694.739]  -> wl_subsurface@19.set_position(-8, 0)
[ 92694.744]  -> wl_surface@12.commit()
[ 92694.747]  -> wl_surface@13.commit()
[ 92694.749]  -> wl_surface@14.commit()
[ 92694.752]  -> wl_surface@15.commit()
[ 92706.360] zxdg_toplevel_v6@21.configure(0, 0, array)
    configure: resizing to (100, 100)
[ 92706.407] zxdg_surface_v6@20.configure(638)
[ 92706.413]  -> zxdg_surface_v6@20.ack_configure(638)
[ 92706.439]  -> wl_buffer@25.destroy()
[ 92706.444]  -> wl_buffer@26.destroy()
[ 92706.448]  -> wl_buffer@27.destroy()
[ 92706.451]  -> wl_buffer@28.destroy()
[ 92706.461]  -> wl_shm_pool@11.resize(11136)
[ 92712.908]  -> wl_shm_pool@11.create_buffer(new id wl_buffer@29, 0, 116, 24, 464, 0)
[ 92712.940]  -> wl_surface@12.attach(wl_buffer@29, 0, 0)
[ 92712.966]  -> wl_subsurface@16.set_position(-8, -24)
[ 92712.973]  -> wl_shm_pool@11.create_buffer(new id wl_buffer@30, 0, 8, 100, 32, 0)
[ 92712.987]  -> wl_surface@13.attach(wl_buffer@30, 0, 0)
[ 92712.993]  -> wl_subsurface@17.set_position(100, 0)
[ 92712.998]  -> wl_shm_pool@11.create_buffer(new id wl_buffer@31, 0, 116, 8, 464, 0)
[ 92713.010]  -> wl_surface@14.attach(wl_buffer@31, 0, 0)
[ 92713.017]  -> wl_subsurface@18.set_position(-8, 100)
[ 92713.023]  -> wl_shm_pool@11.create_buffer(new id wl_buffer@32, 0, 8, 100, 32, 0)
[ 92713.035]  -> wl_surface@15.attach(wl_buffer@32, 0, 0)
[ 92713.041]  -> wl_subsurface@19.set_position(-8, 0)
[ 92713.047]  -> wl_surface@12.commit()
[ 92713.050]  -> wl_surface@13.commit()
[ 92713.053]  -> wl_surface@14.commit()
[ 92713.055]  -> wl_surface@15.commit()
[ 92719.039]  -> wl_shm_pool@8.resize(40000)
[ 92719.067]  -> wl_buffer@9.destroy()
[ 92719.075]  -> wl_shm_pool@8.create_buffer(new id wl_buffer@33, 0, 100, 100, 400, 0)
[ 92719.090]  -> wl_surface@3.attach(wl_buffer@33, 0, 0)
[ 92719.097]  -> wl_surface@3.commit()
[ 92734.814] wl_display@1.delete_id(25)
[ 92734.846] wl_display@1.delete_id(26)
[ 92734.851] wl_display@1.delete_id(27)
[ 92734.856] wl_display@1.delete_id(28)
[ 92734.860] wl_display@1.delete_id(9)
[ 92734.865] zxdg_toplevel_v6@21.configure(0, 0, array)
    configure: resizing to (100, 100)
[ 92734.895] zxdg_surface_v6@20.configure(640)
[ 92734.902]  -> zxdg_surface_v6@20.ack_configure(640)
[ 92734.915]  -> wl_buffer@29.destroy()
[ 92734.920]  -> wl_buffer@30.destroy()
[ 92734.924]  -> wl_buffer@31.destroy()
[ 92734.928]  -> wl_buffer@32.destroy()
[ 92741.987]  -> wl_shm_pool@11.create_buffer(new id wl_buffer@34, 0, 116, 24, 464, 0)
[ 92742.052]  -> wl_surface@12.attach(wl_buffer@34, 0, 0)
[ 92742.062]  -> wl_subsurface@16.set_position(-8, -24)
[ 92742.071]  -> wl_shm_pool@11.create_buffer(new id wl_buffer@35, 0, 8, 100, 32, 0)
[ 92742.092]  -> wl_surface@13.attach(wl_buffer@35, 0, 0)
[ 92742.103]  -> wl_subsurface@17.set_position(100, 0)
[ 92742.109]  -> wl_shm_pool@11.create_buffer(new id wl_buffer@36, 0, 116, 8, 464, 0)
[ 92742.122]  -> wl_surface@14.attach(wl_buffer@36, 0, 0)
[ 92742.129]  -> wl_subsurface@18.set_position(-8, 100)
[ 92742.135]  -> wl_shm_pool@11.create_buffer(new id wl_buffer@37, 0, 8, 100, 32, 0)
[ 92742.147]  -> wl_surface@15.attach(wl_buffer@37, 0, 0)
[ 92742.155]  -> wl_subsurface@19.set_position(-8, 0)
[ 92742.162]  -> wl_surface@12.commit()
[ 92742.166]  -> wl_surface@13.commit()
[ 92742.169]  -> wl_surface@14.commit()
[ 92742.171]  -> wl_surface@15.commit()
[ 92742.176]  -> wl_buffer@33.destroy()
[ 92742.182]  -> wl_shm_pool@8.create_buffer(new id wl_buffer@38, 0, 100, 100, 400, 0)
[ 92742.197]  -> wl_surface@3.attach(wl_buffer@38, 0, 0)
[ 92742.204]  -> wl_surface@3.commit()
[ 96640.211] wl_display@1.delete_id(29)
[ 96640.300] wl_display@1.delete_id(30)
[ 96640.323] wl_display@1.delete_id(31)
[ 96640.365] wl_display@1.delete_id(32)
[ 96640.384] wl_display@1.delete_id(33)
[ 96640.404] wl_pointer@22.enter(643, wl_surface@13, 7.722656, 80.187500)
[ 96640.488]  -> wl_shm_pool@23.create_buffer(new id wl_buffer@39, 453888, 24, 24, 96, 0)
[ 96640.562]  -> wl_surface@24.attach(wl_buffer@39, 0, 0)
[ 96640.598]  -> wl_surface@24.damage(0, 0, 24, 24)
[ 96640.638]  -> wl_surface@24.commit()
[ 96640.655]  -> wl_pointer@22.set_cursor(643, wl_surface@24, 19, 13)
[ 96640.704] wl_pointer@22.motion(6451419, 7.722656, 80.187500)
[ 96659.054] wl_pointer@22.motion(6451434, 7.339844, 80.187500)
[ 96675.140] wl_pointer@22.motion(6451450, 7.148438, 80.187500)
[ 96709.472] wl_pointer@22.motion(6451488, 6.953125, 80.187500)
[ 96740.161] wl_pointer@22.motion(6451519, 6.761719, 80.187500)
[ 96801.834] wl_pointer@22.motion(6451580, 6.550781, 80.187500)
[ 96862.926] wl_pointer@22.motion(6451642, 6.316406, 80.187500)
[ 97062.651] wl_pointer@22.motion(6451842, 6.097656, 80.187500)
[ 97079.204] wl_pointer@22.motion(6451857, 5.675781, 80.187500)
[ 97095.168] wl_pointer@22.motion(6451873, 5.253906, 80.187500)

Here is where I press the right edge with the left mouse button in an attempt to begin resizing it:

[ 97669.311] wl_pointer@22.button(644, 6452449, 272, 1)
[ 97669.395]  -> zxdg_toplevel_v6@21.resize(wl_seat@10, 644, 8)
[ 98391.711] wl_pointer@22.motion(6453172, 6.027344, 80.187500)
[ 98407.867] wl_pointer@22.motion(6453188, 7.472656, 80.187500)
[ 98424.317] wl_pointer@22.motion(6453203, 8.820312, 80.187500)
[ 98440.725] wl_pointer@22.motion(6453219, 10.035156, 80.187500)
[ 98457.171] wl_pointer@22.motion(6453234, 11.300781, 80.187500)
[ 98473.806] wl_pointer@22.motion(6453249, 12.613281, 80.187500)
[ 98490.482] wl_pointer@22.motion(6453265, 13.976562, 80.187500)
[ 98506.523] wl_pointer@22.motion(6453288, 16.789062, 80.187500)
[ 98522.926] wl_pointer@22.motion(6453303, 20.152344, 80.187500)
[ 98539.564] wl_pointer@22.motion(6453319, 23.515625, 80.187500)
[ 98556.274] wl_pointer@22.motion(6453334, 26.878906, 80.187500)
[ 98572.990] wl_pointer@22.motion(6453349, 30.246094, 80.187500)
[ 98589.585] wl_pointer@22.motion(6453365, 33.609375, 80.187500)
[ 98606.193] wl_pointer@22.motion(6453380, 36.972656, 80.187500)
[ 98622.259] wl_pointer@22.motion(6453403, 40.894531, 80.187500)
[ 98639.312] wl_pointer@22.motion(6453419, 43.136719, 80.187500)
[ 98656.998] wl_pointer@22.motion(6453434, 45.378906, 80.187500)
[ 98673.535] wl_pointer@22.motion(6453449, 47.621094, 80.187500)
[ 98690.384] wl_pointer@22.motion(6453465, 49.867188, 80.187500)
[ 98706.804] wl_pointer@22.motion(6453480, 52.109375, 80.187500)
[ 98723.162] wl_pointer@22.motion(6453503, 56.031250, 81.277344)
[ 98740.102] wl_pointer@22.motion(6453519, 58.250000, 81.277344)
[ 98756.853] wl_pointer@22.motion(6453534, 60.472656, 81.277344)
[ 98773.408] wl_pointer@22.motion(6453549, 61.558594, 81.277344)
[ 98790.221] wl_pointer@22.motion(6453565, 62.593750, 81.277344)
[ 98807.000] wl_pointer@22.motion(6453580, 63.582031, 81.277344)
[ 98823.473] wl_pointer@22.motion(6453603, 64.964844, 81.277344)
[ 98840.144] wl_pointer@22.motion(6453619, 65.808594, 81.277344)
[ 98885.757] wl_pointer@22.motion(6453665, 66.179688, 81.277344)
[ 98923.710] wl_pointer@22.motion(6453703, 66.496094, 81.277344)
[ 98940.700] wl_pointer@22.motion(6453711, 66.792969, 81.277344)
[ 98956.694] wl_pointer@22.motion(6453734, 67.078125, 81.554688)
[ 98973.463] wl_pointer@22.motion(6453749, 68.214844, 81.835938)
[ 98990.163] wl_pointer@22.motion(6453765, 69.410156, 82.421875)
[ 99006.751] wl_pointer@22.motion(6453780, 70.671875, 82.421875)
[ 99023.472] wl_pointer@22.motion(6453803, 72.320312, 82.421875)
[ 99040.236] wl_pointer@22.motion(6453819, 72.992188, 82.421875)
[ 99056.728] wl_pointer@22.motion(6453834, 73.750000, 82.421875)
[ 99073.495] wl_pointer@22.motion(6453849, 74.617188, 82.421875)
[ 99089.977] wl_pointer@22.motion(6453865, 75.503906, 82.421875)
[ 99107.050] wl_pointer@22.motion(6453880, 76.339844, 82.421875)
[ 99123.474] wl_pointer@22.motion(6453903, 77.121094, 82.421875)
[ 99161.875] wl_pointer@22.motion(6453942, 77.460938, 82.421875)
[ 99178.338] wl_pointer@22.motion(6453957, 78.402344, 82.726562)
[ 99194.459] wl_pointer@22.motion(6453972, 79.714844, 83.367188)
[ 99211.002] wl_pointer@22.motion(6453988, 81.480469, 83.703125)
[ 99227.624] wl_pointer@22.motion(6454003, 82.988281, 84.074219)
[ 99244.710] wl_pointer@22.motion(6454019, 84.578125, 84.074219)
[ 99261.040] wl_pointer@22.motion(6454034, 85.390625, 84.074219)
[ 99277.358] wl_pointer@22.motion(6454057, 86.660156, 84.074219)
[ 99293.585] wl_pointer@22.motion(6454072, 87.625000, 84.074219)
[ 99310.255] wl_pointer@22.motion(6454088, 88.539062, 84.074219)
[ 99326.452] wl_pointer@22.motion(6454095, 88.976562, 84.074219)
[ 99343.286] wl_pointer@22.motion(6454111, 89.386719, 84.074219)
[ 99360.223] wl_pointer@22.motion(6454134, 90.128906, 84.074219)
[ 99376.372] wl_pointer@22.motion(6454149, 91.546875, 84.421875)
[ 99392.503] wl_pointer@22.motion(6454172, 95.058594, 85.562500)
[ 99409.056] wl_pointer@22.motion(6454188, 97.746094, 85.988281)
[ 99425.566] wl_pointer@22.motion(6454203, 100.707031, 86.949219)
[ 99442.239] wl_pointer@22.motion(6454218, 103.941406, 87.488281)
[ 99459.399] wl_pointer@22.motion(6454234, 107.304688, 88.031250)
[ 99475.485] wl_pointer@22.motion(6454249, 110.667969, 88.031250)
[ 99492.100] wl_pointer@22.motion(6454265, 114.035156, 88.031250)
[ 99508.883] wl_pointer@22.motion(6454288, 119.078125, 88.578125)
[ 99525.675] wl_pointer@22.motion(6454303, 122.441406, 88.578125)
[ 99542.291] wl_pointer@22.motion(6454318, 125.804688, 88.578125)
[ 99558.895] wl_pointer@22.motion(6454334, 128.046875, 88.578125)
[ 99575.590] wl_pointer@22.motion(6454349, 130.289062, 88.578125)
[ 99592.236] wl_pointer@22.motion(6454365, 131.972656, 88.578125)
[ 99608.844] wl_pointer@22.motion(6454388, 133.656250, 88.578125)
[ 99625.759] wl_pointer@22.motion(6454403, 134.738281, 88.578125)
[ 99642.595] wl_pointer@22.motion(6454418, 135.722656, 88.578125)
[ 99659.083] wl_pointer@22.motion(6454434, 136.609375, 88.578125)
[ 99675.633] wl_pointer@22.motion(6454449, 137.828125, 88.578125)
[ 99692.014] wl_pointer@22.motion(6454465, 139.449219, 88.578125)
[ 99708.962] wl_pointer@22.motion(6454488, 141.929688, 88.578125)
[ 99725.766] wl_pointer@22.motion(6454503, 143.699219, 88.578125)
[ 99742.180] wl_pointer@22.motion(6454518, 145.570312, 88.578125)
[ 99759.188] wl_pointer@22.motion(6454534, 147.539062, 88.578125)
[ 99775.610] wl_pointer@22.motion(6454549, 149.605469, 88.578125)
[ 99792.313] wl_pointer@22.motion(6454565, 151.761719, 88.578125)
[ 99809.090] wl_pointer@22.motion(6454588, 155.015625, 88.578125)
[ 99825.665] wl_pointer@22.motion(6454603, 157.183594, 88.578125)
[ 99842.028] wl_pointer@22.motion(6454618, 159.351562, 88.578125)
[ 99858.842] wl_pointer@22.motion(6454634, 161.519531, 88.578125)
[ 99875.406] wl_pointer@22.motion(6454649, 163.687500, 88.578125)
[ 99892.430] wl_pointer@22.motion(6454672, 166.941406, 88.578125)
[ 99908.806] wl_pointer@22.motion(6454688, 169.113281, 88.578125)
[ 99925.366] wl_pointer@22.motion(6454703, 171.281250, 88.578125)
[ 99942.093] wl_pointer@22.motion(6454718, 173.449219, 88.578125)
[ 99958.783] wl_pointer@22.motion(6454734, 174.511719, 88.578125)
[ 99975.070] wl_pointer@22.motion(6454749, 175.519531, 88.578125)
[ 99991.963] wl_pointer@22.motion(6454772, 176.941406, 88.578125)
[100009.084] wl_pointer@22.motion(6454788, 177.824219, 88.578125)
[100025.410] wl_pointer@22.motion(6454795, 178.250000, 88.578125)
[100046.004] wl_pointer@22.motion(6454826, 178.640625, 88.578125)
[100084.930] wl_pointer@22.motion(6454865, 178.984375, 88.578125)
[100101.000] wl_pointer@22.motion(6454880, 179.609375, 88.578125)
[100117.567] wl_pointer@22.motion(6454895, 180.523438, 88.578125)
[100133.748] wl_pointer@22.motion(6454911, 181.128906, 88.578125)
[100150.340] wl_pointer@22.motion(6454926, 181.738281, 88.578125)
[100166.726] wl_pointer@22.motion(6454941, 182.347656, 88.578125)
[100182.874] wl_pointer@22.motion(6454957, 182.957031, 88.578125)
[100199.202] wl_pointer@22.motion(6454972, 183.574219, 88.578125)
[100215.954] wl_pointer@22.motion(6454988, 183.914062, 88.578125)
[100844.904] wl_pointer@22.button(645, 6455626, 272, 0)
[100845.037] wl_pointer@22.leave(646, wl_surface@13)
[100845.103]  -> wl_shm_pool@23.create_buffer(new id wl_buffer@40, 787968, 24, 24, 96, 0)
[100845.232]  -> wl_surface@24.attach(wl_buffer@40, 0, 0)
[100845.265]  -> wl_surface@24.damage(0, 0, 24, 24)
[100845.297]  -> wl_surface@24.commit()
[100845.308]  -> wl_pointer@22.set_cursor(646, wl_surface@24, 4, 4)
[108361.999] zxdg_toplevel_v6@21.configure(0, 0, array)
    configure: resizing to (100, 100)
[108362.089] zxdg_surface_v6@20.configure(648)
[108362.103]  -> zxdg_surface_v6@20.ack_configure(648)
[108362.124]  -> wl_buffer@34.destroy()
[108362.133]  -> wl_buffer@35.destroy()
[108362.140]  -> wl_buffer@36.destroy()
[108362.147]  -> wl_buffer@37.destroy()
[108375.830]  -> wl_shm_pool@11.create_buffer(new id wl_buffer@41, 0, 116, 24, 464, 0)
[108375.906]  -> wl_surface@12.attach(wl_buffer@41, 0, 0)
[108375.936]  -> wl_subsurface@16.set_position(-8, -24)
[108375.963]  -> wl_shm_pool@11.create_buffer(new id wl_buffer@42, 0, 8, 100, 32, 0)
[108375.999]  -> wl_surface@13.attach(wl_buffer@42, 0, 0)
[108376.019]  -> wl_subsurface@17.set_position(100, 0)
[108376.033]  -> wl_shm_pool@11.create_buffer(new id wl_buffer@43, 0, 116, 8, 464, 0)
[108376.066]  -> wl_surface@14.attach(wl_buffer@43, 0, 0)
[108376.087]  -> wl_subsurface@18.set_position(-8, 100)
[108376.103]  -> wl_shm_pool@11.create_buffer(new id wl_buffer@44, 0, 8, 100, 32, 0)
[108376.138]  -> wl_surface@15.attach(wl_buffer@44, 0, 0)
[108376.175]  -> wl_subsurface@19.set_position(-8, 0)
[108376.193]  -> wl_surface@12.commit()
[108376.200]  -> wl_surface@13.commit()
[108376.207]  -> wl_surface@14.commit()
[108376.214]  -> wl_surface@15.commit()
[108376.222]  -> wl_buffer@38.destroy()
[108376.230]  -> wl_shm_pool@8.create_buffer(new id wl_buffer@45, 0, 100, 100, 400, 0)
[108376.268]  -> wl_surface@3.attach(wl_buffer@45, 0, 0)
[108376.286]  -> wl_surface@3.commit()

Looks like the xdg_shell has changed the "configure" protocol (requiring an ack apparently).

Yeah I noticed this too - I attempted to do this by calling ack_configure within the zxdg_surface_v6's Handler callback here - does this look like it's on the right track?.

elinorbgr commented 7 years ago

I think I found the issue, but we would need a way to confirm it.

In mutter, when we try doing a resize, he callback is this function: https://github.com/GNOME/mutter/blob/e6eac46629335ac341e3207df8b2aac15fb9ffa7/src/wayland/meta-wayland-xdg-shell.c#L282-L299

Given we simply have no answer from the compositor, I guess meta_wayland_seat_get_grab_info(..) returns false. Now, it is defined here: https://github.com/GNOME/mutter/blob/5306d36522a45e8657231ac85f030bb4152ad29d/src/wayland/meta-wayland-seat.c#L406-L444

As we can see, in our context (a pointer event), the only way this can return false is if meta_wayland_pointer_can_grab_surface returns false. It is defined here: https://github.com/GNOME/mutter/blob/6fa8238ebf5f1a1854b748533ad99ea15d647896/src/wayland/meta-wayland-pointer.c#L1122-L1128

gboolean
meta_wayland_pointer_can_grab_surface (MetaWaylandPointer *pointer,
                                       MetaWaylandSurface *surface,
                                       uint32_t            serial)
{
  return (pointer->grab_serial == serial &&
          pointer->focus_surface == surface);
}

As the serial is good, then most likely the second equality evaluates to false.

Which is plausible, as at this point, the focus surface is the subsurface we use to draw the borders, while the surface we try to grab is the parent surface. The weston client does not use subsurfaces to draw its contents, as such it does not have any problem.

I don't know if it's mutter or us who are at fault here, I'll ask on #wayland IRC.

elinorbgr commented 7 years ago

Well, apparently it is mutter's fault. :)

mitchmindtree commented 7 years ago

Really nice work in tracking this down!

So to correct the behaviour in mutter, meta_wayland_pointer_can_grab_surface should return true if either pointer->focus_surface == surface or if pointer->focus_surface is equal to any of the surface's subsurfaces?

I don't know if it is mutter or us who are at fault here, I'll ask on #wayland IRC.

Well, apparently it is mutter's fault. :)

Do you happen to have the log for this discussion? I'm curious about the discussion behind this, as I'm considering making the patch myself to get things moving along, however I'd like to gather what info I can first.

elinorbgr commented 7 years ago

Oh, it was a very short discussion:

M-Levans Hi, question about pointer grabs: is it legal for a client to start an interactive resize/move on a surface using a serial grab from a pointer click that occured on a subsurface of this surface? Looks like weston allows it but mutter does not. (context: I'm using subsurfaces to draw window decorations). SardemFF7 yes, it should be legal SardemFF7 or there would be no way to use subsurfaces for decorations, which would be a really bad idea SardemFF7 jadahl: ā†‘ jadahl M-Levans: sounds reasonable, could you file a bug? on the mutter product in gnomes bugzilla M-Levans jadahl: this is actually my diagnostic of https://bugzilla.gnome.org/show_bug.cgi?id=781811, should I post the details there? M-Levans Or rather create a new bug? [..] jadahl M-Levans: sure, comment on it there


So to correct the behaviour in mutter, meta_wayland_pointer_can_grab_surface should return true if either pointer->focus_surface == surface or if pointer->focus_surface is equal to any of the surface's subsurfaces?

This is how I understand it too.

mitchmindtree commented 7 years ago

Bug Update

The move/resize bug I was experiencing should be fixed in the next gnome update! It seems that making the fix upstream fixes the problem of moving and resizing regardless of this PR.

This PR

@vberger I have begun making the changes you mentioned in your previous comment.

I believe this is mostly implemented however I'm not confident this is the nicest design. I'm unsure how to best modify the Handler pattern to handle the different shells. I've changed the Handler::configure method to take a Configure enum, which provides the shell-specific data.

The example has not yet been updated as I'm unsure how to check whether xdg_shell is available and fall back to wl_shell otherwise. It seems this process is currently wrapped up by the wayland_env macro.

elinorbgr commented 7 years ago

I've looked at the current state of the diff, overall it looks good šŸ‘

Now, to answer your questions:

As xdg_shell is a global that is not expected to appear/disappear, it should be actually quite simple. Taking inspiration from this example: https://github.com/Smithay/wayland-rs/blob/master/wayland-client/examples/simple_client.rs , you don't provide XdgShell as a global to wayland_env!(), so it won't be auto-binded. But after the firsts roundtrips, you manually try to bind it, with something like:

let mut xdg_shell = None;
for &(name, ref interface, version) in env.globals() {
    if interface == ZxdgShellV6::interface_name() {
        xdg_shell = Some(registry.bind::<ZxdgShellV6>(name, version));
        /* also register xdg_shell to its handler in the events_queue */
        break;
    }
}

Now I just realized an issue with the design: if xdg_shell is an optional feature, we have a few enums whose number of variants depends on enabled cargo features, which is not really a good thing, as cargo can enable them on the fly. In general, enabling a cargo feature whould not be a breaking change API-wise, but changing the number of variants of an enum is... Not sure what would be the best course to handle that. The good side is that since the last rust version, xdg_shell can actually be compiled on rust stable, so we may consider just not hiding it behind a cargo feature?

mitchmindtree commented 7 years ago

But after the firsts roundtrips, you manually try to bind it, with something like...

Thanks for the example, I'll have a go at implementing this now.

The good side is that since the last rust version, xdg_shell can actually be compiled on rust stable, so we may consider just not hiding it behind a cargo feature?

Sounds good to me! I'll change this too.

mitchmindtree commented 7 years ago

Ok, I think I've addressed all your points! However, I'm unsure what you mean by this line in your example:

        /* also register xdg_shell to its handler in the events_queue */

Could you provide an example of this? The example seems to work as is, however I could very well be missing something!

elinorbgr commented 7 years ago

Yes, sure, this is something the client will need to do with xdg_shell, (but is out of scope of wayland-window I'd say, but it's good to have it in the example).

The client needs to handle this event from the server: https://smithay.github.io/wayland-rs/wayland_protocols/unstable/xdg_shell/client/zxdg_shell_v6/trait.Handler.html by simply answering "pong" to these "ping"s. Otherwise, the server may mark the client as "unresponsive".

This is pretty simple:

// declare a handler struct to handle the xdg_shell events:
// This one does not need any state
struct XdgShellPingHandler;

// The implementation of this handler trait is very simple
impl xdg_shell_v6::Handler for SdgShellPingHandler {
    fn ping(&mut self, evqh: &mut EventQueueHandle, proxy: &ZxdgShellV6, serial: u32) {
        proxy.pong(serial);
    }
}

/*
 * ...
 */

// later, in the match:
let shell = match (xdg_shell, wl_shell) {
    (Some(shell), _) => {
        // We use xdg_shell, so we'll need to answer to the pings
        let ping_handler_id = event_queue.add_handler(XdgShellPingHandler);
        event_queue.register::<_,XdgShellPingHandler>(&shell, ping_handler_id);
        wayland_window::Shell::Xdg(shell)
    },
    (_, Some(shell)) => {
        wayland_window::Shell::Wl(shell)
    },
    _ => panic!("No available shell"),
};

PS: I'm currently having a look at your changes, but I wanted to answer your question first.

elinorbgr commented 7 years ago

See the few comments I left, but other than that this looks really good! šŸ‘

Thanks a lot for your effort in doing that!

mitchmindtree commented 7 years ago

No problem! I've addressed each of your most recent comments, let me know if there's anything else, otherwise I think this should be good to go :+1:

elinorbgr commented 7 years ago

Just found a last thing, but other than that, we're good!

mitchmindtree commented 7 years ago

Done!

elinorbgr commented 7 years ago

Awesome, thanks!

I'll merge this, I have still some stuff to do before releasing the next version (mostly fixing #10 which has been open for far too long, and a few interactions with wayland-client I have in mind). Hopefully it should be a matter of days. :)