[PATCH 4/9] compositor: Add output->role_change_signal in clone mode

Xiong Zhang xiong.y.zhang at intel.com
Thu Feb 13 23:17:39 PST 2014


When a output change role between master and slave in clone mode,
some work is needed, this signal is used to trigger this work.

Signed-off-by: Xiong Zhang <xiong.y.zhang at intel.com>
---
 desktop-shell/shell.c | 13 +++++++++++++
 src/compositor.c      |  1 +
 src/compositor.h      |  1 +
 3 files changed, 15 insertions(+)

diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
index 3831804..1e4a255 100644
--- a/desktop-shell/shell.c
+++ b/desktop-shell/shell.c
@@ -59,6 +59,7 @@ struct focus_state {
 struct shell_output {
 	struct desktop_shell  *shell;
 	struct weston_output  *output;
+	struct wl_listener    role_change_listener;
 	struct wl_listener    destroy_listener;
 	struct wl_list        link;
 };
@@ -5596,11 +5597,17 @@ handle_output_destroy(struct wl_listener *listener, void *data)
 	shell_reposition_views_on_output_destroy(output_listener);
 
 	wl_list_remove(&output_listener->destroy_listener.link);
+	wl_list_remove(&output_listener->role_change_listener.link);
 	wl_list_remove(&output_listener->link);
 	free(output_listener);
 }
 
 static void
+handle_output_role_change(struct wl_listener *listener, void *data)
+{
+}
+
+static void
 create_shell_output(struct desktop_shell *shell,
 					struct weston_output *output)
 {
@@ -5615,6 +5622,11 @@ create_shell_output(struct desktop_shell *shell,
 	shell_output->destroy_listener.notify = handle_output_destroy;
 	wl_signal_add(&output->destroy_signal,
 		      &shell_output->destroy_listener);
+
+	shell_output->role_change_listener.notify = handle_output_role_change;
+	wl_signal_add(&output->role_change_signal,
+		      &shell_output->role_change_listener);
+
 	wl_list_insert(shell->output_list.prev, &shell_output->link);
 }
 
@@ -5697,6 +5709,7 @@ shell_destroy(struct wl_listener *listener, void *data)
 
 	wl_list_for_each_safe(shell_output, tmp, &shell->output_list, link) {
 		wl_list_remove(&shell_output->destroy_listener.link);
+		wl_list_remove(&shell_output->role_change_listener.link);
 		wl_list_remove(&shell_output->link);
 		free(shell_output);
 	}
diff --git a/src/compositor.c b/src/compositor.c
index 2c30334..5c0f67d 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -3283,6 +3283,7 @@ weston_output_init(struct weston_output *output, struct weston_compositor *c,
 	wl_signal_init(&output->destroy_signal);
 	wl_list_init(&output->animation_list);
 	wl_list_init(&output->resource_list);
+	wl_signal_init(&output->role_change_signal);
 
 	output->id = ffs(~output->compositor->output_id_pool) - 1;
 	output->compositor->output_id_pool |= 1 << output->id;
diff --git a/src/compositor.h b/src/compositor.h
index 549d83d..0938078 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -216,6 +216,7 @@ struct weston_output {
 	char *master_output_name;
 	struct weston_output *master_output;
 	struct wl_list clone_output_list;
+	struct wl_signal role_change_signal;
 
 	void (*start_repaint_loop)(struct weston_output *output);
 	int (*repaint)(struct weston_output *output,
-- 
1.8.3.2



More information about the wayland-devel mailing list