[PATCH weston] libweston-desktop/xdg-shell: Consolidate configure event sending

Quentin Glidic sardemff7+wayland at sardemff7.net
Sun Jun 25 22:24:38 UTC 2017


On 6/23/17 1:11 PM, Daniel Stone wrote:
> Hi Quentin,
> 
> On 13 April 2017 at 20:15, Quentin Glidic
> <sardemff7+wayland at sardemff7.net> wrote:
>> When switching a state twice in a row, we were overwriting the old value
>> without setting it back, sending a wrong state to the client.
>>
>> Now we update our requested state, then check if we need to schedule a
>> configure event, if we have one scheduled already or even if we can
>> cancel it.
> 
> Most of this looks fine, but:
> 
>>   static void
>> -weston_desktop_xdg_surface_schedule_configure(struct weston_desktop_xdg_surface *surface)
>> +weston_desktop_xdg_surface_schedule_configure(struct weston_desktop_xdg_surface *surface,
>> +                                             bool force)
>>   {
>>          struct wl_display *display = weston_desktop_get_display(surface->desktop);
>>          struct wl_event_loop *loop = wl_display_get_event_loop(display);
>> +       bool requested_same = !force;
>>
>> -       if (surface->configure_idle != NULL)
>> -               return;
>> -       surface->configure_idle =
>> -               wl_event_loop_add_idle(loop,
>> -                                      weston_desktop_xdg_surface_send_configure,
>> -                                      surface);
>> +       switch (surface->role) {
>> +       case WESTON_DESKTOP_XDG_SURFACE_ROLE_NONE:
>> +               assert(0 && "not reached");
>> +               break;
>> +       case WESTON_DESKTOP_XDG_SURFACE_ROLE_TOPLEVEL:
>> +               requested_same = requested_same &&
>> +                       weston_desktop_xdg_toplevel_state_compare((struct weston_desktop_xdg_toplevel *) surface);
>> +               break;
>> +       case WESTON_DESKTOP_XDG_SURFACE_ROLE_POPUP:
>> +               break;
>> +       }
>> +
>> +       if (surface->configure_idle != NULL) {
>> +               if (!requested_same)
>> +                       return;
>> +
>> +               wl_event_source_remove(surface->configure_idle);
>> +               surface->configure_idle = NULL;
>> +       } else {
>> +               if (requested_same)
>> +                       return;
> 
> So, we'll never send a configure event for popups, unless force is
> true. Was this intended / is this OK? If so, then:
> Reviewed-by: Daniel Stone <daniels at collabora.com>

It is intended, as we never call it with false for popups.

Pushed:
c84423ba..d51f826c  master -> master

Thanks,

-- 

Quentin “Sardem FF7” Glidic


More information about the wayland-devel mailing list