diff options
author | Stig Bjørlykke <stig@bjorlykke.org> | 2007-12-12 09:31:02 +0000 |
---|---|---|
committer | Stig Bjørlykke <stig@bjorlykke.org> | 2007-12-12 09:31:02 +0000 |
commit | 74c6f15a0301e31929330c4770d7619098c20ee7 (patch) | |
tree | c42691ab247176a613b6897999666dc7d172bac3 /gtk/io_stat.c | |
parent | 5998d1dbd2b815eedfdb8957bf13d3a943a921d6 (diff) |
Do not use calc_field unless in advanced y axis (bug 1763).
Register new tap listener (new filter) when going from advanced y axis.
Add parantheses to the filters to ensure they are correct when concatenated.
svn path=/trunk/; revision=23844
Diffstat (limited to 'gtk/io_stat.c')
-rw-r--r-- | gtk/io_stat.c | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/gtk/io_stat.c b/gtk/io_stat.c index 0561a58204..5af0a61387 100644 --- a/gtk/io_stat.c +++ b/gtk/io_stat.c @@ -171,6 +171,7 @@ GdkColormap *colormap; static void init_io_stat_window(io_stat_t *io); +static gint filter_callback(GtkWidget *widget _U_, io_stat_graph_t *gio); static void io_stat_set_title(io_stat_t *io) @@ -949,7 +950,7 @@ gtk_iostat_draw(void *g) static GString * enable_graph(io_stat_graph_t *gio, const char *filter, const char *field) { - char real_filter[260]; + char real_filter[262]; gio->display=TRUE; @@ -968,8 +969,8 @@ enable_graph(io_stat_graph_t *gio, const char *filter, const char *field) break; } if(*filter){ - strncpy(real_filter, filter, 255); - real_filter[255]=0; + g_snprintf(real_filter, 257, "(%s)", filter); + real_filter[257]=0; } } if(field){ @@ -989,8 +990,8 @@ enable_graph(io_stat_graph_t *gio, const char *filter, const char *field) if(real_filter[0]!=0){ strcat(real_filter, " && "); } - strncat(real_filter, field, 259-strlen(real_filter)); - real_filter[259]=0; + strncat(real_filter, field, 261-strlen(real_filter)); + real_filter[261]=0; } } return register_tap_listener("frame", gio, real_filter[0]?real_filter:NULL, @@ -1369,7 +1370,8 @@ create_yscale_max_menu_items(io_stat_t *io, GtkWidget *menu) static void count_type_select(GtkWidget *item, gpointer key) { - int val; + static gboolean advanced_visible=FALSE; + int val, i; io_stat_t *io; io=(io_stat_t *)key; @@ -1378,7 +1380,6 @@ count_type_select(GtkWidget *item, gpointer key) io->count_type=val; if(io->count_type==COUNT_TYPE_ADVANCED){ - int i; for(i=0;i<MAX_GRAPHS;i++){ disable_graph(&io->graphs[i]); gtk_widget_show(io->graphs[i].advanced_buttons); @@ -1391,14 +1392,17 @@ update_rect.height=io->window->allocation.height; gtk_widget_draw(io->window, &update_rect); } } - } else { - int i; + advanced_visible=TRUE; + io_stat_redraw(io); + } else if (advanced_visible) { for(i=0;i<MAX_GRAPHS;i++){ gtk_widget_hide(io->graphs[i].advanced_buttons); + filter_callback(item, &io->graphs[i]); } + advanced_visible=FALSE; + } else { + io_stat_redraw(io); } - - io_stat_redraw(io); } static void @@ -1487,12 +1491,10 @@ static gint filter_callback(GtkWidget *widget _U_, io_stat_graph_t *gio) { const char *filter; - const char *field; + const char *field=NULL; header_field_info *hfi; dfilter_t *dfilter; - field=gtk_entry_get_text(GTK_ENTRY(gio->calc_field)); - /* this graph is not active, just update display and redraw */ if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gio->display_button))){ disable_graph(gio); @@ -1502,6 +1504,8 @@ filter_callback(GtkWidget *widget _U_, io_stat_graph_t *gio) /* first check if the field string is valid */ if(gio->io->count_type==COUNT_TYPE_ADVANCED){ + field=gtk_entry_get_text(GTK_ENTRY(gio->calc_field)); + /* warn and bail out if there was no field specified */ if(field==NULL || field[0]==0){ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "You didn't specify a field name."); |