summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Vlad <marius.vlad@collabora.com>2024-03-26 14:52:31 +0200
committerMarius Vlad <marius.vlad@collabora.com>2024-03-28 15:37:27 +0200
commitec6f2d31293d8680a1f6dab8f53949b848bbae08 (patch)
treeaa75644bbdd1196054a223dc35017e33286a8aac
parent612ffac8382b8e51a5b30c09c8cf649dd15877e7 (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: I5d7284de09485a42dd84075b5fa2268a81982745
-rw-r--r--src/compositor.c90
-rw-r--r--src/desktop.c14
-rw-r--r--src/ivi-compositor.h5
-rw-r--r--src/layout.c75
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)
{