*** empty log message ***
(Old svn revision: 535)
This commit is contained in:
130
src/functions.c
130
src/functions.c
@@ -37,7 +37,7 @@ void send_signal_to_task(gchar *task_id, gchar *signal)
|
||||
}
|
||||
}
|
||||
|
||||
void refresh_task_list()
|
||||
void refresh_task_list(gboolean first_time)
|
||||
{
|
||||
/* markes all tasks to "not checked" */
|
||||
gint i;
|
||||
@@ -73,13 +73,14 @@ void refresh_task_list()
|
||||
if(line_count == 0)
|
||||
strcpy(task.name,g_strstrip(g_strsplit(buffer, ":", 2)[1]));
|
||||
else if(line_count == 3)
|
||||
strcpy(task.pid,g_strstrip(g_strsplit(buffer, ":", 2)[1]));
|
||||
task.pid = atoi(g_strstrip(g_strsplit(buffer, ":", 2)[1]));
|
||||
else if(line_count == 5)
|
||||
strcpy(task.ppid,g_strstrip(g_strsplit(buffer, ":", 2)[1]));
|
||||
task.ppid = atoi(g_strstrip(g_strsplit(buffer, ":", 2)[1]));
|
||||
else if(line_count == 7)
|
||||
{
|
||||
passwdp = getpwuid(atoi(g_strsplit(g_strstrip(g_strsplit(buffer, ":", 2)[1]), "\t", 2)[0]));
|
||||
strcpy(task.uid, passwdp->pw_name);
|
||||
task.uid = atoi(g_strsplit(g_strstrip(g_strsplit(buffer, ":", 2)[1]), "\t", 2)[0]);
|
||||
passwdp = getpwuid(task.uid);
|
||||
strcpy(task.uname, passwdp->pw_name);
|
||||
}
|
||||
|
||||
line_count++;
|
||||
@@ -93,7 +94,7 @@ void refresh_task_list()
|
||||
|
||||
for(i = 0; i < task_count; i++)
|
||||
{
|
||||
if(strcmp(all_tasks[i].pid,task.pid) == 0)
|
||||
if(all_tasks[i].pid == task.pid)
|
||||
{
|
||||
all_tasks[i].checked = TRUE;
|
||||
new_task = FALSE;
|
||||
@@ -105,13 +106,17 @@ void refresh_task_list()
|
||||
task.checked = TRUE;
|
||||
all_tasks[task_count] = task;
|
||||
task_count++;
|
||||
add_new_list_item(task);
|
||||
|
||||
if(!first_time)
|
||||
add_tree_item(task);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir(dir);
|
||||
|
||||
if(!first_time)
|
||||
{
|
||||
/* removing all tasks which are not marked */
|
||||
i = 0;
|
||||
|
||||
@@ -119,13 +124,15 @@ void refresh_task_list()
|
||||
{
|
||||
if(!all_tasks[i].checked)
|
||||
{
|
||||
remove_list_item(all_tasks[i]);
|
||||
remove_tree_item(all_tasks[i]);
|
||||
remove_task_from_array(i);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* removes a task from the taskarray */
|
||||
void remove_task_from_array(gint count)
|
||||
{
|
||||
gint i;
|
||||
@@ -136,3 +143,110 @@ void remove_task_from_array(gint count)
|
||||
}
|
||||
task_count--;
|
||||
}
|
||||
|
||||
/* checks if there is a parent task (ppid) */
|
||||
struct task *get_parent_task(struct task task)
|
||||
{
|
||||
gint i;
|
||||
|
||||
for(i = 0; i < task_count; i++)
|
||||
{
|
||||
if(task.ppid == all_tasks[i].pid && all_tasks[i].pid != task.pid)
|
||||
return(&all_tasks[i]);
|
||||
}
|
||||
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
void show_user_tasks(void)
|
||||
{
|
||||
gint i;
|
||||
gint user_id = getuid();
|
||||
|
||||
for(i = 0; i < task_count; i++)
|
||||
{
|
||||
if(all_tasks[i].uid == user_id)
|
||||
add_tree_item(all_tasks[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void hide_user_tasks(void)
|
||||
{
|
||||
gint i;
|
||||
gint user_id = getuid();
|
||||
|
||||
for(i = 0; i < task_count; i++)
|
||||
{
|
||||
if(all_tasks[i].uid == user_id)
|
||||
remove_tree_item(all_tasks[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void show_root_tasks(void)
|
||||
{
|
||||
gint i;
|
||||
|
||||
for(i = 0; i < task_count; i++)
|
||||
{
|
||||
if(all_tasks[i].uid == 0)
|
||||
add_tree_item(all_tasks[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void hide_root_tasks(void)
|
||||
{
|
||||
gint i;
|
||||
|
||||
for(i = 0; i < task_count; i++)
|
||||
{
|
||||
if(all_tasks[i].uid == 0)
|
||||
remove_tree_item(all_tasks[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void show_other_tasks(void)
|
||||
{
|
||||
gint i;
|
||||
gint user_id = getuid();
|
||||
|
||||
for(i = 0; i < task_count; i++)
|
||||
{
|
||||
if(all_tasks[i].uid != user_id && all_tasks[i].uid != 0)
|
||||
add_tree_item(all_tasks[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void hide_other_tasks(void)
|
||||
{
|
||||
gint i;
|
||||
gint user_id = getuid();
|
||||
|
||||
for(i = 0; i < task_count; i++)
|
||||
{
|
||||
if(all_tasks[i].uid != user_id && all_tasks[i].uid != 0)
|
||||
remove_tree_item(all_tasks[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void load_config(void)
|
||||
{
|
||||
gchar * homedir;
|
||||
|
||||
homedir = xfce_resource_save_location(XFCE_RESOURCE_CONFIG, "xfce4", FALSE);
|
||||
XfceRc *config_obj = xfce_rc_simple_open(g_build_filename(homedir, "taskmanager.rc", NULL), TRUE);
|
||||
g_free(homedir);
|
||||
|
||||
if(config_obj == NULL)
|
||||
{
|
||||
config_show_user_tasks = TRUE;
|
||||
config_show_root_tasks = FALSE;
|
||||
config_show_other_tasks = FALSE;
|
||||
printf("Could not open configfile\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
config_show_user_tasks = xfce_rc_read_bool_entry(config_obj, "show_user_tasks", TRUE);
|
||||
config_show_root_tasks = xfce_rc_read_bool_entry(config_obj, "show_root_tasks", FALSE);
|
||||
config_show_other_tasks = xfce_rc_read_bool_entry(config_obj, "show_other_tasks", FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,13 +23,29 @@
|
||||
#include <pwd.h>
|
||||
#include <sys/types.h>
|
||||
#include <stdio.h>
|
||||
#include <libxfce4util/libxfce4util.h>
|
||||
#include <libgtop-2.0/glibtop.h>
|
||||
#include <libgtop-2.0/glibtop/proctime.h>
|
||||
|
||||
#include "types.h"
|
||||
|
||||
/* config vars */
|
||||
gboolean config_show_user_tasks;
|
||||
gboolean config_show_root_tasks;
|
||||
gboolean config_show_other_tasks;
|
||||
|
||||
struct task all_tasks[512];
|
||||
|
||||
struct task task_list;
|
||||
|
||||
void refresh_task_list(void);
|
||||
void refresh_task_list(gboolean first_time);
|
||||
void send_signal_to_task(gchar *task_id, gchar *signal);
|
||||
void remove_task_from_array(gint count);
|
||||
struct task *get_parent_task(struct task task);
|
||||
void show_user_tasks(void);
|
||||
void hide_user_tasks(void);
|
||||
void show_root_tasks(void);
|
||||
void hide_root_tasks(void);
|
||||
void show_other_tasks(void);
|
||||
void hide_other_tasks(void);
|
||||
void load_config(void);
|
||||
|
||||
208
src/gui.c
208
src/gui.c
@@ -59,14 +59,15 @@ void create_gui(void)
|
||||
gtk_widget_show(scrolled_window);
|
||||
|
||||
tree_view = gtk_tree_view_new();
|
||||
|
||||
g_signal_connect_swapped(G_OBJECT(tree_view), "button-press-event", G_CALLBACK(handle_mouse_events), G_OBJECT(task_popup_menu));
|
||||
gtk_container_add(GTK_CONTAINER(scrolled_window), GTK_WIDGET(tree_view));
|
||||
gtk_widget_show(tree_view);
|
||||
|
||||
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
|
||||
|
||||
list_store = gtk_list_store_new(4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(tree_view), GTK_TREE_MODEL(list_store));
|
||||
tree_store = gtk_tree_store_new(4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
|
||||
gtk_tree_view_set_model(GTK_TREE_VIEW(tree_view), GTK_TREE_MODEL(tree_store));
|
||||
|
||||
cell_renderer = gtk_cell_renderer_text_new();
|
||||
|
||||
@@ -83,10 +84,17 @@ void create_gui(void)
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column);
|
||||
|
||||
/* load the tasklist */
|
||||
refresh_task_list();
|
||||
refresh_task_list(TRUE);
|
||||
if(config_show_root_tasks)
|
||||
show_root_tasks();
|
||||
if(config_show_user_tasks)
|
||||
show_user_tasks();
|
||||
if(config_show_other_tasks)
|
||||
show_other_tasks();
|
||||
|
||||
/* Quit-button */
|
||||
button = gtk_button_new_from_stock(GTK_STOCK_QUIT);
|
||||
g_signal_connect_swapped(G_OBJECT(button), "button-press-event", G_CALLBACK(handle_mouse_events), G_OBJECT(main_popup_menu));
|
||||
g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_main_quit), NULL);
|
||||
gtk_box_pack_start(GTK_BOX(box), button, FALSE, TRUE, 0);
|
||||
gtk_widget_show(button);
|
||||
@@ -94,55 +102,122 @@ void create_gui(void)
|
||||
gtk_widget_show(window);
|
||||
}
|
||||
|
||||
|
||||
GtkTreeIter get_iter_by_task(struct task *task)
|
||||
{
|
||||
gboolean valid;
|
||||
GtkTreeIter iter;
|
||||
GtkTreeIter parent_iter;
|
||||
parent_iter.stamp = -1;
|
||||
gint count = 0;
|
||||
|
||||
valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(tree_store), &iter);
|
||||
|
||||
while(valid)
|
||||
{
|
||||
gchar *str_data;
|
||||
gtk_tree_model_get(GTK_TREE_MODEL(tree_store), &iter, 1, &str_data, -1);
|
||||
|
||||
if(task->ppid == atoi(str_data))
|
||||
{
|
||||
g_free(str_data);
|
||||
return(iter);
|
||||
}
|
||||
g_free(str_data);
|
||||
|
||||
if(gtk_tree_model_iter_has_child(GTK_TREE_MODEL(tree_store), &iter))
|
||||
{
|
||||
parent_iter = *gtk_tree_iter_copy(&iter);
|
||||
valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(tree_store), &iter, &parent_iter);
|
||||
}
|
||||
else
|
||||
{
|
||||
valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(tree_store), &iter);
|
||||
while(!valid)
|
||||
{
|
||||
if(parent_iter.stamp != -1)
|
||||
{
|
||||
iter = *gtk_tree_iter_copy(&parent_iter);
|
||||
|
||||
if(!gtk_tree_model_iter_parent(GTK_TREE_MODEL(tree_store), &parent_iter, &iter))
|
||||
parent_iter.stamp = -1;
|
||||
|
||||
valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(tree_store), &iter);
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
iter.stamp = -1;
|
||||
return(iter);
|
||||
}
|
||||
|
||||
/* add new tasks to the list */
|
||||
gboolean add_new_list_item(struct task task)
|
||||
gboolean add_tree_item(struct task task)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
|
||||
/* check if there is a parent task */
|
||||
struct task *parent_task = get_parent_task(task);
|
||||
|
||||
/* Append new line in the list */
|
||||
gtk_list_store_append(GTK_LIST_STORE(list_store), &iter);
|
||||
if(parent_task == NULL)
|
||||
{
|
||||
gtk_tree_store_append(GTK_TREE_STORE(tree_store), &iter, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
GtkTreeIter parent_iter = get_iter_by_task(&task);
|
||||
|
||||
if(parent_iter.stamp == -1)
|
||||
gtk_tree_store_append(GTK_TREE_STORE(tree_store), &iter, NULL);
|
||||
else
|
||||
gtk_tree_store_append(GTK_TREE_STORE(tree_store), &iter, &parent_iter);
|
||||
}
|
||||
|
||||
/* Fill the appended line with data */
|
||||
gchar *list_value_1 = g_strdup_printf("%s", task.uid);
|
||||
gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, list_value_1, -1);
|
||||
gchar *list_value_1 = g_strdup_printf("%s", task.uname);
|
||||
gtk_tree_store_set(GTK_TREE_STORE(tree_store), &iter, 0, list_value_1, -1);
|
||||
g_free(list_value_1);
|
||||
|
||||
gchar *list_value_2 = g_strdup_printf("%s", task.pid);
|
||||
gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 1, list_value_2, -1);
|
||||
gchar *list_value_2 = g_strdup_printf("%i", task.pid);
|
||||
gtk_tree_store_set(GTK_TREE_STORE(tree_store), &iter, 1, list_value_2, -1);
|
||||
g_free(list_value_2);
|
||||
|
||||
gchar *list_value_3 = g_strdup_printf("%s", task.ppid);
|
||||
gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 2, list_value_3, -1);
|
||||
gchar *list_value_3 = g_strdup_printf("%i", task.ppid);
|
||||
gtk_tree_store_set(GTK_TREE_STORE(tree_store), &iter, 2, list_value_3, -1);
|
||||
g_free(list_value_3);
|
||||
|
||||
gchar *list_value_4 = g_strdup_printf("%s", task.name);
|
||||
gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 3, list_value_4, -1);
|
||||
gtk_tree_store_set(GTK_TREE_STORE(tree_store), &iter, 3, list_value_4, -1);
|
||||
g_free(list_value_4);
|
||||
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
void remove_list_item(struct task task)
|
||||
void remove_tree_item(struct task task)
|
||||
{
|
||||
gboolean valid;
|
||||
GtkTreeIter iter;
|
||||
|
||||
valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter);
|
||||
valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(tree_store), &iter);
|
||||
|
||||
while(valid)
|
||||
{
|
||||
gchar *str_data;
|
||||
gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, 1, &str_data, -1);
|
||||
gtk_tree_model_get(GTK_TREE_MODEL(tree_store), &iter, 1, &str_data, -1);
|
||||
|
||||
if(strcmp(task.pid,str_data) == 0)
|
||||
if(task.pid == atoi(str_data))
|
||||
{
|
||||
gtk_list_store_remove(GTK_LIST_STORE(list_store), &iter);
|
||||
gtk_tree_store_remove(GTK_TREE_STORE(tree_store), &iter);
|
||||
g_free(str_data);
|
||||
break;
|
||||
}
|
||||
g_free(str_data);
|
||||
|
||||
valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter);
|
||||
valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(tree_store), &iter);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -190,6 +265,31 @@ GtkWidget *create_main_popup_menu()
|
||||
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
|
||||
gtk_widget_show(menuitem);
|
||||
|
||||
menuitem = gtk_check_menu_item_new_with_label("Show user tasks");
|
||||
if(config_show_user_tasks)
|
||||
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE);
|
||||
g_signal_connect(G_OBJECT(menuitem), "toggled", G_CALLBACK(handle_toggled_checkbox), "show_user_task");
|
||||
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
|
||||
gtk_widget_show(menuitem);
|
||||
|
||||
menuitem = gtk_check_menu_item_new_with_label("Show root tasks");
|
||||
if(config_show_root_tasks)
|
||||
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE);
|
||||
g_signal_connect(G_OBJECT(menuitem), "toggled", G_CALLBACK(handle_toggled_checkbox), "show_root_task");
|
||||
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
|
||||
gtk_widget_show(menuitem);
|
||||
|
||||
menuitem = gtk_check_menu_item_new_with_label("Show other tasks");
|
||||
if(config_show_other_tasks)
|
||||
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE);
|
||||
g_signal_connect(G_OBJECT(menuitem), "toggled", G_CALLBACK(handle_toggled_checkbox), "show_other_task");
|
||||
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
|
||||
gtk_widget_show(menuitem);
|
||||
|
||||
menuitem = gtk_separator_menu_item_new();
|
||||
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
|
||||
gtk_widget_show(menuitem);
|
||||
|
||||
menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, NULL);
|
||||
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_main_quit), NULL);
|
||||
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
|
||||
@@ -211,52 +311,78 @@ gboolean handle_mouse_events(GtkWidget *widget, GdkEventButton *event)
|
||||
|
||||
void handle_task_menu(GtkWidget *widget, gchar *signal)
|
||||
{
|
||||
if(signal != NULL)
|
||||
gchar *task_id = "";
|
||||
GtkTreeModel *model;
|
||||
GtkTreeIter iter;
|
||||
|
||||
if(signal != NULL && gtk_tree_selection_get_selected(selection, &model, &iter))
|
||||
{
|
||||
if(strcmp(signal, "TERM") == 0)
|
||||
{
|
||||
if(xfce_confirm("Really TERM the Task?", GTK_STOCK_YES, NULL))
|
||||
{
|
||||
gchar *task_id = "";
|
||||
GtkTreeModel *model;
|
||||
GtkTreeIter iter;
|
||||
|
||||
if(gtk_tree_selection_get_selected(selection, &model, &iter))
|
||||
{
|
||||
gtk_tree_model_get(model, &iter, 1, &task_id, -1);
|
||||
send_signal_to_task(task_id, signal);
|
||||
refresh_task_list();
|
||||
}
|
||||
refresh_task_list(FALSE);
|
||||
}
|
||||
}
|
||||
else if(strcmp(signal, "KILL") == 0)
|
||||
{
|
||||
if(xfce_confirm("Really KILL the Task?", GTK_STOCK_YES, NULL))
|
||||
{
|
||||
gchar *task_id = "";
|
||||
GtkTreeModel *model;
|
||||
GtkTreeIter iter;
|
||||
|
||||
if(gtk_tree_selection_get_selected(selection, &model, &iter))
|
||||
{
|
||||
gtk_tree_model_get(model, &iter, 1, &task_id, -1);
|
||||
send_signal_to_task(task_id, signal);
|
||||
refresh_task_list();
|
||||
}
|
||||
refresh_task_list(FALSE);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gchar *task_id = "";
|
||||
GtkTreeModel *model;
|
||||
GtkTreeIter iter;
|
||||
|
||||
if(gtk_tree_selection_get_selected(selection, &model, &iter))
|
||||
{
|
||||
gtk_tree_model_get(model, &iter, 1, &task_id, -1);
|
||||
send_signal_to_task(task_id, signal);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void handle_toggled_checkbox(GtkCheckMenuItem *widget, gchar *checkbox_id)
|
||||
{
|
||||
if(strcmp(checkbox_id, "show_user_task") == 0)
|
||||
{
|
||||
if(widget->active)
|
||||
{
|
||||
config_show_user_tasks = TRUE;
|
||||
show_user_tasks();
|
||||
}
|
||||
else
|
||||
{
|
||||
config_show_user_tasks = FALSE;
|
||||
hide_user_tasks();
|
||||
}
|
||||
}
|
||||
else if(strcmp(checkbox_id, "show_root_task") == 0)
|
||||
{
|
||||
if(widget->active)
|
||||
{
|
||||
config_show_root_tasks = TRUE;
|
||||
show_root_tasks();
|
||||
}
|
||||
else
|
||||
{
|
||||
config_show_root_tasks = FALSE;
|
||||
hide_root_tasks();
|
||||
}
|
||||
}
|
||||
else if(strcmp(checkbox_id, "show_other_task") == 0)
|
||||
{
|
||||
if(widget->active)
|
||||
{
|
||||
config_show_other_tasks = TRUE;
|
||||
show_other_tasks();
|
||||
}
|
||||
else
|
||||
{
|
||||
config_show_other_tasks = FALSE;
|
||||
hide_other_tasks();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -26,13 +26,14 @@
|
||||
|
||||
GtkWidget *window;
|
||||
GtkTreeSelection *selection;
|
||||
GtkListStore *list_store;
|
||||
GtkTreeStore *tree_store;
|
||||
|
||||
void gui_create(void);
|
||||
gboolean add_new_list_item(struct task task);
|
||||
void remove_list_item(struct task task);
|
||||
gboolean add_tree_item(struct task task);
|
||||
void remove_tree_item(struct task task);
|
||||
GtkWidget *create_task_popup_menu(void);
|
||||
GtkWidget *create_main_popup_menu(void);
|
||||
gboolean handle_mouse_events(GtkWidget *widget, GdkEventButton *event);
|
||||
void handle_task_menu(GtkWidget *widget, gchar *signal);
|
||||
void handle_toggled_checkbox(GtkCheckMenuItem *widget, gchar *signal);
|
||||
void show_about_dialog(void);
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
/* handler for SIGALRM to refresh the list */
|
||||
void refresh_handler(void)
|
||||
{
|
||||
refresh_task_list();
|
||||
refresh_task_list(FALSE);
|
||||
alarm(REFRESH_INTERVAL);
|
||||
}
|
||||
|
||||
@@ -42,6 +42,7 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
gtk_init(&argc, &argv);
|
||||
|
||||
load_config();
|
||||
create_gui();
|
||||
|
||||
signal(SIGALRM, refresh_handler);
|
||||
|
||||
Reference in New Issue
Block a user