diff --git a/rtbuf_gtk.c b/rtbuf_gtk.c
index b1b7064..91f4640 100644
--- a/rtbuf_gtk.c
+++ b/rtbuf_gtk.c
@@ -1,3 +1,4 @@
+#include <assert.h>
#include <gtk/gtk.h>
#include <stdio.h>
#include "rtbuf.h"
@@ -15,17 +16,53 @@ void rtbuf_gtk_rtbuf_rename (RtbufWidget *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)
{
- GtkMenu *menu = GTK_MENU(gtk_menu_new());
- GtkWidget *item;
+ static GtkMenu *menu = 0;
+ static GtkWidget *rename;
+ static GtkWidget *delete;
+ static guint signal;
printf("rtbuf-gtk rtbuf popup\n");
- item = gtk_menu_item_new_with_label("Rename...");
- gtk_container_add(GTK_CONTAINER(menu), item);
- g_signal_connect_swapped(G_OBJECT(item), "activate",
+ 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);
- gtk_widget_show(item);
+ 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);
}
diff --git a/rtbuf_widget.c b/rtbuf_widget.c
index 3a641d4..dd7567b 100644
--- a/rtbuf_widget.c
+++ b/rtbuf_widget.c
@@ -177,19 +177,28 @@ const gchar *
rtbuf_widget_get_label (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))
+ if (priv && priv->label)
return gtk_label_get_text(GTK_LABEL(priv->label));
- else
- return NULL;
+ return NULL;
}
GtkWidget *
rtbuf_widget_get_event_box (RtbufWidget *widget)
{
RtbufWidgetPrivate *priv;
- g_return_val_if_fail(IS_RTBUF_WIDGET(widget), NULL);
priv = rtbuf_widget_get_instance_private(widget);
- return priv->event_box;
+ if (priv)
+ return priv->event_box;
+ return NULL;
+}
+
+s_rtbuf *
+rtbuf_widget_get_rtbuf (RtbufWidget *widget)
+{
+ RtbufWidgetPrivate *priv;
+ priv = rtbuf_widget_get_instance_private(widget);
+ if (priv)
+ return priv->rtbuf;
+ return NULL;
}
diff --git a/rtbuf_widget.h b/rtbuf_widget.h
index 8be0d04..319d859 100644
--- a/rtbuf_widget.h
+++ b/rtbuf_widget.h
@@ -43,5 +43,6 @@ 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_event_box (RtbufWidget *widget);
+s_rtbuf * rtbuf_widget_get_rtbuf (RtbufWidget *widget);
#endif