aboutsummaryrefslogtreecommitdiff
path: root/sway/desktop/output.c
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2017-12-12 19:40:17 +0100
committeremersion <contact@emersion.fr>2017-12-12 19:40:17 +0100
commitf3d880b0ec9eae246ef0d70dd67bed6d7488ab33 (patch)
tree3933dbb575826d49ddce5cf3ffa25c45910d29d9 /sway/desktop/output.c
parent475a0132a99aa7c576a399fdee920aa3ecadeff9 (diff)
Add scale and transform events to sway_output
Diffstat (limited to 'sway/desktop/output.c')
-rw-r--r--sway/desktop/output.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/sway/desktop/output.c b/sway/desktop/output.c
index 7eb48bdf..f44cda1a 100644
--- a/sway/desktop/output.c
+++ b/sway/desktop/output.c
@@ -98,17 +98,40 @@ static void output_resolution_notify(struct wl_listener *listener, void *data) {
arrange_windows(soutput->swayc, -1, -1);
}
+static void output_scale_notify(struct wl_listener *listener, void *data) {
+ struct sway_output *soutput = wl_container_of(
+ listener, soutput, scale);
+ arrange_windows(soutput->swayc, -1, -1);
+}
+
+static void output_transform_notify(struct wl_listener *listener, void *data) {
+ struct sway_output *soutput = wl_container_of(
+ listener, soutput, transform);
+ arrange_windows(soutput->swayc, -1, -1);
+}
+
void output_add_notify(struct wl_listener *listener, void *data) {
struct sway_server *server = wl_container_of(listener, server, output_add);
struct wlr_output *wlr_output = data;
sway_log(L_DEBUG, "New output %p: %s", wlr_output, wlr_output->name);
struct sway_output *output = calloc(1, sizeof(struct sway_output));
+ if (!output) {
+ return;
+ }
output->wlr_output = wlr_output;
output->server = server;
+
+ wl_signal_init(&output->events.scale);
+ wl_signal_init(&output->events.transform);
+
output->swayc = new_output(output);
+ if (!output->swayc) {
+ free(output);
+ return;
+ }
- if (wl_list_length(&wlr_output->modes) > 0) {
+ if (!wl_list_empty(&wlr_output->modes)) {
struct wlr_output_mode *mode = NULL;
mode = wl_container_of((&wlr_output->modes)->prev, mode, link);
wlr_output_set_mode(wlr_output, mode);
@@ -116,9 +139,12 @@ void output_add_notify(struct wl_listener *listener, void *data) {
output->frame.notify = output_frame_notify;
wl_signal_add(&wlr_output->events.frame, &output->frame);
-
output->resolution.notify = output_resolution_notify;
wl_signal_add(&wlr_output->events.resolution, &output->resolution);
+ output->scale.notify = output_scale_notify;
+ wl_signal_add(&output->events.scale, &output->scale);
+ output->transform.notify = output_transform_notify;
+ wl_signal_add(&output->events.transform, &output->transform);
arrange_windows(output->swayc, -1, -1);
}