Commit a38fbf6c56f134f1cc94b707550060f39dfdfe89

Thomas de Grivel 2020-03-18T19:24:05

move rtbuf-gtk rtbuf code to its own file

diff --git a/Makefile.am b/Makefile.am
index d110dcd..34cd9cc 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -45,11 +45,13 @@ rtbuf_gtk_LDADD = ${GTK3_LIBS} librtbuf.la
 rtbuf_gtk_SOURCES = \
 	rtbuf_gtk.c \
 	rtbuf_gtk_resources.c \
+	rtbuf_gtk_rtbuf.c \
 	rtbuf_input_widget.c \
 	rtbuf_lib.c \
 	rtbuf_output_widget.c \
 	rtbuf_widget.c
 include_HEADERS += \
+	rtbuf_gtk.h \
 	rtbuf_input_widget.h \
 	rtbuf_lib.h \
 	rtbuf_output_widget.h \
diff --git a/rtbuf_gtk.c b/rtbuf_gtk.c
index 8f7d58c..3777018 100644
--- a/rtbuf_gtk.c
+++ b/rtbuf_gtk.c
@@ -18,6 +18,7 @@
 #include <gtk/gtk.h>
 #include <stdio.h>
 #include "rtbuf.h"
+#include "rtbuf_gtk.h"
 #include "rtbuf_input_widget.h"
 #include "rtbuf_lib.h"
 #include "rtbuf_var.h"
@@ -46,110 +47,6 @@ gint drag_y = 0;
 gint rtbuf_x = 100;
 gint rtbuf_y = 100;
 
-void rtbuf_gtk_rtbuf_rename (RtbufWidget *widget)
-{
-  (void) widget;
-  printf("rtbuf-gtk rtbuf rename\n");
-}
-
-void rtbuf_gtk_rtbuf_delete (RtbufWidget *widget)
-{
-  s_rtbuf *rtbuf = rtbuf_widget_get_rtbuf(widget);
-  printf("rtbuf-gtk rtbuf delete\n");
-  gtk_container_remove(GTK_CONTAINER(modular_layout),
-                       GTK_WIDGET(widget));
-  rtbuf_delete(rtbuf);
-}
-
-void rtbuf_gtk_rtbuf_menu (RtbufWidget *widget, GdkEvent *event)
-{
-  static GtkMenu *menu = 0;
-  static GtkWidget *rename;
-  static GtkWidget *delete;
-  static guint signal;
-  printf("rtbuf-gtk rtbuf menu\n");
-  if (!menu) {
-    signal = g_signal_lookup("activate", GTK_TYPE_MENU_ITEM);
-    assert(signal);
-    menu = GTK_MENU(gtk_menu_new());
-    rename = gtk_menu_item_new_with_label("Rename...");
-    gtk_container_add(GTK_CONTAINER(menu), rename);
-    gtk_widget_show(rename);
-    delete = gtk_menu_item_new_with_label("Delete");
-    gtk_container_add(GTK_CONTAINER(menu), delete);
-    gtk_widget_show(delete);
-  }
-  g_signal_handlers_disconnect_matched(G_OBJECT(rename),
-                                       G_SIGNAL_MATCH_FUNC,
-                                       signal,
-                                       0,
-                                       NULL,
-                                       G_CALLBACK(rtbuf_gtk_rtbuf_rename),
-                                       NULL);
-  g_signal_connect_swapped(G_OBJECT(rename), "activate",
-                           G_CALLBACK(rtbuf_gtk_rtbuf_rename),
-                           widget);
-  g_signal_handlers_disconnect_matched(G_OBJECT(delete),
-                                       G_SIGNAL_MATCH_FUNC,
-                                       signal,
-                                       0,
-                                       NULL,
-                                       G_CALLBACK(rtbuf_gtk_rtbuf_delete),
-                                       NULL);
-  g_signal_connect_swapped(G_OBJECT(delete), "activate",
-                           G_CALLBACK(rtbuf_gtk_rtbuf_delete),
-                           widget);
-  gtk_menu_popup_at_pointer(menu, event);
-}
-
-void rtbuf_gtk_rtbuf_drag_begin (GtkWidget      *widget,
-                                 GdkDragContext *context,
-                                 gpointer        data)
-{
-  (void) data;
-  (void) context;
-  printf("rtbuf-gtk rtbuf drag begin\n");
-}
-
-void rtbuf_gtk_rtbuf_drag (RtbufWidget *widget,
-                           GdkEventButton *event)
-{
-  (void) widget;
-  (void) event;
-  GtkWidget *gtk_widget = GTK_WIDGET(widget);
-  printf("rtbuf-gtk rtbuf drag\n");
-  g_signal_connect(G_OBJECT(widget), "drag-begin",
-                   G_CALLBACK (rtbuf_gtk_rtbuf_drag_begin), NULL);
-  gdk_window_get_device_position(event->window, event->device,
-                                 &drag_x, &drag_y, NULL);
-  gtk_drag_begin_with_coordinates(GTK_WIDGET(widget),
-                                  rtbuf_move_target_list,
-                                  GDK_ACTION_DEFAULT,
-                                  event->button,
-                                  (GdkEvent*) event,
-                                  -1, -1);
-}
-
-gboolean rtbuf_gtk_rtbuf_button_press (GtkWidget *widget,
-                                       GdkEvent *event,
-                                       gpointer data)
-{
-  RtbufWidget *rtbuf_widget = RTBUF_WIDGET(widget);
-  (void) data;
-  printf("rtbuf-gtk rtbuf button press\n");
-  if (event->type == GDK_BUTTON_PRESS) {
-    GdkEventButton *eb = (GdkEventButton*) event;
-    if (eb->button == 1) {
-      rtbuf_gtk_rtbuf_drag(rtbuf_widget, eb);
-      return TRUE;
-    }
-    else if (eb->button == 3) {
-      rtbuf_gtk_rtbuf_menu(rtbuf_widget, event);
-      return TRUE;
-    }
-  }
-  return FALSE;
-}
 
 void rtbuf_gtk_input_disconnect (RtbufInputWidget *widget)
 {
diff --git a/rtbuf_gtk.h b/rtbuf_gtk.h
new file mode 100644
index 0000000..a922c64
--- /dev/null
+++ b/rtbuf_gtk.h
@@ -0,0 +1,15 @@
+#ifndef RTBUF_GTK_H
+#define RTBUF_GTK_H
+
+GtkLayout *modular_layout;
+
+GtkTargetList *rtbuf_move_target_list;
+
+gint drag_x;
+gint drag_y;
+
+gboolean rtbuf_gtk_rtbuf_button_press (GtkWidget *widget,
+                                       GdkEvent *event,
+                                       gpointer data);
+
+#endif /* RTBUF_GTK_H */
diff --git a/rtbuf_gtk_rtbuf.c b/rtbuf_gtk_rtbuf.c
new file mode 100644
index 0000000..d9354f2
--- /dev/null
+++ b/rtbuf_gtk_rtbuf.c
@@ -0,0 +1,127 @@
+/*
+ * Copyright 2020 Thomas de Grivel <thoxdg@gmail.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <assert.h>
+#include <gtk/gtk.h>
+#include <stdio.h>
+#include "rtbuf.h"
+#include "rtbuf_gtk.h"
+#include "rtbuf_widget.h"
+
+void rtbuf_gtk_rtbuf_rename (RtbufWidget *widget)
+{
+  (void) widget;
+  printf("rtbuf-gtk rtbuf rename\n");
+}
+
+void rtbuf_gtk_rtbuf_delete (RtbufWidget *widget)
+{
+  s_rtbuf *rtbuf = rtbuf_widget_get_rtbuf(widget);
+  printf("rtbuf-gtk rtbuf delete\n");
+  gtk_container_remove(GTK_CONTAINER(modular_layout),
+                       GTK_WIDGET(widget));
+  rtbuf_delete(rtbuf);
+}
+
+void rtbuf_gtk_rtbuf_menu (RtbufWidget *widget, GdkEvent *event)
+{
+  static GtkMenu *menu = 0;
+  static GtkWidget *rename;
+  static GtkWidget *delete;
+  static guint signal;
+  printf("rtbuf-gtk rtbuf menu\n");
+  if (!menu) {
+    signal = g_signal_lookup("activate", GTK_TYPE_MENU_ITEM);
+    assert(signal);
+    menu = GTK_MENU(gtk_menu_new());
+    rename = gtk_menu_item_new_with_label("Rename...");
+    gtk_container_add(GTK_CONTAINER(menu), rename);
+    gtk_widget_show(rename);
+    delete = gtk_menu_item_new_with_label("Delete");
+    gtk_container_add(GTK_CONTAINER(menu), delete);
+    gtk_widget_show(delete);
+  }
+  g_signal_handlers_disconnect_matched(G_OBJECT(rename),
+                                       G_SIGNAL_MATCH_FUNC,
+                                       signal,
+                                       0,
+                                       NULL,
+                                       G_CALLBACK(rtbuf_gtk_rtbuf_rename),
+                                       NULL);
+  g_signal_connect_swapped(G_OBJECT(rename), "activate",
+                           G_CALLBACK(rtbuf_gtk_rtbuf_rename),
+                           widget);
+  g_signal_handlers_disconnect_matched(G_OBJECT(delete),
+                                       G_SIGNAL_MATCH_FUNC,
+                                       signal,
+                                       0,
+                                       NULL,
+                                       G_CALLBACK(rtbuf_gtk_rtbuf_delete),
+                                       NULL);
+  g_signal_connect_swapped(G_OBJECT(delete), "activate",
+                           G_CALLBACK(rtbuf_gtk_rtbuf_delete),
+                           widget);
+  gtk_menu_popup_at_pointer(menu, event);
+}
+
+void rtbuf_gtk_rtbuf_drag_begin (GtkWidget      *widget,
+                                 GdkDragContext *context,
+                                 gpointer        data)
+{
+  (void) data;
+  (void) context;
+  printf("rtbuf-gtk rtbuf drag begin\n");
+}
+
+void rtbuf_gtk_rtbuf_drag (RtbufWidget *widget,
+                           GdkEventButton *event)
+{
+  (void) widget;
+  (void) event;
+  GtkWidget *gtk_widget = GTK_WIDGET(widget);
+  printf("rtbuf-gtk rtbuf drag\n");
+  g_signal_connect(G_OBJECT(widget), "drag-begin",
+                   G_CALLBACK (rtbuf_gtk_rtbuf_drag_begin), NULL);
+  gdk_window_get_device_position(event->window, event->device,
+                                 &drag_x, &drag_y, NULL);
+  gtk_drag_begin_with_coordinates(GTK_WIDGET(widget),
+                                  rtbuf_move_target_list,
+                                  GDK_ACTION_DEFAULT,
+                                  event->button,
+                                  (GdkEvent*) event,
+                                  -1, -1);
+}
+
+gboolean rtbuf_gtk_rtbuf_button_press (GtkWidget *widget,
+                                       GdkEvent *event,
+                                       gpointer data)
+{
+  RtbufWidget *rtbuf_widget = RTBUF_WIDGET(widget);
+  (void) data;
+  printf("rtbuf-gtk rtbuf button press\n");
+  if (event->type == GDK_BUTTON_PRESS) {
+    GdkEventButton *eb = (GdkEventButton*) event;
+    if (eb->button == 1) {
+      rtbuf_gtk_rtbuf_drag(rtbuf_widget, eb);
+      return TRUE;
+    }
+    else if (eb->button == 3) {
+      rtbuf_gtk_rtbuf_menu(rtbuf_widget, event);
+      return TRUE;
+    }
+  }
+  return FALSE;
+}