On Thu, May 26, 2016 at 06:01:52PM +0300, Pekka Paalanen wrote: > On Thu, 7 Apr 2016 16:44:20 -0700 > Bryce Harrington <[email protected]> wrote: > > > Surface activity is determined by what surface is being displayed > > fullscreen. Only a single surface can be active in the shell. > > Hi, > > only a single surface can be active? But there is a surface for every > output. > > Shouldn't every visible surface be active in this case, as the shell > protocol enforces a single visible surface per output policy?
Then in that case can all this just be shortcircuited and make all surfaces be active? If I understand what you're saying then by definition with fullscreen-shell there would be no such thing as non-active surfaces. Bryce > > Signed-off-by: Bryce Harrington <[email protected]> > > --- > > fullscreen-shell/fullscreen-shell.c | 27 ++++++++++++++++++++++++++- > > 1 file changed, 26 insertions(+), 1 deletion(-) > > > > diff --git a/fullscreen-shell/fullscreen-shell.c > > b/fullscreen-shell/fullscreen-shell.c > > index e1f8a63..8b1930f 100644 > > --- a/fullscreen-shell/fullscreen-shell.c > > +++ b/fullscreen-shell/fullscreen-shell.c > > @@ -46,6 +46,7 @@ struct fullscreen_shell { > > struct wl_listener output_created_listener; > > > > struct wl_listener seat_created_listener; > > + struct weston_surface *active_surface; > > }; > > > > struct fs_output { > > @@ -84,14 +85,23 @@ struct pointer_focus_listener { > > }; > > > > static void > > -pointer_focus_changed(struct wl_listener *listener, void *data) > > +pointer_focus_changed(struct wl_listener *l, void *data) > > { > > struct weston_pointer *pointer = data; > > + struct weston_surface *old_surface; > > + struct pointer_focus_listener *listener; > > + > > + listener = container_of(l, struct pointer_focus_listener, > > + seat_destroyed); > > > > if (pointer->focus && pointer->focus->surface->resource) { > > + old_surface = listener->shell->active_surface; > > + if (old_surface != NULL) > > + weston_surface_deactivate(old_surface); > > weston_surface_assign_keyboard(pointer->focus->surface, > > pointer->seat); > > if (pointer->focus->surface != NULL) > > weston_surface_activate(pointer->focus->surface); > > + listener->shell->active_surface = pointer->focus->surface; > > So the active surface is the one with the pointer focus? > What happens when you have multiple weston_seats each with a pointer? > > > } > > } > > > > @@ -101,6 +111,7 @@ seat_caps_changed(struct wl_listener *l, void *data) > > struct weston_seat *seat = data; > > struct weston_keyboard *keyboard = weston_seat_get_keyboard(seat); > > struct weston_pointer *pointer = weston_seat_get_pointer(seat); > > + struct weston_surface *old_surface; > > struct pointer_focus_listener *listener; > > struct fs_output *fsout; > > > > @@ -119,11 +130,15 @@ seat_caps_changed(struct wl_listener *l, void *data) > > } > > > > if (keyboard && keyboard->focus != NULL) { > > + old_surface = listener->shell->active_surface; > > wl_list_for_each(fsout, &listener->shell->output_list, link) { > > if (fsout->surface) { > > + if (old_surface != NULL) > > + weston_surface_deactivate(old_surface); > > weston_surface_assign_keyboard(fsout->surface, > > seat); > > if (fsout->surface != NULL) > > weston_surface_activate(fsout->surface); > > + listener->shell->active_surface = > > fsout->surface; > > return; > > Seat cap change taken into account, I wouldn't probably have thought of > that. Very good. > > > } > > } > > @@ -676,6 +691,7 @@ fullscreen_shell_present_surface(struct wl_client > > *client, > > wl_resource_get_user_data(resource); > > struct weston_output *output; > > struct weston_surface *surface; > > + struct weston_surface *old_surface; > > struct weston_seat *seat; > > struct fs_output *fsout; > > > > @@ -709,9 +725,13 @@ fullscreen_shell_present_surface(struct wl_client > > *client, > > weston_seat_get_keyboard(seat); > > > > if (keyboard && !keyboard->focus) { > > + old_surface = shell->active_surface; > > + if (old_surface != NULL) > > + weston_surface_deactivate(old_surface); > > weston_surface_assign_keyboard(surface, seat); > > if (surface != NULL) > > weston_surface_activate(surface); > > + shell->active_surface = surface; > > And surface going off is also deactivated, good. > > > } > > } > > } > > @@ -737,6 +757,7 @@ fullscreen_shell_present_surface_for_mode(struct > > wl_client *client, > > wl_resource_get_user_data(resource); > > struct weston_output *output; > > struct weston_surface *surface; > > + struct weston_surface *old_surface; > > struct weston_seat *seat; > > struct fs_output *fsout; > > > > @@ -763,9 +784,13 @@ fullscreen_shell_present_surface_for_mode(struct > > wl_client *client, > > weston_seat_get_keyboard(seat); > > > > if (keyboard && !keyboard->focus) { > > + old_surface = shell->active_surface; > > + if (old_surface != NULL) > > + weston_surface_deactivate(old_surface); > > weston_surface_assign_keyboard(surface, seat); > > if (surface != NULL) > > weston_surface_activate(surface); > > + shell->active_surface = surface; > > } > > } > > } > > Yeah, good otherwise, but I just question the idea of what should be > active in this shell. > > > Thanks, > pq > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v2 > > iQIVAwUBV0cP4CNf5bQRqqqnAQjzsQ//Y81OgHDRxsgB71pnHsw0sYlMncNmeem+ > 9VEJhUtu8GzoazK5rHdahqJQyouTBRZuvwP2YB/2vfOAjIxpf9UoRPhNDaUEl+Xw > yeipKlsQHghrNGFTFT5KGNY7JgyuBwWSuw3MHDiOLZL1UEQEgHzgv1RMPUths9Y9 > DifQMWislb78xO88Q149w5/ksSCFwFygtxgO3sJ+jjEAvVLZJy5flxNnDPMObDDC > ExdUtjbEyp2TztRWMhj2ps9hNL4BlIJsetTntDPGJe4LfEfsT86/cklcMqvlfU90 > cq6MMbwvHXjqpIydKQ9rPwnRoJGdfcsbrvyNS3DTS64oEKkqq/L0H3pPuKKV6qTp > yf64wKwOhtxtrAiKBLsmxEFs3mDSgI6M5bOwCJBBrtxmKC/QqgiZ6yOMtL9ETuGo > sHnWHyajo9Zw6YvZzfkk+xfwPwwOdN+3xOZlFlOQPpoOjktmPz8/JTbjLQQB1RcO > y5o7tZYJvRGPYECKikyNOP1uML5q86qjjTa3tDb+2VQxM1dm9pDguoSCdx/eTgN+ > CMDoAsAn5r0u84ZskRxlVJ+1HS4XolHxBwgWc6zCsTRK9ucusn2V74krBsVmx6YH > psSKsm5LjVxPpfrnyxhcUeH+DziuJPl1qGGhBdSPCmXXCyrUynBOXBfyLOFzDrmI > ey4JbR1N2VM= > =eEHI > -----END PGP SIGNATURE----- _______________________________________________ wayland-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/wayland-devel
