diff options
Diffstat (limited to 'sway/desktop/output.c')
-rw-r--r-- | sway/desktop/output.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/sway/desktop/output.c b/sway/desktop/output.c index acc9caae..3142bdb4 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c | |||
@@ -1165,7 +1165,16 @@ static void damage_handle_destroy(struct wl_listener *listener, void *data) { | |||
1165 | 1165 | ||
1166 | static void handle_destroy(struct wl_listener *listener, void *data) { | 1166 | static void handle_destroy(struct wl_listener *listener, void *data) { |
1167 | struct sway_output *output = wl_container_of(listener, output, destroy); | 1167 | struct sway_output *output = wl_container_of(listener, output, destroy); |
1168 | container_destroy(output->swayc); | 1168 | if (output->swayc) { |
1169 | container_destroy(output->swayc); | ||
1170 | } | ||
1171 | |||
1172 | if (&output->link) { | ||
1173 | wl_list_remove(&output->link); | ||
1174 | wl_list_remove(&output->destroy.link); | ||
1175 | output->wlr_output = NULL; | ||
1176 | free(output); | ||
1177 | } | ||
1169 | } | 1178 | } |
1170 | 1179 | ||
1171 | static void handle_mode(struct wl_listener *listener, void *data) { | 1180 | static void handle_mode(struct wl_listener *listener, void *data) { |
@@ -1203,6 +1212,9 @@ void handle_new_output(struct wl_listener *listener, void *data) { | |||
1203 | output->wlr_output = wlr_output; | 1212 | output->wlr_output = wlr_output; |
1204 | wlr_output->data = output; | 1213 | wlr_output->data = output; |
1205 | output->server = server; | 1214 | output->server = server; |
1215 | wl_list_insert(&root_container.sway_root->outputs, &output->link); | ||
1216 | |||
1217 | output->damage = wlr_output_damage_create(wlr_output); | ||
1206 | 1218 | ||
1207 | if (!wl_list_empty(&wlr_output->modes)) { | 1219 | if (!wl_list_empty(&wlr_output->modes)) { |
1208 | struct wlr_output_mode *mode = | 1220 | struct wlr_output_mode *mode = |
@@ -1210,11 +1222,15 @@ void handle_new_output(struct wl_listener *listener, void *data) { | |||
1210 | wlr_output_set_mode(wlr_output, mode); | 1222 | wlr_output_set_mode(wlr_output, mode); |
1211 | } | 1223 | } |
1212 | 1224 | ||
1213 | output->damage = wlr_output_damage_create(wlr_output); | 1225 | output_enable(output); |
1226 | } | ||
1227 | |||
1228 | void output_enable(struct sway_output *output) { | ||
1229 | struct wlr_output *wlr_output = output->wlr_output; | ||
1214 | 1230 | ||
1215 | output->swayc = output_create(output); | 1231 | output->swayc = output_create(output); |
1216 | if (!output->swayc) { | 1232 | if (!output->swayc) { |
1217 | free(output); | 1233 | // Output is disabled |
1218 | return; | 1234 | return; |
1219 | } | 1235 | } |
1220 | 1236 | ||