diff options
-rw-r--r-- | sway/desktop/output.c | 23 | ||||
-rw-r--r-- | sway/ipc-json.c | 7 |
2 files changed, 17 insertions, 13 deletions
diff --git a/sway/desktop/output.c b/sway/desktop/output.c index 3142bdb4..bd1d760d 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c | |||
@@ -1169,12 +1169,10 @@ static void handle_destroy(struct wl_listener *listener, void *data) { | |||
1169 | container_destroy(output->swayc); | 1169 | container_destroy(output->swayc); |
1170 | } | 1170 | } |
1171 | 1171 | ||
1172 | if (&output->link) { | 1172 | wl_list_remove(&output->link); |
1173 | wl_list_remove(&output->link); | 1173 | wl_list_remove(&output->destroy.link); |
1174 | wl_list_remove(&output->destroy.link); | 1174 | output->wlr_output->data = NULL; |
1175 | output->wlr_output = NULL; | 1175 | free(output); |
1176 | free(output); | ||
1177 | } | ||
1178 | } | 1176 | } |
1179 | 1177 | ||
1180 | static void handle_mode(struct wl_listener *listener, void *data) { | 1178 | static void handle_mode(struct wl_listener *listener, void *data) { |
@@ -1212,10 +1210,13 @@ void handle_new_output(struct wl_listener *listener, void *data) { | |||
1212 | output->wlr_output = wlr_output; | 1210 | output->wlr_output = wlr_output; |
1213 | wlr_output->data = output; | 1211 | wlr_output->data = output; |
1214 | output->server = server; | 1212 | output->server = server; |
1215 | wl_list_insert(&root_container.sway_root->outputs, &output->link); | ||
1216 | |||
1217 | output->damage = wlr_output_damage_create(wlr_output); | 1213 | output->damage = wlr_output_damage_create(wlr_output); |
1218 | 1214 | ||
1215 | wl_signal_add(&wlr_output->events.destroy, &output->destroy); | ||
1216 | output->destroy.notify = handle_destroy; | ||
1217 | |||
1218 | wl_list_insert(&root_container.sway_root->outputs, &output->link); | ||
1219 | |||
1219 | if (!wl_list_empty(&wlr_output->modes)) { | 1220 | if (!wl_list_empty(&wlr_output->modes)) { |
1220 | struct wlr_output_mode *mode = | 1221 | struct wlr_output_mode *mode = |
1221 | wl_container_of(wlr_output->modes.prev, mode, link); | 1222 | wl_container_of(wlr_output->modes.prev, mode, link); |
@@ -1228,6 +1229,10 @@ void handle_new_output(struct wl_listener *listener, void *data) { | |||
1228 | void output_enable(struct sway_output *output) { | 1229 | void output_enable(struct sway_output *output) { |
1229 | struct wlr_output *wlr_output = output->wlr_output; | 1230 | struct wlr_output *wlr_output = output->wlr_output; |
1230 | 1231 | ||
1232 | if (!sway_assert(output->swayc == NULL, "output is already enabled")) { | ||
1233 | return; | ||
1234 | } | ||
1235 | |||
1231 | output->swayc = output_create(output); | 1236 | output->swayc = output_create(output); |
1232 | if (!output->swayc) { | 1237 | if (!output->swayc) { |
1233 | // Output is disabled | 1238 | // Output is disabled |
@@ -1241,8 +1246,6 @@ void output_enable(struct sway_output *output) { | |||
1241 | 1246 | ||
1242 | input_manager_configure_xcursor(input_manager); | 1247 | input_manager_configure_xcursor(input_manager); |
1243 | 1248 | ||
1244 | wl_signal_add(&wlr_output->events.destroy, &output->destroy); | ||
1245 | output->destroy.notify = handle_destroy; | ||
1246 | wl_signal_add(&wlr_output->events.mode, &output->mode); | 1249 | wl_signal_add(&wlr_output->events.mode, &output->mode); |
1247 | output->mode.notify = handle_mode; | 1250 | output->mode.notify = handle_mode; |
1248 | wl_signal_add(&wlr_output->events.transform, &output->transform); | 1251 | wl_signal_add(&wlr_output->events.transform, &output->transform); |
diff --git a/sway/ipc-json.c b/sway/ipc-json.c index 5d402d1b..b9289e25 100644 --- a/sway/ipc-json.c +++ b/sway/ipc-json.c | |||
@@ -83,7 +83,8 @@ static const char *ipc_json_get_output_transform(enum wl_output_transform transf | |||
83 | return NULL; | 83 | return NULL; |
84 | } | 84 | } |
85 | 85 | ||
86 | static void ipc_json_describe_output(struct sway_container *container, json_object *object) { | 86 | static void ipc_json_describe_output(struct sway_container *container, |
87 | json_object *object) { | ||
87 | struct wlr_output *wlr_output = container->sway_output->wlr_output; | 88 | struct wlr_output *wlr_output = container->sway_output->wlr_output; |
88 | json_object_object_add(object, "type", | 89 | json_object_object_add(object, "type", |
89 | json_object_new_string("output")); | 90 | json_object_new_string("output")); |
@@ -141,12 +142,12 @@ static void ipc_json_describe_output(struct sway_container *container, json_obje | |||
141 | 142 | ||
142 | json_object *ipc_json_describe_disabled_output(struct sway_output *output) { | 143 | json_object *ipc_json_describe_disabled_output(struct sway_output *output) { |
143 | struct wlr_output *wlr_output = output->wlr_output; | 144 | struct wlr_output *wlr_output = output->wlr_output; |
144 | 145 | ||
145 | json_object *object = json_object_new_object(); | 146 | json_object *object = json_object_new_object(); |
146 | 147 | ||
147 | json_object_object_add(object, "type", json_object_new_string("output")); | 148 | json_object_object_add(object, "type", json_object_new_string("output")); |
148 | json_object_object_add(object, "name", | 149 | json_object_object_add(object, "name", |
149 | wlr_output->name ? json_object_new_string(wlr_output->name) : NULL); | 150 | json_object_new_string(wlr_output->name)); |
150 | json_object_object_add(object, "active", json_object_new_boolean(false)); | 151 | json_object_object_add(object, "active", json_object_new_boolean(false)); |
151 | json_object_object_add(object, "make", | 152 | json_object_object_add(object, "make", |
152 | json_object_new_string(wlr_output->make)); | 153 | json_object_new_string(wlr_output->make)); |