diff options
Diffstat (limited to 'sway/tree/view.c')
-rw-r--r-- | sway/tree/view.c | 54 |
1 files changed, 3 insertions, 51 deletions
diff --git a/sway/tree/view.c b/sway/tree/view.c index b77a9bb2..2c0c1aa9 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c | |||
@@ -364,48 +364,6 @@ static void view_handle_surface_new_subsurface(struct wl_listener *listener, | |||
364 | view_subsurface_create(view, subsurface); | 364 | view_subsurface_create(view, subsurface); |
365 | } | 365 | } |
366 | 366 | ||
367 | static void surface_send_enter_iterator(struct wlr_surface *surface, | ||
368 | int x, int y, void *data) { | ||
369 | struct wlr_output *wlr_output = data; | ||
370 | wlr_surface_send_enter(surface, wlr_output); | ||
371 | } | ||
372 | |||
373 | static void surface_send_leave_iterator(struct wlr_surface *surface, | ||
374 | int x, int y, void *data) { | ||
375 | struct wlr_output *wlr_output = data; | ||
376 | wlr_surface_send_leave(surface, wlr_output); | ||
377 | } | ||
378 | |||
379 | static void view_handle_container_reparent(struct wl_listener *listener, | ||
380 | void *data) { | ||
381 | struct sway_view *view = | ||
382 | wl_container_of(listener, view, container_reparent); | ||
383 | struct sway_container *old_parent = data; | ||
384 | |||
385 | struct sway_container *old_output = old_parent; | ||
386 | if (old_output != NULL && old_output->type != C_OUTPUT) { | ||
387 | old_output = container_parent(old_output, C_OUTPUT); | ||
388 | } | ||
389 | |||
390 | struct sway_container *new_output = view->swayc->parent; | ||
391 | if (new_output != NULL && new_output->type != C_OUTPUT) { | ||
392 | new_output = container_parent(new_output, C_OUTPUT); | ||
393 | } | ||
394 | |||
395 | if (old_output == new_output) { | ||
396 | return; | ||
397 | } | ||
398 | |||
399 | if (old_output != NULL) { | ||
400 | view_for_each_surface(view, surface_send_leave_iterator, | ||
401 | old_output->sway_output->wlr_output); | ||
402 | } | ||
403 | if (new_output != NULL) { | ||
404 | view_for_each_surface(view, surface_send_enter_iterator, | ||
405 | new_output->sway_output->wlr_output); | ||
406 | } | ||
407 | } | ||
408 | |||
409 | static bool view_has_executed_criteria(struct sway_view *view, | 367 | static bool view_has_executed_criteria(struct sway_view *view, |
410 | struct criteria *criteria) { | 368 | struct criteria *criteria) { |
411 | for (int i = 0; i < view->executed_criteria->length; ++i) { | 369 | for (int i = 0; i < view->executed_criteria->length; ++i) { |
@@ -567,9 +525,6 @@ void view_map(struct sway_view *view, struct wlr_surface *wlr_surface) { | |||
567 | &view->surface_new_subsurface); | 525 | &view->surface_new_subsurface); |
568 | view->surface_new_subsurface.notify = view_handle_surface_new_subsurface; | 526 | view->surface_new_subsurface.notify = view_handle_surface_new_subsurface; |
569 | 527 | ||
570 | wl_signal_add(&view->swayc->events.reparent, &view->container_reparent); | ||
571 | view->container_reparent.notify = view_handle_container_reparent; | ||
572 | |||
573 | if (view->impl->wants_floating && view->impl->wants_floating(view)) { | 528 | if (view->impl->wants_floating && view->impl->wants_floating(view)) { |
574 | view->border = config->floating_border; | 529 | view->border = config->floating_border; |
575 | view->border_thickness = config->floating_border_thickness; | 530 | view->border_thickness = config->floating_border_thickness; |
@@ -587,15 +542,12 @@ void view_map(struct sway_view *view, struct wlr_surface *wlr_surface) { | |||
587 | view_update_title(view, false); | 542 | view_update_title(view, false); |
588 | container_notify_subtree_changed(view->swayc->parent); | 543 | container_notify_subtree_changed(view->swayc->parent); |
589 | view_execute_criteria(view); | 544 | view_execute_criteria(view); |
590 | |||
591 | view_handle_container_reparent(&view->container_reparent, NULL); | ||
592 | } | 545 | } |
593 | 546 | ||
594 | void view_unmap(struct sway_view *view) { | 547 | void view_unmap(struct sway_view *view) { |
595 | wl_signal_emit(&view->events.unmap, view); | 548 | wl_signal_emit(&view->events.unmap, view); |
596 | 549 | ||
597 | wl_list_remove(&view->surface_new_subsurface.link); | 550 | wl_list_remove(&view->surface_new_subsurface.link); |
598 | wl_list_remove(&view->container_reparent.link); | ||
599 | 551 | ||
600 | if (view->urgent_timer) { | 552 | if (view->urgent_timer) { |
601 | wl_event_source_remove(view->urgent_timer); | 553 | wl_event_source_remove(view->urgent_timer); |
@@ -937,7 +889,7 @@ void view_add_mark(struct sway_view *view, char *mark) { | |||
937 | 889 | ||
938 | static void update_marks_texture(struct sway_view *view, | 890 | static void update_marks_texture(struct sway_view *view, |
939 | struct wlr_texture **texture, struct border_colors *class) { | 891 | struct wlr_texture **texture, struct border_colors *class) { |
940 | struct sway_container *output = container_parent(view->swayc, C_OUTPUT); | 892 | struct sway_output *output = container_get_effective_output(view->swayc); |
941 | if (!output) { | 893 | if (!output) { |
942 | return; | 894 | return; |
943 | } | 895 | } |
@@ -973,7 +925,7 @@ static void update_marks_texture(struct sway_view *view, | |||
973 | } | 925 | } |
974 | free(part); | 926 | free(part); |
975 | 927 | ||
976 | double scale = output->sway_output->wlr_output->scale; | 928 | double scale = output->wlr_output->scale; |
977 | int width = 0; | 929 | int width = 0; |
978 | int height = view->swayc->title_height * scale; | 930 | int height = view->swayc->title_height * scale; |
979 | 931 | ||
@@ -999,7 +951,7 @@ static void update_marks_texture(struct sway_view *view, | |||
999 | unsigned char *data = cairo_image_surface_get_data(surface); | 951 | unsigned char *data = cairo_image_surface_get_data(surface); |
1000 | int stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, width); | 952 | int stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, width); |
1001 | struct wlr_renderer *renderer = wlr_backend_get_renderer( | 953 | struct wlr_renderer *renderer = wlr_backend_get_renderer( |
1002 | output->sway_output->wlr_output->backend); | 954 | output->wlr_output->backend); |
1003 | *texture = wlr_texture_from_pixels( | 955 | *texture = wlr_texture_from_pixels( |
1004 | renderer, WL_SHM_FORMAT_ARGB8888, stride, width, height, data); | 956 | renderer, WL_SHM_FORMAT_ARGB8888, stride, width, height, data); |
1005 | cairo_surface_destroy(surface); | 957 | cairo_surface_destroy(surface); |