mirror of
https://gitlab.freedesktop.org/wayland/weston
synced 2024-09-06 09:56:14 +00:00
shell: update position of surfaces with type none on map()
Needed for implementing drag'n'drop icons. When a drag starts, the compositor will position the top-left corner of the client supplied icon surface at the cursor hotspot. On the first attach to that surface, the client may want to reposition it but shell->map did not take sx and sy parameters. This changes shell->map interface to take sx and sy parameters and change dekstop shell implementation to update the position of a surface of type none according to those parameters. Since a surface of type none won't actually be mapped, the effect of this change is only visible for surfaces that are made visible by the compositor. Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
This commit is contained in:
parent
d595f65fe2
commit
e9e0515cec
|
@ -1176,7 +1176,7 @@ surface_attach(struct wl_client *client,
|
|||
&es->buffer_destroy_listener.link);
|
||||
|
||||
if (es->visual == WESTON_NONE_VISUAL) {
|
||||
shell->map(shell, es, buffer->width, buffer->height);
|
||||
shell->map(shell, es, buffer->width, buffer->height, sx, sy);
|
||||
} else if (sx != 0 || sy != 0 ||
|
||||
es->geometry.width != buffer->width ||
|
||||
es->geometry.height != buffer->height) {
|
||||
|
|
|
@ -130,7 +130,7 @@ struct weston_shell {
|
|||
void (*lock)(struct weston_shell *shell);
|
||||
void (*unlock)(struct weston_shell *shell);
|
||||
void (*map)(struct weston_shell *shell, struct weston_surface *surface,
|
||||
int32_t width, int32_t height);
|
||||
int32_t width, int32_t height, int32_t sx, int32_t sy);
|
||||
void (*configure)(struct weston_shell *shell,
|
||||
struct weston_surface *surface,
|
||||
GLfloat x, GLfloat y, int32_t width, int32_t height);
|
||||
|
|
|
@ -1339,8 +1339,8 @@ center_on_output(struct weston_surface *surface, struct weston_output *output)
|
|||
}
|
||||
|
||||
static void
|
||||
map(struct weston_shell *base,
|
||||
struct weston_surface *surface, int32_t width, int32_t height)
|
||||
map(struct weston_shell *base, struct weston_surface *surface,
|
||||
int32_t width, int32_t height, int32_t sx, int32_t sy)
|
||||
{
|
||||
struct wl_shell *shell = container_of(base, struct wl_shell, shell);
|
||||
struct weston_compositor *compositor = shell->compositor;
|
||||
|
@ -1387,6 +1387,10 @@ map(struct weston_shell *base,
|
|||
break;
|
||||
case SHELL_SURFACE_POPUP:
|
||||
shell_map_popup(shsurf, shsurf->popup.time);
|
||||
case SHELL_SURFACE_NONE:
|
||||
weston_surface_set_position(surface,
|
||||
surface->geometry.x + sx,
|
||||
surface->geometry.y + sy);
|
||||
break;
|
||||
default:
|
||||
;
|
||||
|
|
|
@ -105,7 +105,7 @@ tablet_shell_set_state(struct tablet_shell *shell, int state)
|
|||
|
||||
static void
|
||||
tablet_shell_map(struct weston_shell *base, struct weston_surface *surface,
|
||||
int32_t width, int32_t height)
|
||||
int32_t width, int32_t height, int32_t sx, int32_t sy)
|
||||
{
|
||||
struct tablet_shell *shell =
|
||||
container_of(base, struct tablet_shell, shell);
|
||||
|
|
Loading…
Reference in a new issue