rem: snprintf(screen.statusbar.msgstr, MAX_ERRMSGLEN,
add: snprintf(screen.statusbar.diststr, MAX_DISTLEN,
context: zoom_outline(GtkWidget *widget, GdkEventButton *event){    int x1, y1, x2, y2, dx, dy;	/* Zoom outline (UR and LL corners) */    double us_x1, us_y1, us_x2, us_y2;    int half_w, half_h;		/* cache for half window dimensions */    gchar *designator;    GList *tmp_list, *tmp_path;    GtkTreeIter iter;    double mid_x, mid_y, length, width;        half_w = screen.drawing_area->allocation.width / 2;    half_h = screen.drawing_area->allocation.height / 2;    x1 = MIN(screen.start_x, event->x);    y1 = MIN(screen.start_y, event->y);    x2 = MAX(screen.start_x, event->x);    y2 = MAX(screen.start_y, event->y);    dx = x2-x1;    dy = y2-y1;    if (dx < 4 && dy < 4) {//	GERB_MESSAGE("Warning: Zoom area too small, bailing out!\n");//we should modify statusbar for a nice display of the part         tmp_list = gtk_tree_selection_get_selected_rows                                            (GTK_TREE_SELECTION(interface.selection),                                             (GtkTreeModel **)&interface.model);//item must be in the active selection list     if (tmp_list != NULL) {                                                 tmp_path  = g_list_first(tmp_list);        do {           gtk_tree_model_get_iter         (GTK_TREE_MODEL(interface.model),                                         &iter,                                         tmp_path->data);        gtk_tree_model_get              (GTK_TREE_MODEL(interface.model),                                         &iter,                                         COLUMN_DESIGNATOR, &designator, COLUMN_mid_x, &mid_x, COLUMN_mid_y, &mid_y, COLUMN_width, &width, COLUMN_length, &length,  -1);                                              if (((event->x <= mid_x + width*3) || (event->x >= mid_x - width*3)) && ((event->y <= mid_y + length*3) || (event->y >= mid_y - length*3))) {                //pointer must be in range                                  if ( ! g_utf8_validate(designator, -1, NULL)) {                    //memset  (designator, 0, sizeof(designator));                    gchar * str = g_convert(designator, strlen(designator), "UTF-8", "ISO-8859-1",                                NULL, NULL, NULL);                    // I have not decided yet whether it is better to use always                    // "ISO-8859-1" or current locale.                    // str = g_locale_to_utf8(row[10], -1, NULL, NULL, NULL);                    sprintf (designator, "%.*s", sizeof(designator)-1, str);                    g_free(str);                }                     snprintf(screen.statusbar.msgstr, MAX_ERRMSGLEN,		             "Part: %s", designator);                GERB_MESSAGE("The part you have selected is: %s\n", designator);            }                                                      } while ((tmp_path = g_list_next(tmp_list)) != NULL);	}	update_statusbar(&screen);	goto zoom_outline_end;    }    if (screen.centered_outline_zoom) {	/* Centered outline mode */	x1 = screen.start_x - dx;	y1 = screen.start_y - dy;	dx *= 2;	dy *= 2;    }    us_x1 = (screen.trans_x + x1)/(double) screen.transf->scale;    us_y1 = (screen.trans_y + y1)/(double) screen.transf->scale;    us_x2 = (screen.trans_x + x2)/(double) screen.transf->scale;    us_y2 = (screen.trans_y + y2)/(double) screen.transf->scale;    screen.transf->scale = MIN(screen.drawing_area->allocation.width/(double)(us_x2 - us_x1),		       screen.drawing_area->allocation.height/(double)(us_y2 - us_y1));    screen.trans_x = screen.transf->scale * (us_x1 + (us_x2 - us_x1)/2) - half_w;    screen.trans_y = screen.transf->scale * (us_y1 + (us_y2 - us_y1)/2) - half_h;;    screen.clip_bbox.x1 = -screen.trans_x/(double)screen.transf->scale;    screen.clip_bbox.y1 = -screen.trans_y/(double)screen.transf->scale;zoom_outline_end:    /* Redraw screen */    redraw_pixmap(screen.drawing_area, TRUE);} /* zoom_outline */