summaryrefslogtreecommitdiff
path: root/x11-terms/sakura/files/sakura-3.6.0-tab-crash.patch
blob: 4d1a33e27510d156b0fe822e65f7a2d8ad3f2386 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
--- a/src/sakura.c
+++ b/src/sakura.c
@@ -339,6 +339,7 @@
 	bool label_set_byuser;
 	GtkBorder padding;   /* inner-property data */
 	int colorset;
+	gulong exit_handler_id;
 };
 
 
@@ -984,31 +985,6 @@
 	if (npages==1) {
 		sakura_config_done();
 	}
-
-	/* Workaround for libvte strange behaviour. There is not child-exited signal for
-	   the last terminal, so we need to kill it here.  Check with libvte authors about
-	   child-exited/eof signals */
-	if (gtk_notebook_get_current_page(GTK_NOTEBOOK(sakura.notebook))==0) {
-
-		term = sakura_get_page_term(sakura, 0);
-
-		if (option_hold==TRUE) {
-			SAY("hold option has been activated");
-			return;
-		}
-
-        //SAY("waiting for terminal pid (in eof) %d", term->pid);
-        //waitpid(term->pid, &status, WNOHANG);
-	/* TODO: check wait return */
-		/* Child should be automatically reaped because we don't use G_SPAWN_DO_NOT_REAP_CHILD flag */
-		g_spawn_close_pid(term->pid);
-
-		sakura_del_tab(0);
-
-		npages = gtk_notebook_get_n_pages(GTK_NOTEBOOK(sakura.notebook));
-		if (npages==0)
-			sakura_destroy();
-	}	
 }
 
 /* This handler is called when window title changes, and is used to change window and notebook pages titles */
@@ -3167,7 +3143,7 @@
 	g_signal_connect(G_OBJECT(term->vte), "bell", G_CALLBACK(sakura_beep), NULL);
 	g_signal_connect(G_OBJECT(term->vte), "increase-font-size", G_CALLBACK(sakura_increase_font), NULL);
 	g_signal_connect(G_OBJECT(term->vte), "decrease-font-size", G_CALLBACK(sakura_decrease_font), NULL);
-	g_signal_connect(G_OBJECT(term->vte), "child-exited", G_CALLBACK(sakura_child_exited), NULL);
+	term->exit_handler_id = g_signal_connect(G_OBJECT(term->vte), "child-exited", G_CALLBACK(sakura_child_exited), NULL);
 	g_signal_connect(G_OBJECT(term->vte), "eof", G_CALLBACK(sakura_eof), NULL);
 	g_signal_connect(G_OBJECT(term->vte), "window-title-changed", G_CALLBACK(sakura_title_changed), NULL);
 	g_signal_connect_swapped(G_OBJECT(term->vte), "button-press-event", G_CALLBACK(sakura_button_press), sakura.menu);
@@ -3366,6 +3342,7 @@
 	}
 
 	gtk_widget_hide(term->hbox);
+	g_signal_handler_disconnect (term->vte, term->exit_handler_id);
 	gtk_notebook_remove_page(GTK_NOTEBOOK(sakura.notebook), page);
 
 	/* Find the next page, if it exists, and grab focus */