diff --git a/src/compositor.c b/src/compositor.c index cb21eb78..ab90ded8 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -518,6 +518,15 @@ weston_surface_configure(struct weston_surface *surface, surface->geometry.dirty = 1; } +WL_EXPORT void +weston_surface_set_position(struct weston_surface *surface, + GLfloat x, GLfloat y) +{ + surface->geometry.x = x; + surface->geometry.y = y; + surface->geometry.dirty = 1; +} + WL_EXPORT uint32_t weston_compositor_get_time(void) { @@ -1364,9 +1373,9 @@ notify_motion(struct wl_input_device *device, uint32_t time, int x, int y) device->grab->x, device->grab->y); if (wd->sprite) { - wd->sprite->geometry.x = device->x - wd->hotspot_x; - wd->sprite->geometry.y = device->y - wd->hotspot_y; - wd->sprite->geometry.dirty = 1; + weston_surface_set_position(wd->sprite, + device->x - wd->hotspot_x, + device->y - wd->hotspot_y); weston_compositor_schedule_repaint(ec); } diff --git a/src/compositor.h b/src/compositor.h index 1b0d5cba..966d3f41 100644 --- a/src/compositor.h +++ b/src/compositor.h @@ -398,6 +398,10 @@ void weston_surface_configure(struct weston_surface *surface, GLfloat x, GLfloat y, int width, int height); +void +weston_surface_set_position(struct weston_surface *surface, + GLfloat x, GLfloat y); + void weston_surface_assign_output(struct weston_surface *surface); diff --git a/src/shell.c b/src/shell.c index f67a8940..66c4f01f 100644 --- a/src/shell.c +++ b/src/shell.c @@ -346,9 +346,9 @@ reset_shell_surface_type(struct shell_surface *surface) { switch (surface->type) { case SHELL_SURFACE_FULLSCREEN: - surface->surface->geometry.x = surface->saved_x; - surface->surface->geometry.y = surface->saved_y; - surface->surface->geometry.dirty = 1; + weston_surface_set_position(surface->surface, + surface->saved_x, + surface->saved_y); surface->surface->fullscreen_output = NULL; break; case SHELL_SURFACE_PANEL: @@ -402,10 +402,8 @@ shell_surface_set_transient(struct wl_client *client, /* assign to parents output */ es->output = pes->output; - - es->geometry.x = pes->geometry.x + x; - es->geometry.y = pes->geometry.y + y; - es->geometry.dirty = 1; + weston_surface_set_position(es, pes->geometry.x + x, + pes->geometry.y + y); shsurf->type = SHELL_SURFACE_TRANSIENT; } @@ -436,9 +434,9 @@ shell_surface_set_fullscreen(struct wl_client *client, shsurf->saved_x = es->geometry.x; shsurf->saved_y = es->geometry.y; - es->geometry.x = (output->current->width - es->geometry.width) / 2; - es->geometry.y = (output->current->height - es->geometry.height) / 2; - es->geometry.dirty = 1; + weston_surface_set_position(es, + (output->current->width - es->geometry.width) / 2, + (output->current->height - es->geometry.height) / 2); es->fullscreen_output = output; shsurf->type = SHELL_SURFACE_FULLSCREEN; } @@ -533,9 +531,7 @@ shell_map_popup(struct shell_surface *shsurf, uint32_t time) } wl_list_insert(es->geometry.transformation_list.prev, &shsurf->popup.parent_transform.link); - es->geometry.x = shsurf->popup.x; - es->geometry.y = shsurf->popup.y; - es->geometry.dirty = 1; + weston_surface_set_position(es, shsurf->popup.x, shsurf->popup.y); shsurf->popup.grab.input_device = device; shsurf->popup.time = device->grab_time; @@ -747,9 +743,8 @@ desktop_shell_set_background(struct wl_client *client, wl_list_insert(&shell->backgrounds, &shsurf->link); - surface->geometry.x = shsurf->output->x; - surface->geometry.y = shsurf->output->y; - surface->geometry.dirty = 1; + weston_surface_set_position(surface, shsurf->output->x, + shsurf->output->y); wl_resource_post_event(resource, DESKTOP_SHELL_CONFIGURE, @@ -786,9 +781,8 @@ desktop_shell_set_panel(struct wl_client *client, wl_list_insert(&shell->panels, &shsurf->link); - surface->geometry.x = shsurf->output->x; - surface->geometry.y = shsurf->output->y; - surface->geometry.dirty = 1; + weston_surface_set_position(surface, shsurf->output->x, + shsurf->output->y); wl_resource_post_event(resource, DESKTOP_SHELL_CONFIGURE, @@ -1266,12 +1260,10 @@ static void center_on_output(struct weston_surface *surface, struct weston_output *output) { struct weston_mode *mode = output->current; + GLfloat x = (mode->width - surface->geometry.width) / 2; + GLfloat y = (mode->height - surface->geometry.height) / 2; - surface->geometry.x = - output->x + (mode->width - surface->geometry.width) / 2; - surface->geometry.y = - output->y + (mode->height - surface->geometry.height) / 2; - surface->geometry.dirty = 1; + weston_surface_set_position(surface, output->x + x, output->y + y); } static void @@ -1304,8 +1296,8 @@ map(struct weston_shell *base, /* initial positioning, see also configure() */ switch (surface_type) { case SHELL_SURFACE_TOPLEVEL: - surface->geometry.x = 10 + random() % 400; - surface->geometry.y = 10 + random() % 400; + weston_surface_set_position(surface, 10 + random() % 400, + 10 + random() % 400); break; case SHELL_SURFACE_SCREENSAVER: case SHELL_SURFACE_FULLSCREEN: diff --git a/src/tablet-shell.c b/src/tablet-shell.c index 5e8d5f12..48784f64 100644 --- a/src/tablet-shell.c +++ b/src/tablet-shell.c @@ -110,9 +110,7 @@ tablet_shell_map(struct weston_shell *base, struct weston_surface *surface, struct tablet_shell *shell = container_of(base, struct tablet_shell, shell); - surface->geometry.x = 0; - surface->geometry.y = 0; - surface->geometry.dirty = 1; + weston_surface_configure(surface, 0, 0, width, height); if (surface == shell->lockscreen_surface) { /* */ @@ -134,8 +132,6 @@ tablet_shell_map(struct weston_shell *base, struct weston_surface *surface, } wl_list_insert(&shell->compositor->surface_list, &surface->link); - weston_surface_configure(surface, surface->geometry.x, - surface->geometry.y, width, height); weston_surface_assign_output(surface); } @@ -168,9 +164,7 @@ tablet_shell_set_lockscreen(struct wl_client *client, struct tablet_shell *shell = resource->data; struct weston_surface *es = surface_resource->data; - es->geometry.x = 0; - es->geometry.y = 0; - es->geometry.dirty = 1; + weston_surface_set_position(es, 0, 0); shell->lockscreen_surface = es; shell->lockscreen_listener.func = handle_lockscreen_surface_destroy; wl_list_insert(es->surface.resource.destroy_listener_list.prev, @@ -203,9 +197,7 @@ tablet_shell_set_switcher(struct wl_client *client, * layer idea, we should be able to hit the framerate on the * fade/zoom in. */ shell->switcher_surface = es; - shell->switcher_surface->geometry.x = 0; - shell->switcher_surface->geometry.y = 0; - shell->switcher_surface->geometry.dirty = 1; + weston_surface_set_position(shell->switcher_surface, 0, 0); shell->switcher_listener.func = handle_switcher_surface_destroy; wl_list_insert(es->surface.resource.destroy_listener_list.prev, @@ -220,9 +212,7 @@ tablet_shell_set_homescreen(struct wl_client *client, struct tablet_shell *shell = resource->data; shell->home_surface = surface_resource->data; - shell->home_surface->geometry.x = 0; - shell->home_surface->geometry.y = 0; - shell->home_surface->geometry.dirty = 1; + weston_surface_set_position(shell->home_surface, 0, 0); } static void