diff options
author | 2024-03-26 14:52:31 +0200 | |
---|---|---|
committer | 2024-03-28 10:52:58 +0200 | |
commit | b22629f406545d7b252853b80982d59ef0fdaa81 (patch) | |
tree | aa75644bbdd1196054a223dc35017e33286a8aac | |
parent | 8402a464afdd39edabc96823822e37352ecff928 (diff) |
layout: Migrate the layout save/restore to a more useful place
Bug-AGL: SPEC-5096, SPEC-5061
Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Change-Id: Idfb2fe325d47a2b60bd7f59bcadfb4a844584f2d
-rw-r--r-- | src/compositor.c | 90 | ||||
-rw-r--r-- | src/desktop.c | 14 | ||||
-rw-r--r-- | src/ivi-compositor.h | 5 | ||||
-rw-r--r-- | src/layout.c | 75 |
4 files changed, 93 insertions, 91 deletions
diff --git a/src/compositor.c b/src/compositor.c index 5fe4cf5..61dbec6 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -152,96 +152,6 @@ get_renderer_from_string(const char *name, enum weston_renderer_type *renderer) return false; } - -void -ivi_layout_save(struct ivi_compositor *ivi, struct ivi_output *output) -{ - struct ivi_output *new_output; - ivi->need_ivi_output_relayout = true; - - new_output = zalloc(sizeof(*new_output)); - - new_output->ivi = ivi; - new_output->background = output->background; - - new_output->top = output->top; - new_output->bottom = output->bottom; - new_output->left = output->left; - new_output->right = output->right; - - new_output->active = output->active; - new_output->previous_active = output->previous_active; - new_output->name = strdup(output->name); - if (output->app_ids) - new_output->app_ids = strdup(output->app_ids); - - new_output->area = output->area; - new_output->area_saved = output->area_saved; - new_output->area_activation = output->area_activation; - - weston_log("saving output layout for output %s\n", new_output->name); - - wl_list_insert(&ivi->saved_outputs, &new_output->link); -} - -void -ivi_layout_restore(struct ivi_compositor *ivi, struct ivi_output *n_output) -{ - struct ivi_output *output = NULL; - struct ivi_output *iter_output; - - if (!ivi->need_ivi_output_relayout) - return; - - ivi->need_ivi_output_relayout = false; - - wl_list_for_each(iter_output, &ivi->saved_outputs, link) { - if (strcmp(n_output->name, iter_output->name) == 0) { - output = iter_output; - break; - } - } - - if (!output) - return; - - weston_log("restoring output layout for output %s\n", output->name); - n_output->background = output->background; - - n_output->top = output->top; - n_output->bottom = output->bottom; - n_output->left = output->left; - n_output->right = output->right; - - n_output->active = output->active; - n_output->previous_active = output->previous_active; - if (output->app_ids) - n_output->app_ids = strdup(output->app_ids); - - n_output->area = output->area; - n_output->area_saved = output->area_saved; - n_output->area_activation = output->area_activation; - - free(output->app_ids); - free(output->name); - wl_list_remove(&output->link); - free(output); -} - -void -ivi_layout_destroy_saved_outputs(struct ivi_compositor *ivi) -{ - struct ivi_output *output, *output_next; - - wl_list_for_each_safe(output, output_next, &ivi->saved_outputs, link) { - free(output->app_ids); - free(output->name); - - wl_list_remove(&output->link); - free(output); - } -} - static void handle_output_destroy(struct wl_listener *listener, void *data) { diff --git a/src/desktop.c b/src/desktop.c index 1d60bf1..d5b0be9 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -37,6 +37,20 @@ #include "agl-shell-desktop-server-protocol.h" static void +ivi_layout_destroy_saved_outputs(struct ivi_compositor *ivi) +{ + struct ivi_output *output, *output_next; + + wl_list_for_each_safe(output, output_next, &ivi->saved_outputs, link) { + free(output->app_ids); + free(output->name); + + wl_list_remove(&output->link); + free(output); + } +} + +static void desktop_advertise_app(struct wl_listener *listener, void *data) { struct ivi_surface *surface; diff --git a/src/ivi-compositor.h b/src/ivi-compositor.h index 026df71..7afb0c9 100644 --- a/src/ivi-compositor.h +++ b/src/ivi-compositor.h @@ -532,7 +532,10 @@ void shell_send_app_state(struct ivi_compositor *ivi, const char *app_id, enum agl_shell_app_state state); void -ivi_layout_destroy_saved_outputs(struct ivi_compositor *ivi); +ivi_layout_restore(struct ivi_compositor *ivi, struct ivi_output *n_output); + +void +ivi_layout_save(struct ivi_compositor *ivi, struct ivi_output *output); struct weston_output * get_default_output(struct weston_compositor *compositor); diff --git a/src/layout.c b/src/layout.c index 5d364ee..2e9173a 100644 --- a/src/layout.c +++ b/src/layout.c @@ -54,6 +54,81 @@ static const char *ivi_roles_as_string[] = { bool ivi_surf_in_hidden_layer(struct ivi_compositor *ivi, struct ivi_surface *surface); +void +ivi_layout_save(struct ivi_compositor *ivi, struct ivi_output *output) +{ + struct ivi_output *new_output; + ivi->need_ivi_output_relayout = true; + + new_output = zalloc(sizeof(*new_output)); + + new_output->ivi = ivi; + new_output->background = output->background; + + new_output->top = output->top; + new_output->bottom = output->bottom; + new_output->left = output->left; + new_output->right = output->right; + + new_output->active = output->active; + new_output->previous_active = output->previous_active; + new_output->name = strdup(output->name); + if (output->app_ids) + new_output->app_ids = strdup(output->app_ids); + + new_output->area = output->area; + new_output->area_saved = output->area_saved; + new_output->area_activation = output->area_activation; + + weston_log("saving output layout for output %s\n", new_output->name); + + wl_list_insert(&ivi->saved_outputs, &new_output->link); +} + +void +ivi_layout_restore(struct ivi_compositor *ivi, struct ivi_output *n_output) +{ + struct ivi_output *output = NULL; + struct ivi_output *iter_output; + + if (!ivi->need_ivi_output_relayout) + return; + + ivi->need_ivi_output_relayout = false; + + wl_list_for_each(iter_output, &ivi->saved_outputs, link) { + if (strcmp(n_output->name, iter_output->name) == 0) { + output = iter_output; + break; + } + } + + if (!output) + return; + + weston_log("restoring output layout for output %s\n", output->name); + n_output->background = output->background; + + n_output->top = output->top; + n_output->bottom = output->bottom; + n_output->left = output->left; + n_output->right = output->right; + + n_output->active = output->active; + n_output->previous_active = output->previous_active; + if (output->app_ids) + n_output->app_ids = strdup(output->app_ids); + + n_output->area = output->area; + n_output->area_saved = output->area_saved; + n_output->area_activation = output->area_activation; + + free(output->app_ids); + free(output->name); + wl_list_remove(&output->link); + free(output); +} + const char * ivi_layout_get_surface_role_name(struct ivi_surface *surf) { |