[gitg] Add a Delete File menu item to the unstage menu
- From: Garrett Regier <gregier src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gitg] Add a Delete File menu item to the unstage menu
- Date: Sat, 23 Jul 2011 14:52:32 +0000 (UTC)
commit 7b51de39a4915a39ed33f9b251d52b70ebf51e07
Author: Garrett Regier <garrettregier gmail com>
Date: Sat Jul 23 07:52:01 2011 -0700
Add a Delete File menu item to the unstage menu
gitg/gitg-commit-menu.ui | 6 ++++
gitg/gitg-commit-view.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 72 insertions(+), 0 deletions(-)
---
diff --git a/gitg/gitg-commit-menu.ui b/gitg/gitg-commit-menu.ui
index 6c07cb0..90ad8e8 100644
--- a/gitg/gitg-commit-menu.ui
+++ b/gitg/gitg-commit-menu.ui
@@ -28,6 +28,11 @@
<property name="stock-id">gtk-edit</property>
</object>
</child>
+ <child>
+ <object class="GtkAction" id="DeleteFileAction">
+ <property name="stock-id">gtk-delete</property>
+ </object>
+ </child>
</object>
</child>
<ui>
@@ -36,6 +41,7 @@
<menuitem action="RevertChangesAction"/>
<menuitem action="IgnoreFileAction"/>
<menuitem action="EditFileAction"/>
+ <menuitem action="DeleteFileAction"/>
</popup>
<popup name="popup_commit_unstage">
<menuitem action="UnstageChangesAction"/>
diff --git a/gitg/gitg-commit-view.c b/gitg/gitg-commit-view.c
index 63d313d..0b98b45 100644
--- a/gitg/gitg-commit-view.c
+++ b/gitg/gitg-commit-view.c
@@ -137,6 +137,8 @@ static void on_revert_changes(GtkAction *action, GitgCommitView *view);
static void on_ignore_file(GtkAction *action, GitgCommitView *view);
static void on_unstage_changes(GtkAction *action, GitgCommitView *view);
static void on_edit_file(GtkAction *action, GitgCommitView *view);
+static void on_delete_file (GtkAction *action,
+ GitgCommitView *view);
static void on_check_button_amend_toggled (GtkToggleButton *button, GitgCommitView *view);
@@ -1378,6 +1380,10 @@ gitg_commit_view_parser_finished(GtkBuildable *buildable, GtkBuilder *builder)
g_signal_connect(gtk_builder_get_object(b, "IgnoreFileAction"), "activate", G_CALLBACK(on_ignore_file), self);
g_signal_connect(gtk_builder_get_object(b, "UnstageChangesAction"), "activate", G_CALLBACK(on_unstage_changes), self);
g_signal_connect(gtk_builder_get_object(b, "EditFileAction"), "activate", G_CALLBACK(on_edit_file), self);
+ g_signal_connect (gtk_builder_get_object (b, "DeleteFileAction"),
+ "activate",
+ G_CALLBACK (on_delete_file),
+ self);
self->priv->group_context = GTK_ACTION_GROUP(gtk_builder_get_object(b, "action_group_commit_context"));
@@ -2138,12 +2144,15 @@ set_unstaged_popup_status(GitgCommitView *view)
GtkAction *revert = gtk_ui_manager_get_action(view->priv->ui_manager, "/ui/popup_commit_stage/RevertChangesAction");
GtkAction *ignore = gtk_ui_manager_get_action(view->priv->ui_manager, "/ui/popup_commit_stage/IgnoreFileAction");
GtkAction *edit = gtk_ui_manager_get_action(view->priv->ui_manager, "/ui/popup_commit_stage/EditFileAction");
+ GtkAction *delete = gtk_ui_manager_get_action (view->priv->ui_manager,
+ "/ui/popup_commit_stage/DeleteFileAction");
gtk_action_set_visible(revert, status == GITG_CHANGED_FILE_STATUS_MODIFIED ||
status == GITG_CHANGED_FILE_STATUS_DELETED);
gtk_action_set_visible(ignore, status == GITG_CHANGED_FILE_STATUS_NEW);
gtk_action_set_visible (edit, status != GITG_CHANGED_FILE_STATUS_DELETED);
+ gtk_action_set_visible (delete, status == GITG_CHANGED_FILE_STATUS_NEW);
return TRUE;
}
@@ -2352,6 +2361,63 @@ on_edit_file (GtkAction *action, GitgCommitView *view)
}
static void
+do_delete_file (GitgCommitView *view)
+{
+ GList *files = NULL;
+ GList *item;
+ gboolean success = TRUE;
+
+ get_selected_files (view->priv->tree_view_unstaged, &files, NULL, NULL, NULL);
+
+ for (item = files; item; item = g_list_next (item))
+ {
+ GitgChangedFile *file = item->data;
+ GFile *location = gitg_changed_file_get_file (file);
+
+ success &= g_file_delete (location, NULL, NULL);
+
+ g_object_unref (location);
+ g_object_unref (file);
+ }
+
+ g_list_free (files);
+
+ gitg_commit_refresh (view->priv->commit);
+
+ if (!success)
+ {
+ show_error (view, _("Delete Failed"));
+ }
+}
+
+static void
+on_delete_file (GtkAction *action,
+ GitgCommitView *view)
+{
+ GtkWidget *toplevel;
+ GtkWidget *dialog;
+
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (view));
+ dialog = gtk_message_dialog_new (GTK_WINDOW (toplevel),
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_YES_NO,
+ "%s",
+ _("Are you sure you want to delete these files?"));
+
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s",
+ _("Deleting files is permanent "
+ "and cannot be undone"));
+
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_YES)
+ {
+ do_delete_file (view);
+ }
+
+ gtk_widget_destroy (dialog);
+}
+
+static void
on_ignore_file (GtkAction *action, GitgCommitView *view)
{
GList *files = NULL;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]