diff options
author | Claudio Saavedra <csaavedra@igalia.com> | 2012-05-25 17:05:02 +0800 |
---|---|---|
committer | Claudio Saavedra <csaavedra@igalia.com> | 2012-09-01 02:34:00 +0800 |
commit | 8ddda2707becfbf0fa90159c99f5c7a89a961b79 (patch) | |
tree | e9dd2fee127db98b15525c329006996797013344 | |
parent | 9eb6bdb143a1dc91f36d92899fa68358e2b47fe4 (diff) | |
download | gsoc2013-epiphany-8ddda2707becfbf0fa90159c99f5c7a89a961b79.tar.gz gsoc2013-epiphany-8ddda2707becfbf0fa90159c99f5c7a89a961b79.tar.zst gsoc2013-epiphany-8ddda2707becfbf0fa90159c99f5c7a89a961b79.zip |
gd-main-view: add a "item-deleted" signal to handle user-triggered item deletions
GdMainView connects to GdMainViewGeneric:delete-item-clicked and emits
its :item-deleted signal which, if unhandled, simply removes the item
in question from the underlying model.
Users of GdMainView can handle this signal and stop the default
handler from being invoked, thus avoiding removal of the item.
-rw-r--r-- | lib/widgets/gd-main-view.c | 56 | ||||
-rw-r--r-- | lib/widgets/gd-main-view.h | 5 |
2 files changed, 61 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); +} diff --git a/lib/widgets/gd-main-view.h b/lib/widgets/gd-main-view.h index b6906a10f..7a082ad9f 100644 --- a/lib/widgets/gd-main-view.h +++ b/lib/widgets/gd-main-view.h @@ -77,6 +77,9 @@ struct _GdMainView { struct _GdMainViewClass { GtkScrolledWindowClass parent_class; + + gboolean (* item_deleted) (GdMainView *self, + const gchar *path); }; GType gd_main_view_get_type (void) G_GNUC_CONST; @@ -98,6 +101,8 @@ void gd_main_view_set_model (GdMainView *self, GtkWidget * gd_main_view_get_generic_view (GdMainView *self); +void gd_main_view_item_deleted (GdMainView *self, const gchar *path); + G_END_DECLS #endif /* __GD_MAIN_VIEW_H__ */ |