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