summarylogtreecommitdiffstats
path: root/Added-key-binding-Del-to-terminate-and-Shift-Del-to-kill-task.patch
blob: c5abb2e74878c2ed64a166c0d03e78142d9b9089 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
From c8a03903c6a8519fcd6f84be73fccd1674e8289b Mon Sep 17 00:00:00 2001
From: Raimar <no@email.de>
Date: Sun, 8 Jun 2014 13:21:17 +0200
Subject: [PATCH] Added key binding Del to terminate and Shift+Del to kill task

---
 src/callbacks.c |  7 +++++--
 src/callbacks.h |  1 +
 src/interface.c | 23 +++++++++++++++++++----
 src/interface.h |  2 +-
 src/main.c      |  2 ++
 5 files changed, 28 insertions(+), 7 deletions(-)

diff --git a/src/callbacks.c b/src/callbacks.c
index ce27ca7..8716520 100644
--- a/src/callbacks.c
+++ b/src/callbacks.c
@@ -39,13 +39,16 @@ gboolean on_treeview1_button_press_event(GtkButton *button, GdkEventButton *even
     if(event->button == 3)
     {
         GdkEventButton *mouseevent = (GdkEventButton *)event;
-        if(taskpopup == NULL)
-            taskpopup = create_taskpopup ();
         gtk_menu_popup(GTK_MENU(taskpopup), NULL, NULL, NULL, NULL, mouseevent->button, mouseevent->time);
     }
     return FALSE;
 }
 
+gboolean on_treeview_popup_menu(GtkWidget* treeview, gpointer user_data) {
+    gtk_menu_popup(GTK_MENU(taskpopup), NULL, NULL, NULL, NULL, 0, gdk_event_get_time(NULL));
+    return TRUE;
+}
+
 void handle_task_menu(GtkWidget *widget, gchar *signal)
 {
     if(signal != NULL)
diff --git a/src/callbacks.h b/src/callbacks.h
index 323b569..192c1cf 100644
--- a/src/callbacks.h
+++ b/src/callbacks.h
@@ -36,6 +36,7 @@
 void on_button1_button_press_event(GtkButton *button, GdkEventButton *event);
 void on_button3_toggled_event(GtkButton *button, GdkEventButton *event);
 gboolean on_treeview1_button_press_event(GtkButton *button, GdkEventButton *event);
+gboolean on_treeview_popup_menu(GtkWidget* treeview, gpointer user_data);
 void handle_task_menu(GtkWidget *widget, gchar *signal);
 void handle_prio_menu(GtkWidget *widget, gchar *prio);
 void on_show_tasks_toggled (GtkMenuItem *menuitem, gint uid);
diff --git a/src/interface.c b/src/interface.c
index 1f98351..c6c09ad 100644
--- a/src/interface.c
+++ b/src/interface.c
@@ -38,6 +38,9 @@ extern guint refresh_interval;
 extern guint rID;
 GtkWidget *refresh_spin;
 
+// internal forward declarations
+void create_taskpopup(GtkAccelGroup* accel_group);
+
 GtkWidget* create_main_window (void)
 {
     GtkWidget *window;
@@ -106,6 +109,8 @@ GtkWidget* create_main_window (void)
 
 	gtk_widget_show_all( menubar );
 
+    create_taskpopup(accel_group);
+
 	/* window content */
     vbox1 = gtk_vbox_new (FALSE, 10);
     gtk_widget_show (vbox1);
@@ -151,6 +156,8 @@ GtkWidget* create_main_window (void)
     create_list_store();
 
     selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
+    // exactly one row is always selected
+    gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE);
 
     gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), GTK_TREE_MODEL(list_store));
 
@@ -171,6 +178,7 @@ GtkWidget* create_main_window (void)
 
     g_signal_connect ((gpointer) window, "destroy", G_CALLBACK (on_quit), NULL);
     g_signal_connect_swapped ((gpointer) treeview, "button-press-event", G_CALLBACK(on_treeview1_button_press_event), NULL);
+    g_signal_connect(treeview, "popup-menu", (GCallback) on_treeview_popup_menu, NULL);
     g_signal_connect ((gpointer) button1, "clicked",  G_CALLBACK (on_quit),  NULL);
     g_signal_connect ((gpointer) button3, "toggled",  G_CALLBACK (on_button3_toggled_event),  NULL);
 
@@ -246,9 +254,14 @@ void create_list_store(void)
     change_list_store_view();
 }
 
-GtkWidget* create_taskpopup (void)
+void select_first_row_of_list_store(void) {
+    GtkTreeIter iter;
+    gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter);
+    gtk_tree_selection_select_iter(selection, &iter);
+}
+
+void create_taskpopup(GtkAccelGroup* accel_group)
 {
-    GtkWidget *taskpopup;
     GtkWidget *menu_item;
 
     taskpopup = gtk_menu_new ();
@@ -264,11 +277,15 @@ GtkWidget* create_taskpopup (void)
     g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_task_menu), "CONT");
 
     menu_item = gtk_menu_item_new_with_mnemonic (_("Term"));
+    gtk_widget_add_accelerator(menu_item, "activate", accel_group,
+        GDK_KEY_Delete, (GdkModifierType)0, GTK_ACCEL_VISIBLE);
     gtk_widget_show (menu_item);
     gtk_container_add (GTK_CONTAINER (taskpopup), menu_item);
     g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_task_menu), "TERM");
 
     menu_item = gtk_menu_item_new_with_mnemonic (_("Kill"));
+    gtk_widget_add_accelerator(menu_item, "activate", accel_group,
+        GDK_KEY_Delete, (GdkModifierType) GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE);
     gtk_widget_show (menu_item);
     gtk_container_add (GTK_CONTAINER (taskpopup), menu_item);
     g_signal_connect ((gpointer) menu_item, "activate", G_CALLBACK (handle_task_menu), "KILL");
@@ -277,8 +294,6 @@ GtkWidget* create_taskpopup (void)
     gtk_menu_item_set_submenu((gpointer) menu_item, create_prio_submenu());
     gtk_widget_show (menu_item);
     gtk_container_add (GTK_CONTAINER (taskpopup), menu_item);
-
-    return taskpopup;
 }
 
 GtkWidget *create_prio_submenu(void)
diff --git a/src/interface.h b/src/interface.h
index ba67bf1..b997af0 100644
--- a/src/interface.h
+++ b/src/interface.h
@@ -65,9 +65,9 @@ GtkTreeViewColumn *column;
 
 void change_list_store_view(void);
 void create_list_store(void);
+void select_first_row_of_list_store(void);
 
 GtkWidget* create_main_window (void);
-GtkWidget* create_taskpopup (void);
 GtkWidget* create_mainmenu (void);
 GtkWidget *create_prio_submenu(void);
 
diff --git a/src/main.c b/src/main.c
index 0421387..d96dfa9 100644
--- a/src/main.c
+++ b/src/main.c
@@ -88,6 +88,8 @@ int main (int argc, char *argv[])
     if(!refresh_task_list())
         return 0;
 
+    select_first_row_of_list_store();
+
     rID = g_timeout_add_seconds(refresh_interval, (gpointer) refresh_task_list, NULL);
 
     gtk_main ();
-- 
2.0.0