From 58daa93aaa53e11dafced1e310c68a2ba38a774c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Steinbei=C3=9F?= Date: Thu, 19 Jan 2017 00:34:44 +0100 Subject: [PATCH] Add delete and shift/delete shortcuts to the treeview --- src/process-tree-view.c | 44 +++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/src/process-tree-view.c b/src/process-tree-view.c index 6ab63b3..eb7007d 100644 --- a/src/process-tree-view.c +++ b/src/process-tree-view.c @@ -557,25 +557,40 @@ treeview_key_pressed (XtmProcessTreeView *treeview, GdkEventKey *event) { guint pid; - if (event->keyval != GDK_KEY_Menu) + GtkTreeModel *model; + GtkTreeSelection *selection; + GtkTreeIter iter; + GdkModifierType modifiers; + + modifiers = gtk_accelerator_get_default_mod_mask (); + + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)); + + if (!gtk_tree_selection_get_selected (selection, &model, &iter)) return FALSE; + gtk_tree_model_get (model, &iter, XTM_PTV_COLUMN_PID, &pid, -1); + + if (event->keyval == GDK_KEY_Menu) { - GtkTreeModel *model; - GtkTreeSelection *selection; - GtkTreeIter iter; - - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)); - - if (!gtk_tree_selection_get_selected (selection, &model, &iter)) - return FALSE; - - gtk_tree_model_get (model, &iter, XTM_PTV_COLUMN_PID, &pid, -1); + popup_menu (treeview, pid, event->time, FALSE); + return TRUE; + } + else if (event->keyval == GDK_KEY_Delete) + { + /* Fake menuitem for the cb_send_signal callback */ + GtkWidget *mi; + mi = gtk_menu_item_new_with_label (_("Stop")); + g_object_set_data (G_OBJECT (mi), "pid", GUINT_TO_POINTER (pid)); + if ((event->state & modifiers) == GDK_SHIFT_MASK) + cb_send_signal (GTK_MENU_ITEM (mi), GINT_TO_POINTER (XTM_SIGNAL_KILL)); + else + cb_send_signal (GTK_MENU_ITEM (mi), GINT_TO_POINTER (XTM_SIGNAL_TERMINATE)); + return TRUE; } - popup_menu (treeview, pid, event->time, FALSE); - - return TRUE; + else + return FALSE; } static void @@ -754,4 +769,3 @@ xtm_process_tree_view_get_model (XtmProcessTreeView *treeview) { return GTK_TREE_MODEL (treeview->model); } -