diff --git a/rtbuf_gtk.c b/rtbuf_gtk.c
index d95504b..ccda050 100644
--- a/rtbuf_gtk.c
+++ b/rtbuf_gtk.c
@@ -9,11 +9,57 @@ GtkWindow *modular = NULL;
GtkLayout *modular_layout = NULL;
GtkMenu *library_menu = NULL;
+void rtbuf_gtk_rtbuf_rename (RtbufWidget *widget)
+{
+ (void) widget;
+ printf("rtbuf-gtk rtbuf rename\n");
+}
+
+void rtbuf_gtk_rtbuf_menu (RtbufWidget *widget, GdkEventButton *event)
+{
+ GtkWidget *menu = gtk_menu_new();
+ GtkWidget *item = gtk_menu_item_new_with_label("Rename...");
+ gtk_container_add(GTK_CONTAINER(menu), item);
+ g_signal_connect_swapped(G_OBJECT(item), "activate",
+ G_CALLBACK(rtbuf_gtk_rtbuf_rename),
+ widget);
+ (void) event;
+ gtk_menu_popup(menu,
+ NULL, NULL, NULL, NULL,
+ event->button, event->time);
+}
+
+gboolean rtbuf_gtk_rtbuf_label_mouse_down (GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer data)
+{
+ (void) widget;
+ (void) data;
+ if (event->type == GDK_BUTTON_PRESS) {
+ if (event->button == 1) {
+ printf("rtbuf-gtk rtbuf drag\n");
+ return TRUE;
+ }
+ else if (event->button == 3) {
+ printf("rtbuf-gtk rtbuf popup\n");
+ rtbuf_gtk_rtbuf_menu(RTBUF_WIDGET(widget), event);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+
RtbufWidget * rtbuf_gtk_modular_layout_new (s_rtbuf *rtb,
const gint x, const gint y)
{
RtbufWidget *widget = rtbuf_widget_new(rtb, "rtbuf");
+ GtkWidget *label;
gtk_layout_put(modular_layout, GTK_WIDGET(widget), x, y);
+ label = rtbuf_widget_get_label_widget(widget);
+ g_signal_connect(G_OBJECT(label), "button-press-event",
+ G_CALLBACK(rtbuf_gtk_rtbuf_label_mouse_down),
+ NULL);
return widget;
}
diff --git a/rtbuf_widget.c b/rtbuf_widget.c
index b6354fa..16a1b26 100644
--- a/rtbuf_widget.c
+++ b/rtbuf_widget.c
@@ -20,9 +20,9 @@
struct _RtbufWidgetPrivate {
s_rtbuf *rtbuf;
- GtkLabel *label;
- GtkBox *inputs;
- GtkBox *outputs;
+ GtkWidget *label;
+ GtkWidget *inputs;
+ GtkWidget *outputs;
};
enum {
@@ -145,6 +145,8 @@ rtbuf_widget_draw (GtkWidget *widget, cairo_t *cr, gpointer data)
RtbufWidgetPrivate *priv = (RtbufWidgetPrivate*) data;
cairo_set_source_rgb(cr, 1.0, 1.0, 0.7);
cairo_paint(cr);
+ (void) widget;
+ (void) priv;
return FALSE;
}
@@ -164,7 +166,7 @@ void rtbuf_widget_set_label (RtbufWidget *widget,
if (label) {
RtbufWidgetPrivate *priv = rtbuf_widget_get_instance_private(widget);
if (GTK_IS_LABEL(priv->label))
- gtk_label_set_text(priv->label, label);
+ gtk_label_set_text(GTK_LABEL(priv->label), label);
}
}
@@ -175,7 +177,19 @@ rtbuf_widget_get_label (RtbufWidget *widget)
g_return_val_if_fail(IS_RTBUF_WIDGET(widget), NULL);
priv = rtbuf_widget_get_instance_private(widget);
if (GTK_IS_LABEL(priv->label))
- return gtk_label_get_text(priv->label);
+ return gtk_label_get_text(GTK_LABEL(priv->label));
+ else
+ return NULL;
+}
+
+GtkWidget *
+rtbuf_widget_get_label_widget (RtbufWidget *widget)
+{
+ RtbufWidgetPrivate *priv;
+ g_return_val_if_fail(IS_RTBUF_WIDGET(widget), NULL);
+ priv = rtbuf_widget_get_instance_private(widget);
+ if (GTK_IS_LABEL(priv->label))
+ return priv->label;
else
return NULL;
}
diff --git a/rtbuf_widget.h b/rtbuf_widget.h
index 9a6dd41..ccff6af 100644
--- a/rtbuf_widget.h
+++ b/rtbuf_widget.h
@@ -19,12 +19,12 @@
#include "rtbuf.h"
-#define RTBUF_WIDGET_TYPE (rtbuf_widget_get_type ())
-#define RTBUF_WIDGET(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), RTBUF_WIDGET_TYPE, RtbufWidget))
-#define RTBUF_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RTBUF_WIDGET_TYPE, RtbufWidgetClass))
-#define IS_RTBUF_WIDGET(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), RTBUF_WIDGET_TYPE))
-#define IS_RTBUF_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RTBUF_WIDGET_TYPE))
-#define RTBUF_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RTBUF_WIDGET_TYPE, RtbufWidgetClass))
+#define RTBUF_WIDGET_TYPE (rtbuf_widget_get_type())
+#define RTBUF_WIDGET(object) (G_TYPE_CHECK_INSTANCE_CAST((object), RTBUF_WIDGET_TYPE, RtbufWidget))
+#define RTBUF_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), RTBUF_WIDGET_TYPE, RtbufWidgetClass))
+#define IS_RTBUF_WIDGET(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), RTBUF_WIDGET_TYPE))
+#define IS_RTBUF_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), RTBUF_WIDGET_TYPE))
+#define RTBUF_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), RTBUF_WIDGET_TYPE, RtbufWidgetClass))
typedef struct _RtbufWidget RtbufWidget;
typedef struct _RtbufWidgetClass RtbufWidgetClass;
@@ -38,8 +38,10 @@ struct _RtbufWidgetClass {
GtkBoxClass parent_class;
};
+GType rtbuf_widget_get_type (void) G_GNUC_CONST;
RtbufWidget * rtbuf_widget_new (s_rtbuf *rtb, const gchar *label);
void rtbuf_widget_set_label (RtbufWidget *widget, const gchar *label);
const gchar * rtbuf_widget_get_label (RtbufWidget *widget);
+GtkWidget * rtbuf_widget_get_label_widget (RtbufWidget *widget);
#endif