-
Notifications
You must be signed in to change notification settings - Fork 209
Closed
Description
Smithay calls the compositor's grab()
handler right away, wherein the compositor is supposed to check xdg-popup's parent for validity:
The parent of a grabbing popup must either be an xdg_toplevel surface or another xdg_popup with an explicit grab.
However, Qt layer-shell seems to grab the popup right before assigning it a parent, breaking this logic:
[ 392910.890] {Default Queue} -> xdg_wm_base#3.get_xdg_surface(new id xdg_surface#52, wl_surface#45)
[ 392910.986] {Default Queue} -> xdg_surface#52.get_popup(new id xdg_popup#54, nil, xdg_positioner#53)
[ 392911.014] {Default Queue} -> xdg_popup#54.grab(wl_seat#15, 168583)
[ 392911.030] {Default Queue} -> zwlr_layer_surface_v1#43.get_popup(xdg_popup#54)
[ 392911.089] {Default Queue} -> wl_surface#45.commit()
[ 392911.209] {Default Queue} -> xdg_popup#54.reposition(xdg_positioner#55, 1)
[ 392911.934] {Default Queue} xdg_popup#54.configure(2121, 25, 173, 129)
[ 392911.947] {Default Queue} xdg_surface#52.configure(168585)
[ 392911.959] {Default Queue} -> xdg_surface#52.ack_configure(168585)
[ 392911.999] {Default Queue} xdg_popup#54.repositioned(1)
[ 392912.012] {Default Queue} xdg_popup#54.configure(2121, 25, 173, 129)
[ 392912.023] {Default Queue} xdg_surface#52.configure(168586)
[ 392912.082] {Default Queue} -> xdg_surface#52.ack_configure(168586)
[ 392912.119] {Default Queue} -> xdg_surface#52.set_window_geometry(0, 0, 173, 129)
[ 392912.150] {Default Queue} -> xdg_surface#52.set_window_geometry(0, 0, 173, 129)
[ 392913.165] {Default Queue} -> wl_surface#45.commit()
Therefore, perhaps Smithay should delay calling the grab()
handler until the commit?
Apparently, this ordering works fine in kwin. If not, then this would be a Qt bug instead. I'm not sure the protocol is clear on this.
Metadata
Metadata
Assignees
Labels
No labels