Implement new function pid_is_sleeping()
The function pid_is_sleeping() is implement by the different OS implementations and returns TRUE or FALSE. It is used in the tree view context menu to show either the signal Stop or Continue.
This commit is contained in:
@@ -185,17 +185,20 @@ build_context_menu (guint pid)
|
|||||||
gtk_container_add (GTK_CONTAINER (menu), mi);
|
gtk_container_add (GTK_CONTAINER (menu), mi);
|
||||||
g_signal_connect (mi, "activate", G_CALLBACK (cb_send_signal), GINT_TO_POINTER (XTM_SIGNAL_TERMINATE));
|
g_signal_connect (mi, "activate", G_CALLBACK (cb_send_signal), GINT_TO_POINTER (XTM_SIGNAL_TERMINATE));
|
||||||
|
|
||||||
// TODO look up task for building menu with either Stop or Continue and in an OS-independent way
|
if (!pid_is_sleeping (pid))
|
||||||
// if (pid_is_sleeping (pid))
|
{
|
||||||
mi = gtk_menu_item_new_with_label (_("Stop"));
|
mi = gtk_menu_item_new_with_label (_("Stop"));
|
||||||
g_object_set_data (G_OBJECT (mi), "pid", GUINT_TO_POINTER (pid));
|
g_object_set_data (G_OBJECT (mi), "pid", GUINT_TO_POINTER (pid));
|
||||||
gtk_container_add (GTK_CONTAINER (menu), mi);
|
gtk_container_add (GTK_CONTAINER (menu), mi);
|
||||||
g_signal_connect (mi, "activate", G_CALLBACK (cb_send_signal), GINT_TO_POINTER (XTM_SIGNAL_STOP));
|
g_signal_connect (mi, "activate", G_CALLBACK (cb_send_signal), GINT_TO_POINTER (XTM_SIGNAL_STOP));
|
||||||
|
}
|
||||||
mi = gtk_menu_item_new_with_label (_("Continue"));
|
else
|
||||||
g_object_set_data (G_OBJECT (mi), "pid", GUINT_TO_POINTER (pid));
|
{
|
||||||
gtk_container_add (GTK_CONTAINER (menu), mi);
|
mi = gtk_menu_item_new_with_label (_("Continue"));
|
||||||
g_signal_connect (mi, "activate", G_CALLBACK (cb_send_signal), GINT_TO_POINTER (XTM_SIGNAL_CONTINUE));
|
g_object_set_data (G_OBJECT (mi), "pid", GUINT_TO_POINTER (pid));
|
||||||
|
gtk_container_add (GTK_CONTAINER (menu), mi);
|
||||||
|
g_signal_connect (mi, "activate", G_CALLBACK (cb_send_signal), GINT_TO_POINTER (XTM_SIGNAL_CONTINUE));
|
||||||
|
}
|
||||||
|
|
||||||
mi = gtk_menu_item_new_with_label (_("Kill"));
|
mi = gtk_menu_item_new_with_label (_("Kill"));
|
||||||
g_object_set_data (G_OBJECT (mi), "pid", GUINT_TO_POINTER (pid));
|
g_object_set_data (G_OBJECT (mi), "pid", GUINT_TO_POINTER (pid));
|
||||||
|
|||||||
@@ -310,7 +310,23 @@ get_task_list (GArray *task_list)
|
|||||||
gboolean
|
gboolean
|
||||||
pid_is_sleeping (guint pid)
|
pid_is_sleeping (guint pid)
|
||||||
{
|
{
|
||||||
return TRUE;
|
FILE *file;
|
||||||
|
gchar filename[96];
|
||||||
|
gchar buffer[1024];
|
||||||
|
gchar state[2];
|
||||||
|
|
||||||
|
snprintf (filename, 96, "/proc/%i/status", pid);
|
||||||
|
if ((file = fopen (filename, "r")) == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
while (fgets (buffer, 1024, file) != NULL)
|
||||||
|
{
|
||||||
|
if (sscanf (buffer, "State:\t%1s", state) > 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fclose (file);
|
||||||
|
|
||||||
|
return (state[0] == 'T') ? TRUE : FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
|
|||||||
Reference in New Issue
Block a user