Commit b0f524596034a5780240782b57276a81800aec08

Thomas de Grivel 2020-05-05T17:33:35

rtbuf-gtk input disconnect

diff --git a/gtk/rtbuf_gtk.c b/gtk/rtbuf_gtk.c
index a97ded6..aa7aaf5 100644
--- a/gtk/rtbuf_gtk.c
+++ b/gtk/rtbuf_gtk.c
@@ -79,19 +79,6 @@ void rtbuf_gtk_drag_connection_end (RtbufInputWidget *input_widget)
   }
 }
 
-gboolean rtbuf_gtk_input_button_press (RtbufInputWidget *widget,
-                                       GdkEvent *event)
-{
-  printf("rtbuf-gtk input button press\n");
-  (void) widget;
-  (void) event;
-  if (drag_connection) {
-    rtbuf_gtk_drag_connection_end(widget);
-    return TRUE;
-  }
-  return TRUE;
-}
-
 RtbufWidget * rtbuf_gtk_modular_layout_new (s_rtbuf *rtbuf,
                                             const gint x, const gint y)
 {
diff --git a/gtk/rtbuf_gtk.h b/gtk/rtbuf_gtk.h
index 7e9196f..6f5a86a 100644
--- a/gtk/rtbuf_gtk.h
+++ b/gtk/rtbuf_gtk.h
@@ -41,8 +41,8 @@ gboolean rtbuf_gtk_rtbuf_button_press (GtkWidget *widget,
                                        GdkEvent *event,
                                        gpointer data);
 
-gboolean rtbuf_gtk_input_check_button_press (RtbufInputWidget *widget,
-                                             GdkEvent *event);
+gboolean rtbuf_gtk_input_button_press (RtbufInputWidget *widget,
+                                       GdkEvent *event);
 
 gboolean rtbuf_gtk_output_check_button_press (RtbufOutputWidget *widget,
                                               GdkEvent *event);
diff --git a/gtk/rtbuf_gtk_input.c b/gtk/rtbuf_gtk_input.c
index 713a93b..53621ab 100644
--- a/gtk/rtbuf_gtk_input.c
+++ b/gtk/rtbuf_gtk_input.c
@@ -23,8 +23,23 @@
 
 void rtbuf_gtk_input_disconnect (RtbufInputWidget *widget)
 {
-  (void) widget;
+  s_rtbuf *rtbuf;
+  unsigned int in;
+  s_rtbuf_gtk_connection **conn = &modular_connections;
   printf("rtbuf-gtk input disconnect\n");
+    rtbuf = rtbuf_input_widget_get_rtbuf(widget);
+  in = rtbuf_input_widget_get_in(widget);
+  rtbuf_in_unbind(rtbuf, in);
+  while (*conn) {
+    if ((*conn)->input_widget == widget) {
+      s_rtbuf_gtk_connection *tmp = *conn;
+      *conn = tmp->next;
+      rtbuf_gtk_connection_delete(tmp);
+    }
+    else
+      conn = &(*conn)->next;
+  }
+  gtk_widget_queue_draw(GTK_WIDGET(modular_layout));
 }
 
 void rtbuf_gtk_input_menu (RtbufInputWidget *widget, GdkEvent *event)
@@ -54,13 +69,18 @@ void rtbuf_gtk_input_menu (RtbufInputWidget *widget, GdkEvent *event)
   gtk_menu_popup_at_pointer(menu, event);
 }
 
-gboolean rtbuf_gtk_input_check_button_press (RtbufInputWidget *widget,
-                                             GdkEvent *event)
+gboolean rtbuf_gtk_input_button_press (RtbufInputWidget *widget,
+                                       GdkEvent *event)
 {
   printf("rtbuf-gtk input check button press\n");
   if (event->type == GDK_BUTTON_PRESS) {
     GdkEventButton *eb = (GdkEventButton*) event;
-    if (eb->button == 3) {
+    if (eb->button == 1) {
+      if (drag_connection)
+        rtbuf_gtk_drag_connection_end(widget);
+      return TRUE;
+    }
+    else if (eb->button == 3) {
       rtbuf_gtk_input_menu(widget, event);
       return TRUE;
     }