Bug 1464916

Summary: [Wayland] toolbar menu is not shown after some time
Product: [Fedora] Fedora Reporter: Martin Stransky <stransky>
Component: firefoxAssignee: Martin Stransky <stransky>
Status: CLOSED RAWHIDE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: rawhideCC: cosmo0920.oucc, extras-qa, gecko-bugs-nobody, jhorak, kengert, pjasicek
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2017-07-14 07:34:12 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1054334    

Description Martin Stransky 2017-06-26 08:52:42 UTC
Description of problem:

https://github.com/stransky/gecko-dev

When pop up menu is opened repeatedly it's not shown. May be caused by missing parent gdk surface (gdk_wayland_window_get_wl_surface() returns null) and when background surface is transparent (after pop-up transparency fix).

Comment 1 Martin Stransky 2017-07-10 20:17:13 UTC
It may be caused by calling wl_surface_damage() to buffer which is released afterward and a new buffer is attached with zero damage area so nothing is rendered:

[3841717.306]  -> wl_surface(0, 0, 532, 429)
>>>> **************** <<<<
[3841724.027] wl_buffer()
[3841724.041] wl_callback(8433000)
[3841724.048]  -> wl_surface(new id wl_callback@124)
[3841724.054]  -> wl_surface(wl_buffer@53, 0, 0)
[3841724.061]  -> wl_surface()

Comment 2 Martin Stransky 2017-07-10 20:18:08 UTC
So looks like we need to call wl_surface_damage after wl_surface_attach.

Comment 3 Martin Stransky 2017-07-12 09:14:10 UTC
Fix is committed to commit 32899bf0d996dbe1008bd9abd79724a8217fb6b8 but it's seem incomplete - I still see the missing popups.

Comment 4 Martin Stransky 2017-07-13 10:42:35 UTC
Hm, that does not fix that. The real problem here is that we wait for wl_surface frame callback to draw but the wl_surface is not visible. So the frame callback is not going to be called and we don't know that.