[writing a compositor] Compositor freezes when popup menu clicked

adlo adloconwy at gmail.com
Thu Aug 9 08:01:15 UTC 2018


It seems to particularly refer to this part of the code:

https://github.com/adlocode/test-libweston-desktop/blob/master/shell.c#L179

If I remove the calls to weston_layer_entry_remove() and/or weston_layer_entry_insert(), the problem disappears. Of course this means windows no longer raise when clicked.

Are there any possible solutions for this problem?

Regards

adlo


> On 27 Jul 2018, at 05:44, adlo <adloconwy at gmail.com> wrote:
> 
> Any ideas?
> 
> The rest of my code can be found at:
> https://github.com/adlocode/test-libweston-desktop
> 
> Regards
> 
> adlo
> 
> 
>> On Tue, 2018-07-17 at 09:21 +0100, adlo wrote:
>> I am writing a compositor using libweston. I am attempting to
>> implement raising windows on click. It mostly works, but it has
>> introduced a regression where the compositor freezes when I click on
>> a popup menu, such as those in gedit.
>> 
>> Here is my code:
>> 
>> static void click_to_activate_binding (struct weston_pointer
>> *pointer,
>>                                       const struct timespec *time,
>>                                       uint32_t               button,
>>                                       void                  *data)
>> {
>>  struct TestServer *server = data;
>>  struct TestServerSurface *shsurf;
>>  struct weston_seat *s;
>>  struct weston_surface *main_surface;
>> 
>>  main_surface = weston_surface_get_main_surface (pointer->focus-
>>> surface);
>>  shsurf = weston_desktop_surface_get_user_data
>> (weston_surface_get_desktop_surface
>>                                                (main_surface));
>>  struct weston_surface *surface = weston_desktop_surface_get_surface
>> (shsurf->desktop_surface);
>> 
>>  wl_list_for_each (s, &server->compositor->seat_list, link)
>>    {
>>      weston_view_activate (pointer->focus, s,
>>                            WESTON_ACTIVATE_FLAG_CLICKED |
>>                            WESTON_ACTIVATE_FLAG_CONFIGURE);
>>      weston_seat_set_keyboard_focus (s, pointer->focus->surface);
>>      weston_view_geometry_dirty (shsurf->view);
>>      weston_layer_entry_remove (&pointer->focus->layer_link);
>>      weston_layer_entry_insert (&server->surfaces_layer.view_list,
>> &pointer->focus->layer_link);
>>      weston_view_geometry_dirty (shsurf->view);
>>      weston_surface_damage (main_surface);
>>      weston_desktop_surface_propagate_layer (shsurf-
>>> desktop_surface);
>>    }
>> 
>> }
>> 
>> How can I resolve this?
>> 
>> Regards
>> 
>> adlo
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20180809/80b20efc/attachment-0001.html>


More information about the wayland-devel mailing list