aboutsummaryrefslogtreecommitdiffstats
path: root/lib/widgets/gd-main-view.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/widgets/gd-main-view.c')
-rw-r--r--lib/widgets/gd-main-view.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/lib/widgets/gd-main-view.c b/lib/widgets/gd-main-view.c
index 8c3545e99..66984267f 100644
--- a/lib/widgets/gd-main-view.c
+++ b/lib/widgets/gd-main-view.c
@@ -47,6 +47,7 @@ enum {
enum {
ITEM_ACTIVATED = 1,
+ ITEM_DELETED,
SELECTION_MODE_REQUEST,
VIEW_SELECTION_CHANGED,
NUM_SIGNALS
@@ -148,6 +149,27 @@ gd_main_view_set_property (GObject *object,
}
}
+static gboolean
+gd_main_view_real_item_deleted (GdMainView *self,
+ const gchar *path)
+{
+#if 0
+ /* Handling this breaks the logic of the models used. I think
+ we shouldn't handle this at all. */
+ GtkTreePath *tree_path = gtk_tree_path_new_from_string (path);
+ GtkTreeIter iter;
+
+ if (!gtk_tree_model_get_iter (self->priv->model, &iter, tree_path)) {
+ gtk_tree_path_free (tree_path);
+ return FALSE;
+ }
+
+ gtk_list_store_remove (GTK_LIST_STORE (self->priv->model), &iter);
+ gtk_tree_path_free (tree_path);
+#endif
+ return TRUE;
+}
+
static void
gd_main_view_class_init (GdMainViewClass *klass)
{
@@ -158,6 +180,8 @@ gd_main_view_class_init (GdMainViewClass *klass)
oclass->dispose = gd_main_view_dispose;
oclass->finalize = gd_main_view_finalize;
+ klass->item_deleted = gd_main_view_real_item_deleted;
+
properties[PROP_VIEW_TYPE] =
g_param_spec_int ("view-type",
"View type",
@@ -195,6 +219,16 @@ gd_main_view_class_init (GdMainViewClass *klass)
G_TYPE_STRING,
GTK_TYPE_TREE_PATH);
+ signals[ITEM_DELETED] =
+ g_signal_new ("item-deleted",
+ GD_TYPE_MAIN_VIEW,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GdMainViewClass, item_deleted),
+ g_signal_accumulator_true_handled, NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN, 1,
+ G_TYPE_STRING | G_SIGNAL_TYPE_STATIC_SCOPE);
+
signals[SELECTION_MODE_REQUEST] =
g_signal_new ("selection-mode-request",
GD_TYPE_MAIN_VIEW,
@@ -527,6 +561,17 @@ on_drag_begin (GdMainViewGeneric *generic,
}
static void
+on_delete_item_clicked (GdMainViewGeneric *generic,
+ const gchar *path,
+ GdMainView *self)
+{
+ g_free (self->priv->button_press_item_path);
+ self->priv->button_press_item_path = NULL;
+
+ gd_main_view_item_deleted (self, path);
+}
+
+static void
gd_main_view_apply_model (GdMainView *self)
{
GdMainViewGeneric *generic = get_generic (self);
@@ -587,6 +632,8 @@ gd_main_view_rebuild (GdMainView *self)
G_CALLBACK (on_button_release_event), self);
g_signal_connect_after (self->priv->current_view, "drag-begin",
G_CALLBACK (on_drag_begin), self);
+ g_signal_connect (self->priv->current_view, "delete-item-clicked",
+ G_CALLBACK (on_delete_item_clicked), self);
gd_main_view_apply_selection_mode (self);
gd_main_view_apply_model (self);
@@ -723,3 +770,12 @@ gd_main_view_get_selection (GdMainView *self)
return g_list_reverse (retval);
}
+
+void
+gd_main_view_item_deleted (GdMainView *self,
+ const gchar *path)
+{
+ gboolean result;
+
+ g_signal_emit (self, signals [ITEM_DELETED], 0, path, &result);
+}