diff -dru xfce-3.8.18/xfce/taskbar.c xfce-3.8.18.fjo/xfce/taskbar.c --- xfce-3.8.18/xfce/taskbar.c Thu Sep 26 11:22:22 2002 +++ xfce-3.8.18.fjo/xfce/taskbar.c Wed Dec 11 22:40:00 2002 @@ -102,7 +102,7 @@ GtkWidget *gtk_realtaskbar; GtkWidget *gtk_labels[TASKBAR_MIN_CELL_NO]; GtkToggleButton *gtk_toggled_button; - GtkWidget *gtk_proc_load_indicator; + GtkWidget *gtk_proc_load_indicator, *gtk_proc_disk_indicator; int gtk_pressed; int base_height; int base_width; @@ -773,11 +773,11 @@ gint taskbar_set_proc_load(gpointer data) { - char stats_in[256]; + static char stats_in[2560]; char *s; FILE *stats_f; - int user,sys,nice,idle; - static int o_user,o_sys,o_nice,o_idle; + int user, sys,nice, idle, io = 0; + static int o_user, o_sys, o_nice, o_idle, o_io, o_io2; float over; int busy,total; float r,g,b; @@ -791,16 +791,37 @@ return TRUE; } while (fgets(stats_in,sizeof(stats_in),stats_f)!=NULL) { - if ((s=strstr(stats_in,"cpu"))!=NULL) { - s=s+strlen("cpu"); + if ((s = strstr(stats_in, "cpu ")) != NULL) { + s = s + strlen("cpu "); sscanf(s,"%d %d %d %d",&user,&sys,&nice,&idle); busy=(user-o_user)+(sys-o_sys)+(nice-o_nice); total=busy+(idle-o_idle); over=(float)busy/(float)total; - HSVtoRGB(&r,&g,&b,0.0,over,1.0); + r = over; + b = 1.0 - over; + g = 0.0; gtk_set_bg_color(g_xfce_taskbar.gtk_proc_load_indicator,GTK_STATE_NORMAL,(((int)(r*0xff))<<16)|(((int)(g*0xff))<<8)|(((int)(b*0xff))<<0)); o_user=user; o_sys=sys; o_nice=nice; o_idle=idle; - break; + } + else if ((s = strstr(stats_in, "disk_io: (")) != NULL) { + s = s + strlen("disk_io: ("); + while ((s = strstr(s, "):(")) != NULL) { + s = s + strlen("):("); + sscanf(s,"%d,", &user); + io += user; + } + total = io - o_io2; + busy = io - o_io; + if (total) { + over = (float) busy / (float) total; + if (over > 1.0) over = 1.0; + } + else over = 0.0; + r = over; + b = 1.0 - over; + g = 0.0; + gtk_set_bg_color(g_xfce_taskbar.gtk_proc_disk_indicator, GTK_STATE_NORMAL, (((int) (r * 0xff)) << 16) | (((int) (g * 0xff)) << 8) | (((int) (b * 0xff)) << 0)); + o_io2 = o_io; o_io = io; } } fclose(stats_f); @@ -834,6 +855,7 @@ g_xfce_taskbar.gtk_proc_load_indicator=tb_button_close; + g_xfce_taskbar.gtk_proc_disk_indicator = (GtkWidget*) gtk_object_get_data(GTK_OBJECT(tb_panel), "tb_button_taskjar"); gtk_widget_show_all(tb_hbox1); gtk_widget_show(tb_hrule);