diff --git a/gtk/rtbuf_gtk_connection.c b/gtk/rtbuf_gtk_connection.c
index 900a12f..159b9f9 100644
--- a/gtk/rtbuf_gtk_connection.c
+++ b/gtk/rtbuf_gtk_connection.c
@@ -74,3 +74,20 @@ s_rtbuf_gtk_connection * rtbuf_gtk_connection_find
return c;
}
+void rtbuf_gtk_connection_remove_rtbuf (s_rtbuf_gtk_connection **conn,
+ s_rtbuf *rtbuf)
+{
+ while (*conn) {
+ s_rtbuf *output_rtbuf;
+ output_rtbuf = rtbuf_output_widget_get_rtbuf((*conn)->output_widget);
+ if (output_rtbuf != rtbuf) {
+ s_rtbuf *input_rtbuf;
+ input_rtbuf = rtbuf_input_widget_get_rtbuf((*conn)->input_widget);
+ if (input_rtbuf != rtbuf) {
+ conn = &(*conn)->next;
+ continue;
+ }
+ }
+ *conn = (*conn)->next;
+ }
+}
diff --git a/gtk/rtbuf_gtk_connection.h b/gtk/rtbuf_gtk_connection.h
index eba2c4a..19efd9d 100644
--- a/gtk/rtbuf_gtk_connection.h
+++ b/gtk/rtbuf_gtk_connection.h
@@ -25,4 +25,7 @@ s_rtbuf_gtk_connection * rtbuf_gtk_connection_find
RtbufOutputWidget *output_widget,
RtbufInputWidget *input_widget);
+void rtbuf_gtk_connection_remove_rtbuf (s_rtbuf_gtk_connection **head,
+ s_rtbuf *rtbuf);
+
#endif
diff --git a/gtk/rtbuf_gtk_rtbuf.c b/gtk/rtbuf_gtk_rtbuf.c
index 832219a..36d804a 100644
--- a/gtk/rtbuf_gtk_rtbuf.c
+++ b/gtk/rtbuf_gtk_rtbuf.c
@@ -31,8 +31,10 @@ void rtbuf_gtk_rtbuf_delete (RtbufWidget *widget)
{
s_rtbuf *rtbuf = rtbuf_widget_get_rtbuf(widget);
printf("rtbuf-gtk rtbuf delete\n");
+ rtbuf_gtk_connection_remove_rtbuf(&modular_connections, rtbuf);
gtk_container_remove(GTK_CONTAINER(modular_layout),
GTK_WIDGET(widget));
+ gtk_widget_queue_draw(GTK_WIDGET(modular_layout));
rtbuf_delete(rtbuf);
}