Commit f81b0c947523305100ca47fe4bea43e5db8ee976

Thomas de Grivel 2020-05-04T10:01:33

rtbuf-gtk: fix deleting connected rtbuf

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);
 }