[PATCH weston 2/2] Reset the keyboard focus on all seats when the compositor is locked

Jasper St. Pierre jstpierre at mecheye.net
Wed Apr 9 08:52:26 PDT 2014


Why is this necessary? Won't events never be delivered while locked anyway?
On Apr 9, 2014 8:36 AM, "Neil Roberts" <neil at linux.intel.com> wrote:

> Before commit 2f5faff7f9142 when the compositor is locked it would
> reset the keyboard focus on all of the seats as part of pushing the
> focus_state. This was removed because it now always keeps track of the
> focus_state in the workspace instead of waiting until the state is
> pushed. However this had the side effect that the active surface would
> retain focus when the compositor is locked. This patch just makes it
> explicitly set the keyboard focus to NULL on all of the seats when
> locking. This will be restored based on the workspace's state when
> unlocking.
>
> https://bugs.freedesktop.org/show_bug.cgi?id=73905
> ---
>  desktop-shell/shell.c | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
>
> diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
> index fa081f3..b19965f 100644
> --- a/desktop-shell/shell.c
> +++ b/desktop-shell/shell.c
> @@ -4498,6 +4498,19 @@ touch_to_activate_binding(struct weston_seat *seat,
> uint32_t time, void *data)
>  }
>
>  static void
> +unfocus_all_seats(struct desktop_shell *shell)
> +{
> +       struct weston_seat *seat, *next;
> +
> +       wl_list_for_each_safe(seat, next, &shell->compositor->seat_list,
> link) {
> +               if (seat->keyboard == NULL)
> +                       continue;
> +
> +               weston_keyboard_set_focus(seat->keyboard, NULL);
> +       }
> +}
> +
> +static void
>  lock(struct desktop_shell *shell)
>  {
>         struct workspace *ws = get_current_workspace(shell);
> @@ -4523,6 +4536,11 @@ lock(struct desktop_shell *shell)
>
>         launch_screensaver(shell);
>
> +       /* Remove the keyboard focus on all seats. This will be
> +        * restored to the workspace's saved state via
> +        * restore_focus_state when the compositor is unlocked */
> +       unfocus_all_seats(shell);
> +
>         /* TODO: disable bindings that should not work while locked. */
>
>         /* All this must be undone in resume_desktop(). */
> --
> 1.8.5.3
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20140409/91585bd4/attachment.html>


More information about the wayland-devel mailing list