aboutsummaryrefslogtreecommitdiffstats
path: root/sway/tree/view.c
diff options
context:
space:
mode:
authorLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-10-22 18:36:47 +1000
committerLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-10-22 18:36:47 +1000
commit6deb7268738699ba9d654db5aba53866184f1fda (patch)
tree2b0aba9ba2012952ad774aab8a120cb0a5d9ddeb /sway/tree/view.c
parentMerge pull request #2913 from emersion/fix-swaybar-hotplug (diff)
downloadsway-6deb7268738699ba9d654db5aba53866184f1fda.tar.gz
sway-6deb7268738699ba9d654db5aba53866184f1fda.tar.zst
sway-6deb7268738699ba9d654db5aba53866184f1fda.zip
Fix crash when quitting a QT app on the wayland backend using menu
QT unmaps the view before destroying the popup. We destroyed the popup in response to the view unmapping, but then we'd attempt to destroy it a second time which caused a crash. The patch removes the listener. I tested it with GTK as well, and can confirm the popup is still being destroyed.
Diffstat (limited to 'sway/tree/view.c')
-rw-r--r--sway/tree/view.c11
1 files changed, 0 insertions, 11 deletions
diff --git a/sway/tree/view.c b/sway/tree/view.c
index b23afb97..a8486dd7 100644
--- a/sway/tree/view.c
+++ b/sway/tree/view.c
@@ -731,13 +731,6 @@ static void view_child_handle_surface_destroy(struct wl_listener *listener,
731 view_child_destroy(child); 731 view_child_destroy(child);
732} 732}
733 733
734static void view_child_handle_view_unmap(struct wl_listener *listener,
735 void *data) {
736 struct sway_view_child *child =
737 wl_container_of(listener, child, view_unmap);
738 view_child_destroy(child);
739}
740
741static void view_init_subsurfaces(struct sway_view *view, 734static void view_init_subsurfaces(struct sway_view *view,
742 struct wlr_surface *surface) { 735 struct wlr_surface *surface) {
743 struct wlr_subsurface *subsurface; 736 struct wlr_subsurface *subsurface;
@@ -779,9 +772,6 @@ void view_child_init(struct sway_view_child *child,
779 child->surface_map.notify = view_child_handle_surface_map; 772 child->surface_map.notify = view_child_handle_surface_map;
780 child->surface_unmap.notify = view_child_handle_surface_unmap; 773 child->surface_unmap.notify = view_child_handle_surface_unmap;
781 774
782 wl_signal_add(&view->events.unmap, &child->view_unmap);
783 child->view_unmap.notify = view_child_handle_view_unmap;
784
785 struct sway_output *output = child->view->container->workspace->output; 775 struct sway_output *output = child->view->container->workspace->output;
786 wlr_surface_send_enter(child->surface, output->wlr_output); 776 wlr_surface_send_enter(child->surface, output->wlr_output);
787 777
@@ -791,7 +781,6 @@ void view_child_init(struct sway_view_child *child,
791void view_child_destroy(struct sway_view_child *child) { 781void view_child_destroy(struct sway_view_child *child) {
792 wl_list_remove(&child->surface_commit.link); 782 wl_list_remove(&child->surface_commit.link);
793 wl_list_remove(&child->surface_destroy.link); 783 wl_list_remove(&child->surface_destroy.link);
794 wl_list_remove(&child->view_unmap.link);
795 784
796 if (child->impl && child->impl->destroy) { 785 if (child->impl && child->impl->destroy) {
797 child->impl->destroy(child); 786 child->impl->destroy(child);