diff -Naur loadapplet-aw2/load-plugin.c loadapplet-aw3/load-plugin.c --- loadapplet-aw2/load-plugin.c 2006-02-25 08:26:38.000000000 +0100 +++ loadapplet-aw3/load-plugin.c 2006-02-25 08:53:08.395429000 +0100 @@ -66,6 +66,7 @@ #define CPUFILE "/proc/stat" #define MEMFILE "/proc/meminfo" +#define SWAPFILE "/proc/swaps" #define DEV_MAX_MEMORY 65535 #define MEMORY_LEVEL_LOW 59000 @@ -91,6 +92,7 @@ GtkWidget *menu_separator; GtkWidget *menu_screenshot; GtkWidget *menu_delayed_screenshot; + GtkWidget *menu_swap; GtkWidget *menu_settings; gboolean in_area; gboolean on_border; @@ -109,6 +111,11 @@ int width, height; #define MAX_READ_CHARS 128 char read_buffer[MAX_READ_CHARS]; +char dummy[MAX_READ_CHARS]; +#define MAX_SWAPNAME 64 +char activeswapname[MAX_SWAPNAME]; +gint swapused=0; +char label[64+MAX_SWAPNAME]; #define MAX_SSHOT_NAME_LEN 64 #define SSHOT_DEFAULT_NAME "screenshot" gchar *sshotfilename = NULL; @@ -135,6 +142,25 @@ +static gboolean +swapisactive(void) +{ /* side-effect: update global var swapused, if swap is active */ + FILE *fin; + + fin = fopen(SWAPFILE, "r"); + if (fin == NULL) g_error("Can't open "SWAPFILE"\n"); + if (! fgets(read_buffer, MAX_READ_CHARS, fin)) /* skip 1st line */ + return FALSE; + while (fgets(read_buffer, MAX_READ_CHARS, fin)) { + if (read_buffer) { + sscanf(read_buffer, "%s %s %s %d", activeswapname, dummy, dummy, &swapused); + if (strncmp(activeswapname, swapname, MAX_SWAPNAME) == 0) + return TRUE; + } + } + return FALSE; +} + static void close_window() { gtk_menu_popdown(GTK_MENU(info->menu)); @@ -302,6 +328,16 @@ } static void +activate_swap_item(GtkMenuItem *item, gpointer data) +{ + if (swapisactive()) + sprintf(label, "/usr/bin/sudo /sbin/swapoff %s", swapname); + else + sprintf(label, "/usr/bin/sudo /sbin/swapon %s", swapname); + system(label); +} + +static void activate_screenshot_item(GtkMenuItem *item, gpointer data) { make_screenshot(); @@ -453,7 +489,15 @@ static void load_icon_pressed(GtkWidget *widget, gpointer data) { - if (!GTK_IS_MENU(info->menu)) + if (GTK_IS_MENU(info->menu)) { /* is this a memory leak??? */ + gtk_widget_destroy(info->menu_screenshot); + gtk_widget_destroy(info->menu_delayed_screenshot); + gtk_widget_destroy(info->menu_separator); + gtk_widget_destroy(info->menu_swap); + gtk_widget_destroy(info->menu_settings); + gtk_widget_destroy(info->menu); + } + if (1 == 1) { info->menu = gtk_menu_new(); @@ -466,7 +510,7 @@ G_CALLBACK(activate_screenshot_item), data); /* And delayed screenshot */ - info->menu_delayed_screenshot = gtk_menu_item_new_with_label("Take delayed screenshot"); + info->menu_delayed_screenshot = gtk_menu_item_new_with_label("Take a delayed screenshot"); gtk_menu_shell_append(GTK_MENU_SHELL(info->menu), info->menu_delayed_screenshot); g_signal_connect(G_OBJECT(info->menu_delayed_screenshot), @@ -477,6 +521,19 @@ info->menu_separator = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(info->menu), info->menu_separator); + /* Swap */ + if (swapisactive()) + sprintf(label, "swapoff %s (%d MB used)", swapname, (swapused+512)/1024); + else + sprintf(label, "swapon %s", swapname); + + info->menu_swap = gtk_menu_item_new_with_label(label); + gtk_menu_shell_append(GTK_MENU_SHELL(info->menu), + info->menu_swap); + g_signal_connect(G_OBJECT(info->menu_swap), + "activate", + G_CALLBACK(activate_swap_item), + data); /* Settings */ info->menu_settings = gtk_menu_item_new_with_label("Settings"); gtk_menu_shell_append(GTK_MENU_SHELL(info->menu),