[gnome-builder] project-tree: add action to move file to tash.
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] project-tree: add action to move file to tash.
- Date: Thu, 16 Apr 2015 04:42:46 +0000 (UTC)
commit fc3a7eaa923f1d2be1225e2f35f61adfd439dd14
Author: Christian Hergert <christian hergert me>
Date: Wed Apr 15 21:35:42 2015 -0700
project-tree: add action to move file to tash.
data/gtk/menus.ui | 8 +++
src/project-tree/gb-project-tree-actions.c | 73 ++++++++++++++++++++++++++++
src/project-tree/gb-project-tree-builder.c | 3 +
3 files changed, 84 insertions(+), 0 deletions(-)
---
diff --git a/data/gtk/menus.ui b/data/gtk/menus.ui
index e7b02d7..33f9e45 100644
--- a/data/gtk/menus.ui
+++ b/data/gtk/menus.ui
@@ -190,6 +190,14 @@
</item>
</section>
</menu>
+ <menu id="gb-project-tree-move-to-trash">
+ <section id="gb-project-tree-move-to-trash-section">
+ <item>
+ <attribute name="label" translatable="yes">Mo_ve to Trash</attribute>
+ <attribute name="action">project-tree.move-to-trash</attribute>
+ </item>
+ </section>
+ </menu>
<menu id="gb-project-tree-build">
<section id="gb-project-tree-build-section">
<item>
diff --git a/src/project-tree/gb-project-tree-actions.c b/src/project-tree/gb-project-tree-actions.c
index ab0381a..a9b7263 100644
--- a/src/project-tree/gb-project-tree-actions.c
+++ b/src/project-tree/gb-project-tree-actions.c
@@ -16,6 +16,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#define G_LOG_DOMAIN "gb-project-tree-actions"
+
#include <glib/gi18n.h>
#include <gio/gdesktopappinfo.h>
@@ -699,8 +701,76 @@ gb_project_tree_actions_rename_file (GSimpleAction *action,
gb_tree_node_show_popover (selected, popover);
}
+static void
+gb_project_tree_actions__trash_file_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ IdeProject *project = (IdeProject *)object;
+ g_autoptr(GbProjectTree) self = user_data;
+ g_autoptr(GError) error = NULL;
+ GbTreeNode *node;
+ GObject *item = NULL;
+
+ g_assert (IDE_IS_PROJECT (project));
+ g_assert (GB_IS_PROJECT_TREE (self));
+
+ if (!ide_project_trash_file_finish (project, result, &error))
+ {
+ /* todo: warning dialog */
+ g_warning ("%s", error->message);
+ return;
+ }
+
+ /* todo: this should be done with tree observer */
+ if ((node = gb_tree_get_selected (GB_TREE (self))))
+ {
+ if ((node = gb_tree_node_get_parent (node)))
+ item = gb_tree_node_get_item (node);
+ }
+
+ gb_tree_rebuild (GB_TREE (self));
+
+ if ((node = gb_tree_find_item (GB_TREE (self), item)))
+ gb_tree_node_expand (node, TRUE);
+}
+
+static void
+gb_project_tree_actions_move_to_trash (GSimpleAction *action,
+ GVariant *param,
+ gpointer user_data)
+{
+ GbProjectTree *self = user_data;
+ GbWorkbench *workbench;
+ IdeContext *context;
+ IdeProject *project;
+ GbTreeNode *node;
+ GFile *file;
+ GObject *item;
+
+ g_assert (G_IS_SIMPLE_ACTION (action));
+ g_assert (GB_IS_PROJECT_TREE (self));
+
+ workbench = gb_widget_get_workbench (GTK_WIDGET (self));
+ context = gb_workbench_get_context (workbench);
+ project = ide_context_get_project (context);
+
+ if (!(node = gb_tree_get_selected (GB_TREE (self))) ||
+ !(item = gb_tree_node_get_item (node)) ||
+ !IDE_IS_PROJECT_FILE (item) ||
+ !(file = ide_project_file_get_file (IDE_PROJECT_FILE (item))))
+ return;
+
+ ide_project_trash_file_async (project,
+ file,
+ NULL,
+ gb_project_tree_actions__trash_file_cb,
+ g_object_ref (self));
+}
+
static GActionEntry GbProjectTreeActions[] = {
{ "collapse-all-nodes", gb_project_tree_actions_collapse_all_nodes },
+ { "move-to-trash", gb_project_tree_actions_move_to_trash },
{ "new-directory", gb_project_tree_actions_new_directory },
{ "new-file", gb_project_tree_actions_new_file },
{ "open", gb_project_tree_actions_open },
@@ -780,6 +850,9 @@ gb_project_tree_actions_update (GbProjectTree *self)
action_set (group, "rename-file",
"enabled", IDE_IS_PROJECT_FILE (item),
NULL);
+ action_set (group, "move-to-trash",
+ "enabled", IDE_IS_PROJECT_FILE (item),
+ NULL);
IDE_EXIT;
}
diff --git a/src/project-tree/gb-project-tree-builder.c b/src/project-tree/gb-project-tree-builder.c
index 9420826..c939759 100644
--- a/src/project-tree/gb-project-tree-builder.c
+++ b/src/project-tree/gb-project-tree-builder.c
@@ -294,6 +294,9 @@ gb_project_tree_builder_node_popup (GbTreeBuilder *builder,
if (IDE_IS_PROJECT_FILE (item))
{
+ submenu = gtk_application_get_menu_by_id (app, "gb-project-tree-move-to-trash");
+ g_menu_prepend_section (menu, NULL, G_MENU_MODEL (submenu));
+
submenu = gtk_application_get_menu_by_id (app, "gb-project-tree-rename");
g_menu_prepend_section (menu, NULL, G_MENU_MODEL (submenu));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]