[writing a compositor] Window does not return to previous position on unmaximize
adlo
adloconwy at gmail.com
Tue Sep 25 03:41:35 UTC 2018
Here is some more code that I forgot to include:
static void
unset_maximized(struct ShellSurface *shsurf)
{
struct weston_surface *surface =
weston_desktop_surface_get_surface(shsurf-
>desktop_surface);
if (shsurf->saved_position_valid)
weston_view_set_position(shsurf->view,
shsurf->saved_x, shsurf-
>saved_y);
shsurf->saved_position_valid = false;
}
Regards
adlo
On Mon, 2018-09-24 at 04:32 +0100, adlo wrote:
> I am writing a compositor using libweston. When unmaximizing a
> window,
> the window doesn't return to the position it was at before it was
> maximized. How can I resolve this?
>
> Here is my code:
>
> static void
> set_maximized_position (struct ShellSurface *shsurf)
> {
> pixman_rectangle32_t area;
> struct weston_geometry geometry;
>
> area.x = shsurf->surface->output->x;
> area.y = shsurf->surface->output->y;
>
> geometry = weston_desktop_surface_get_geometry(shsurf-
> > desktop_surface);
>
> weston_view_set_position(shsurf->view,
> area.x - geometry.x,
> area.y - geometry.y);
> }
>
> static void
> map(struct TestServer *shell, struct ShellSurface *shsurf,
> int32_t sx, int32_t sy)
> {
> if (shsurf->maximized)
> set_maximized_position (shsurf);
> weston_view_update_transform(shsurf->view);
>
> }
>
> static void
> desktop_surface_committed(struct weston_desktop_surface
> *desktop_surface,
> int32_t sx, int32_t sy, void *data)
> {
> struct ShellSurface *shsurf =
> weston_desktop_surface_get_user_data(desktop_surface);
> struct weston_surface *surface =
> weston_desktop_surface_get_surface(desktop_surface);
> struct weston_view *view = shsurf->view;
> struct TestServer *shell = data;
> bool was_fullscreen;
> bool was_maximized;
>
> if (surface->width == 0)
> return;
>
> was_maximized = shsurf->maximized;
>
> shsurf->maximized =
> weston_desktop_surface_get_maximized (desktop_surface);
>
> if (!weston_surface_is_mapped(surface))
> map(shell, shsurf, sx, sy);
>
> if (was_maximized == shsurf->maximized)
> return;
>
> if (was_maximized)
> unset_maximized (shsurf);
>
> if (shsurf->maximized && !shsurf->saved_position_valid)
> {
>
> shsurf->saved_x = shsurf->view->geometry.x;
> shsurf->saved_y = shsurf->view->geometry.y;
> shsurf->saved_position_valid = true;
> }
>
> weston_view_set_position (shsurf->view,
> shsurf->saved_x, shsurf->saved_y);
>
> if (shsurf->maximized)
> set_maximized_position (shsurf);
>
> }
>
> An earlier version of the rest of my code can be found at:
>
>
https://github.com/adlocode/test-libweston-desktop/blob/master/shell.c
>
> Regards
>
> adlo
>
More information about the wayland-devel
mailing list