diff options
Diffstat (limited to 'lib/widgets/gd-main-view.c')
-rw-r--r-- | lib/widgets/gd-main-view.c | 56 |
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); +} |