New information menu to select the columns to display; minor clean up

(Old svn revision: 4806)
This commit is contained in:
Mike Massonnet
2008-05-16 07:05:20 +00:00
parent d68dcf5f6f
commit 1a2783b6a0
8 changed files with 133 additions and 58 deletions

View File

@@ -22,16 +22,23 @@
#include "callbacks.h" #include "callbacks.h"
#include "menu-positions.h" #include "menu-positions.h"
void on_button1_activate(GtkButton *button) void on_preferences(GtkButton *button)
{ {
if(mainmenu == NULL) if(mainmenu == NULL)
mainmenu = create_mainmenu(); mainmenu = create_mainmenu();
gtk_menu_popup(GTK_MENU(mainmenu), NULL, NULL, (GtkMenuPositionFunc)position_mainmenu, button, 0, gtk_get_current_event_time()); gtk_menu_popup(GTK_MENU(mainmenu), NULL, NULL, (GtkMenuPositionFunc)position_menu_cover_widget, button, 0, gtk_get_current_event_time());
} }
void on_button3_toggled_event(GtkButton *button, GdkEventButton *event) void on_information(GtkButton *button)
{ {
full_view = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)); if(infomenu == NULL)
infomenu = create_infomenu();
gtk_menu_popup(GTK_MENU(infomenu), NULL, NULL, (GtkMenuPositionFunc)position_menu_cover_widget, button, 0, gtk_get_current_event_time());
}
void on_show_info_toggled(GtkCheckMenuItem *menuitem, gint column_id)
{
show_col[column_id] = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem));
change_list_store_view(); change_list_store_view();
} }

View File

@@ -34,8 +34,9 @@
#include "xfce-taskmanager-linux.h" #include "xfce-taskmanager-linux.h"
void on_button1_activate(GtkButton *button); void on_preferences(GtkButton *button);
void on_button3_toggled_event(GtkButton *button, GdkEventButton *event); void on_information(GtkButton *button);
void on_show_info_toggled(GtkCheckMenuItem *menuitem, gint uid);
gboolean on_treeview1_button_press_event(GtkButton *button, GdkEventButton *event); gboolean on_treeview1_button_press_event(GtkButton *button, GdkEventButton *event);
void on_info1_activate (GtkMenuItem *menuitem, gpointer user_data); void on_info1_activate (GtkMenuItem *menuitem, gpointer user_data);
void handle_task_menu(GtkWidget *widget, gchar *signal); void handle_task_menu(GtkWidget *widget, gchar *signal);

View File

@@ -201,11 +201,20 @@ void load_config(void)
sort_column = xfce_rc_read_int_entry(rc_file, "sort_column", COLUMN_PID); sort_column = xfce_rc_read_int_entry(rc_file, "sort_column", COLUMN_PID);
sort_type = xfce_rc_read_int_entry(rc_file, "sort_type", GTK_SORT_ASCENDING); sort_type = xfce_rc_read_int_entry(rc_file, "sort_type", GTK_SORT_ASCENDING);
full_view = xfce_rc_read_bool_entry(rc_file, "full_view", FALSE);
win_width = xfce_rc_read_int_entry(rc_file, "win_width", 500); win_width = xfce_rc_read_int_entry(rc_file, "win_width", 500);
win_height = xfce_rc_read_int_entry(rc_file, "win_height", 400); win_height = xfce_rc_read_int_entry(rc_file, "win_height", 400);
xfce_rc_set_group (rc_file, "Information");
show_col[COLUMN_PID] = xfce_rc_read_bool_entry(rc_file, "show_col_pid", TRUE);
show_col[COLUMN_PPID] = xfce_rc_read_bool_entry(rc_file, "show_col_ppid", FALSE);
show_col[COLUMN_STATE] = xfce_rc_read_bool_entry(rc_file, "show_col_state", FALSE);
show_col[COLUMN_MEM] = xfce_rc_read_bool_entry(rc_file, "show_col_mem", FALSE);
show_col[COLUMN_RSS] = xfce_rc_read_bool_entry(rc_file, "show_col_rss", TRUE);
show_col[COLUMN_UNAME] = xfce_rc_read_bool_entry(rc_file, "show_col_uname", FALSE);
show_col[COLUMN_TIME] = xfce_rc_read_bool_entry(rc_file, "show_col_time", TRUE);
show_col[COLUMN_PRIO] = xfce_rc_read_bool_entry(rc_file, "show_col_prio", TRUE);
xfce_rc_close(rc_file); xfce_rc_close(rc_file);
} }
@@ -224,13 +233,22 @@ void save_config(void)
xfce_rc_write_int_entry(rc_file, "sort_column", sort_column); xfce_rc_write_int_entry(rc_file, "sort_column", sort_column);
xfce_rc_write_int_entry(rc_file, "sort_type", sort_type); xfce_rc_write_int_entry(rc_file, "sort_type", sort_type);
xfce_rc_write_bool_entry(rc_file, "full_view", full_view);
gtk_window_get_size(GTK_WINDOW (main_window), (gint *) &win_width, (gint *) &win_height); gtk_window_get_size(GTK_WINDOW (main_window), (gint *) &win_width, (gint *) &win_height);
xfce_rc_write_int_entry(rc_file, "win_width", win_width); xfce_rc_write_int_entry(rc_file, "win_width", win_width);
xfce_rc_write_int_entry(rc_file, "win_height", win_height); xfce_rc_write_int_entry(rc_file, "win_height", win_height);
xfce_rc_set_group (rc_file, "Information");
xfce_rc_write_bool_entry(rc_file, "show_col_pid", show_col[COLUMN_PID]);
xfce_rc_write_bool_entry(rc_file, "show_col_ppid", show_col[COLUMN_PPID]);
xfce_rc_write_bool_entry(rc_file, "show_col_state", show_col[COLUMN_STATE]);
xfce_rc_write_bool_entry(rc_file, "show_col_mem", show_col[COLUMN_MEM]);
xfce_rc_write_bool_entry(rc_file, "show_col_rss", show_col[COLUMN_RSS]);
xfce_rc_write_bool_entry(rc_file, "show_col_uname", show_col[COLUMN_UNAME]);
xfce_rc_write_bool_entry(rc_file, "show_col_time", show_col[COLUMN_TIME]);
xfce_rc_write_bool_entry(rc_file, "show_col_prio", show_col[COLUMN_PRIO]);
xfce_rc_flush(rc_file); xfce_rc_flush(rc_file);
xfce_rc_close(rc_file); xfce_rc_close(rc_file);

View File

@@ -33,9 +33,9 @@ GtkWidget* create_main_window (void)
GtkWidget *vbox1; GtkWidget *vbox1;
GtkWidget *bbox1; GtkWidget *bbox1;
GtkWidget *scrolledwindow1; GtkWidget *scrolledwindow1;
GtkWidget *button1; GtkWidget *button_preferences;
GtkWidget *button2; GtkWidget *button_information;
GtkWidget *button3; GtkWidget *button_quit;
GtkWidget *system_info_box; GtkWidget *system_info_box;
@@ -79,6 +79,7 @@ GtkWidget* create_main_window (void)
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_SHADOW_IN); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_SHADOW_IN);
treeview = gtk_tree_view_new (); treeview = gtk_tree_view_new ();
gtk_tree_view_set_show_expanders (GTK_TREE_VIEW (treeview), FALSE);
gtk_widget_show (treeview); gtk_widget_show (treeview);
gtk_container_add (GTK_CONTAINER (scrolledwindow1), treeview); gtk_container_add (GTK_CONTAINER (scrolledwindow1), treeview);
@@ -94,27 +95,25 @@ GtkWidget* create_main_window (void)
gtk_box_pack_start(GTK_BOX(vbox1), bbox1, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox1), bbox1, FALSE, TRUE, 0);
gtk_widget_show (bbox1); gtk_widget_show (bbox1);
button2 = gtk_button_new_from_stock ("gtk-preferences"); button_preferences = gtk_button_new_from_stock ("gtk-preferences");
gtk_button_set_focus_on_click (GTK_BUTTON (button2), FALSE); gtk_button_set_focus_on_click (GTK_BUTTON (button_preferences), FALSE);
gtk_widget_show (button2); gtk_widget_show (button_preferences);
gtk_box_pack_start (GTK_BOX (bbox1), button2, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (bbox1), button_preferences, FALSE, FALSE, 0);
button3 = gtk_toggle_button_new_with_label ("gtk-info"); button_information = gtk_button_new_from_stock ("gtk-info");
gtk_button_set_focus_on_click (GTK_BUTTON (button3), FALSE); gtk_button_set_focus_on_click (GTK_BUTTON (button_information), FALSE);
gtk_button_set_use_stock (GTK_BUTTON(button3), TRUE); gtk_widget_show (button_information);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button3), full_view); gtk_box_pack_start (GTK_BOX (bbox1), button_information, FALSE, FALSE, 0);
gtk_widget_show (button3);
gtk_box_pack_start (GTK_BOX (bbox1), button3, FALSE, FALSE, 0);
button1 = gtk_button_new_from_stock ("gtk-quit"); button_quit = gtk_button_new_from_stock ("gtk-quit");
gtk_widget_show (button1); gtk_widget_show (button_quit);
gtk_box_pack_start (GTK_BOX (bbox1), button1, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (bbox1), button_quit, FALSE, FALSE, 0);
g_signal_connect ((gpointer) window, "delete-event", G_CALLBACK (on_quit), NULL); g_signal_connect_swapped (treeview, "button-press-event", G_CALLBACK(on_treeview1_button_press_event), NULL);
g_signal_connect_swapped ((gpointer) treeview, "button-press-event", G_CALLBACK(on_treeview1_button_press_event), NULL); g_signal_connect (button_preferences, "clicked", G_CALLBACK (on_preferences), NULL);
g_signal_connect ((gpointer) button1, "clicked", G_CALLBACK (on_quit), NULL); g_signal_connect (button_information, "clicked", G_CALLBACK (on_information), NULL);
g_signal_connect ((gpointer) button2, "clicked", G_CALLBACK (on_button1_activate), NULL); g_signal_connect (button_quit, "clicked", G_CALLBACK (on_quit), NULL);
g_signal_connect ((gpointer) button3, "toggled", G_CALLBACK (on_button3_toggled_event), NULL); g_signal_connect (window, "delete-event", G_CALLBACK (on_quit), NULL);
return window; return window;
} }
@@ -322,6 +321,50 @@ GtkWidget* create_mainmenu (void)
return mainmenu; return mainmenu;
} }
GtkWidget* create_infomenu (void)
{
GtkWidget *infomenu;
GtkWidget *title;
GtkWidget *separator;
GtkWidget *col_items[N_COLUMNS] = { 0 };
gint i;
infomenu = gtk_menu_new ();
title = gtk_image_menu_item_new_from_stock("gtk-info", NULL);
gtk_widget_show(title);
gtk_menu_shell_append(GTK_MENU_SHELL(infomenu), title);
gtk_widget_set_sensitive(title, FALSE);
separator = gtk_separator_menu_item_new();
gtk_widget_show(separator);
gtk_menu_shell_append(GTK_MENU_SHELL(infomenu), separator);
gtk_widget_set_sensitive(separator, FALSE);
col_items[COLUMN_PID] = gtk_check_menu_item_new_with_label (_("PID"));
col_items[COLUMN_PPID] = gtk_check_menu_item_new_with_label (_("PPID"));
col_items[COLUMN_STATE] = gtk_check_menu_item_new_with_label (_("State"));
col_items[COLUMN_MEM] = gtk_check_menu_item_new_with_label (_("VM-Size"));
col_items[COLUMN_RSS] = gtk_check_menu_item_new_with_label (_("RSS"));
col_items[COLUMN_UNAME] = gtk_check_menu_item_new_with_label (_("User"));
col_items[COLUMN_TIME] = gtk_check_menu_item_new_with_label (_("CPU%"));
col_items[COLUMN_PRIO] = gtk_check_menu_item_new_with_label (_("Priority"));
for (i = 0; i < N_COLUMNS; i++)
{
if (GTK_IS_WIDGET (col_items[i]))
{
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (col_items[i]), show_col[i]);
gtk_widget_show(col_items[i]);
gtk_menu_shell_append(GTK_MENU_SHELL(infomenu), col_items[i]);
g_signal_connect (col_items[i], "toggled",
G_CALLBACK (on_show_info_toggled), GINT_TO_POINTER(i));
}
}
return infomenu;
}
void show_about_dialog(void) void show_about_dialog(void)
{ {
GtkWidget *about_dialog; GtkWidget *about_dialog;
@@ -361,12 +404,14 @@ void show_about_dialog(void)
void change_list_store_view(void) void change_list_store_view(void)
{ {
gtk_tree_view_column_set_visible gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), COLUMN_PID), show_col[COLUMN_PID]);
(gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), COLUMN_PPID), full_view); gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), COLUMN_PPID), show_col[COLUMN_PPID]);
gtk_tree_view_column_set_visible gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), COLUMN_STATE), show_col[COLUMN_STATE]);
(gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), COLUMN_STATE), full_view); gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), COLUMN_MEM), show_col[COLUMN_MEM]);
gtk_tree_view_column_set_visible gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), COLUMN_RSS), show_col[COLUMN_RSS]);
(gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), COLUMN_MEM), full_view); gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), COLUMN_UNAME), show_col[COLUMN_UNAME]);
gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), COLUMN_TIME), show_col[COLUMN_TIME]);
gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), COLUMN_PRIO), show_col[COLUMN_PRIO]);
} }
void fill_list_item(gint i, GtkTreeIter *iter) void fill_list_item(gint i, GtkTreeIter *iter)

View File

@@ -44,6 +44,7 @@ GtkTreeStore *list_store;
GtkTreeSelection *selection; GtkTreeSelection *selection;
GtkWidget *treeview; GtkWidget *treeview;
GtkWidget *mainmenu; GtkWidget *mainmenu;
GtkWidget *infomenu;
GtkTooltips *tooltips; GtkTooltips *tooltips;
GtkWidget *taskpopup; GtkWidget *taskpopup;
GtkWidget *priopopup; GtkWidget *priopopup;
@@ -52,16 +53,6 @@ GtkWidget *mem_usage_progress_bar;
GtkWidget *cpu_usage_progress_bar_box; GtkWidget *cpu_usage_progress_bar_box;
GtkWidget *mem_usage_progress_bar_box; GtkWidget *mem_usage_progress_bar_box;
#define COLUMN_NAME 0
#define COLUMN_PID 1
#define COLUMN_PPID 2
#define COLUMN_STATE 3
#define COLUMN_MEM 4
#define COLUMN_RSS 5
#define COLUMN_UNAME 6
#define COLUMN_TIME 7
#define COLUMN_PRIO 8
GtkTreeViewColumn *column; GtkTreeViewColumn *column;
void change_list_store_view(void); void change_list_store_view(void);
@@ -70,7 +61,8 @@ void create_list_store(void);
GtkWidget* create_main_window (void); GtkWidget* create_main_window (void);
GtkWidget* create_taskpopup (void); GtkWidget* create_taskpopup (void);
GtkWidget* create_mainmenu (void); GtkWidget* create_mainmenu (void);
GtkWidget *create_prio_submenu(void); GtkWidget* create_infomenu (void);
GtkWidget* create_prio_submenu(void);
void show_about_dialog(void); void show_about_dialog(void);

View File

@@ -1,5 +1,5 @@
/* /*
* xfce4-taskmanager - very simple taskmanger * xfce4-taskmanager - very simple taskmanager
* *
* Copyright (c) 2008 Mike Massonnet <mmassonnet@xfce.org> * Copyright (c) 2008 Mike Massonnet <mmassonnet@xfce.org>
* *
@@ -20,20 +20,18 @@
#include "menu-positions.h" #include "menu-positions.h"
void position_mainmenu(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer user_data) void position_menu_cover_widget(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, GtkWidget *widget)
{ {
GtkWidget *widget;
GtkRequisition requisition; GtkRequisition requisition;
widget = user_data;
gtk_widget_size_request(GTK_WIDGET(menu), &requisition);
gdk_window_get_origin(widget->window, x, y); gdk_window_get_origin(widget->window, x, y);
*x += widget->allocation.x; *x += widget->allocation.x;
*y += widget->allocation.y; *y += widget->allocation.y;
if(*y + requisition.height > gdk_screen_height ()) gtk_widget_size_request(GTK_WIDGET(menu), &requisition);
*y = gdk_screen_height () - requisition.height; if(*y + requisition.height > gdk_screen_height())
*y = gdk_screen_height() - requisition.height;
else if(*y < 0) else if(*y < 0)
*y = 0; *y = 0;
} }

View File

@@ -30,6 +30,6 @@
#include "functions.h" #include "functions.h"
#include "interface.h" #include "interface.h"
void position_mainmenu(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer user_data); void position_menu_cover_widget(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, GtkWidget *widget);
#endif #endif

View File

@@ -76,7 +76,21 @@ gboolean show_cached_as_free; /* Show memory used Cache as free memory */
guint sort_column; guint sort_column;
guint sort_type; guint sort_type;
gboolean full_view; enum
{
COLUMN_NAME = 0,
COLUMN_PID,
COLUMN_PPID,
COLUMN_STATE,
COLUMN_MEM,
COLUMN_RSS,
COLUMN_UNAME,
COLUMN_TIME,
COLUMN_PRIO,
N_COLUMNS,
};
gboolean show_col[N_COLUMNS];
guint win_width; guint win_width;
guint win_height; guint win_height;