X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fgtksheet%2Fgtksheet.c;h=942b0233117b4641a61b9dadccbec4fed9f51866;hb=5ee84736663824fe12474b78dace867e42893a14;hp=d4a2cbf4b9c823d0ff396675544dd3c8edb54408;hpb=8c8b8240083e9a74ea473d8e097a308b27e4a773;p=pspp-builds.git diff --git a/lib/gtksheet/gtksheet.c b/lib/gtksheet/gtksheet.c index d4a2cbf4..942b0233 100644 --- a/lib/gtksheet/gtksheet.c +++ b/lib/gtksheet/gtksheet.c @@ -96,15 +96,10 @@ enum #define CELL_SPACING 1 #define DRAG_WIDTH 6 #define TIMEOUT_HOVER 300 -#define TIME_INTERVAL 8 #define COLUMN_MIN_WIDTH 10 -#define MINROWS 1 -#define MINCOLS 1 -#define MAXLENGTH 30 #define CELLOFFSET 4 #define DEFAULT_COLUMN_WIDTH 80 - static void gtk_sheet_update_primary_selection (GtkSheet *sheet); static void gtk_sheet_column_title_button_draw (GtkSheet *sheet, gint column); @@ -202,7 +197,7 @@ yyy_row_is_visible (const GtkSheet *sheet, gint row) { GSheetRow *row_geo = sheet->row_geometry; - return g_sheet_row_get_visibility (row_geo, row, 0); + return g_sheet_row_get_visibility (row_geo, row); } @@ -211,7 +206,7 @@ yyy_row_is_sensitive (const GtkSheet *sheet, gint row) { GSheetRow *row_geo = sheet->row_geometry; - return g_sheet_row_get_sensitivity (row_geo, row, 0); + return g_sheet_row_get_sensitivity (row_geo, row); } @@ -221,7 +216,7 @@ yyy_row_count (const GtkSheet *sheet) { GSheetRow *row_geo = sheet->row_geometry; - return g_sheet_row_get_row_count (row_geo, 0); + return g_sheet_row_get_row_count (row_geo); } static inline gint @@ -229,7 +224,7 @@ yyy_row_height (const GtkSheet *sheet, gint row) { GSheetRow *row_geo = sheet->row_geometry; - return g_sheet_row_get_height (row_geo, row, 0); + return g_sheet_row_get_height (row_geo, row); } static gint @@ -237,7 +232,7 @@ yyy_row_top_ypixel (const GtkSheet *sheet, gint row) { GSheetRow *geo = sheet->row_geometry; - gint y = g_sheet_row_start_pixel (geo, row, 0); + gint y = g_sheet_row_start_pixel (geo, row); if ( sheet->column_titles_visible ) y += sheet->column_title_area.height; @@ -259,7 +254,7 @@ yyy_row_ypixel_to_row (const GtkSheet *sheet, gint y) if (y < cy) return 0; - return g_sheet_row_pixel_to_row (geo, y - cy, 0); + return g_sheet_row_pixel_to_row (geo, y - cy); } @@ -434,7 +429,7 @@ yyy_row_button (GtkSheet *sheet, gint row) { GSheetRow *row_geo = sheet->row_geometry; - return g_sheet_row_get_button (row_geo, row, sheet); + return g_sheet_row_get_button (row_geo, row); } @@ -444,7 +439,7 @@ static inline void yyy_set_row_height (GtkSheet *sheet, gint row, gint height) { if ( sheet->row_geometry ) - g_sheet_row_set_height (sheet->row_geometry, row, height, sheet); + g_sheet_row_set_height (sheet->row_geometry, row, height); } @@ -1313,11 +1308,13 @@ gtk_sheet_init (GtkSheet *sheet) sheet->bg_gc = NULL; sheet->x_drag = 0; sheet->y_drag = 0; - gdk_color_parse ("white", &sheet->bg_color); - gdk_color_alloc (gdk_colormap_get_system (), &sheet->bg_color); + gdk_colormap_alloc_color (gdk_colormap_get_system (), &sheet->bg_color, FALSE, + TRUE); gdk_color_parse ("gray", &sheet->grid_color); - gdk_color_alloc (gdk_colormap_get_system (), &sheet->grid_color); + gdk_colormap_alloc_color (gdk_colormap_get_system (), &sheet->grid_color, FALSE, + TRUE); + sheet->show_grid = TRUE; sheet->motion_timer = 0; @@ -1615,7 +1612,7 @@ gtk_sheet_set_background (GtkSheet *sheet, GdkColor *color) if (!color) { gdk_color_parse ("white", &sheet->bg_color); - gdk_color_alloc (gdk_colormap_get_system (), &sheet->bg_color); + gdk_colormap_alloc_color (gdk_colormap_get_system (), &sheet->bg_color, FALSE, TRUE); } else sheet->bg_color = *color; @@ -1633,7 +1630,7 @@ gtk_sheet_set_grid (GtkSheet *sheet, GdkColor *color) if (!color) { gdk_color_parse ("black", &sheet->grid_color); - gdk_color_alloc (gdk_colormap_get_system (), &sheet->grid_color); + gdk_colormap_alloc_color (gdk_colormap_get_system (), &sheet->grid_color, FALSE, TRUE); } else sheet->grid_color = *color; @@ -2443,7 +2440,10 @@ gtk_sheet_dispose (GObject *object) if (sheet->column_geometry) g_object_unref (sheet->column_geometry); g_object_unref (sheet->entry_container); + sheet->entry_container = NULL; + g_object_unref (sheet->button); + sheet->button = NULL; /* unref adjustments */ if (sheet->hadjustment) @@ -2598,24 +2598,21 @@ gtk_sheet_realize (GtkWidget * widget) /* GCs */ if (sheet->fg_gc) - gdk_gc_unref (sheet->fg_gc); + g_object_unref (sheet->fg_gc); if (sheet->bg_gc) - gdk_gc_unref (sheet->bg_gc); + g_object_unref (sheet->bg_gc); sheet->fg_gc = gdk_gc_new (widget->window); sheet->bg_gc = gdk_gc_new (widget->window); colormap = gtk_widget_get_colormap (widget); - gdk_color_white (colormap, &widget->style->white); - gdk_color_black (colormap, &widget->style->black); - gdk_gc_get_values (sheet->fg_gc, &auxvalues); values.foreground = widget->style->white; values.function = GDK_INVERT; values.subwindow_mode = GDK_INCLUDE_INFERIORS; if (sheet->xor_gc) - gdk_gc_unref (sheet->xor_gc); + g_object_unref (sheet->xor_gc); sheet->xor_gc = gdk_gc_new_with_values (widget->window, &values, GDK_GC_FOREGROUND | @@ -2629,8 +2626,9 @@ gtk_sheet_realize (GtkWidget * widget) gtk_widget_set_parent_window (sheet->button, sheet->sheet_window); gtk_widget_set_parent (sheet->button, GTK_WIDGET (sheet)); - if (!sheet->cursor_drag) - sheet->cursor_drag = gdk_cursor_new (GDK_PLUS); + + gdk_cursor_unref (sheet->cursor_drag); + sheet->cursor_drag = gdk_cursor_new (GDK_PLUS); if (sheet->column_titles_visible) gdk_window_show (sheet->column_title_window); @@ -2704,11 +2702,11 @@ gtk_sheet_unrealize (GtkWidget * widget) sheet = GTK_SHEET (widget); - gdk_cursor_destroy (sheet->cursor_drag); + gdk_cursor_unref (sheet->cursor_drag); - gdk_gc_destroy (sheet->xor_gc); - gdk_gc_destroy (sheet->fg_gc); - gdk_gc_destroy (sheet->bg_gc); + g_object_unref (sheet->xor_gc); + g_object_unref (sheet->fg_gc); + g_object_unref (sheet->bg_gc); gdk_window_destroy (sheet->sheet_window); gdk_window_destroy (sheet->column_title_window); @@ -2722,13 +2720,13 @@ gtk_sheet_unrealize (GtkWidget * widget) sheet->column_title_window = NULL; sheet->sheet_window = NULL; - sheet->cursor_drag = NULL; sheet->xor_gc = NULL; sheet->fg_gc = NULL; sheet->bg_gc = NULL; gtk_widget_unparent (sheet->entry_widget); - gtk_widget_unparent (sheet->button); + if (sheet->button != NULL) + gtk_widget_unparent (sheet->button); if (GTK_WIDGET_CLASS (parent_class)->unrealize) (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget); @@ -2748,10 +2746,7 @@ gtk_sheet_map (GtkWidget * widget) { GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED); - if (!sheet->cursor_drag) sheet->cursor_drag = gdk_cursor_new (GDK_PLUS); - gdk_window_show (widget->window); - gdk_window_show (sheet->sheet_window); if (sheet->column_titles_visible) @@ -3081,7 +3076,7 @@ gtk_sheet_cell_draw_label (GtkSheet *sheet, gint row, gint col) gdk_gc_set_clip_rectangle (fg_gc, NULL); g_object_unref (layout); - gdk_draw_pixmap (sheet->sheet_window, + gdk_draw_drawable (sheet->sheet_window, GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], sheet->pixmap, area.x, @@ -3148,7 +3143,7 @@ gtk_sheet_range_draw (GtkSheet *sheet, const GtkSheetRange *range) sheet->sheet_window_width - area.x, sheet->sheet_window_height); - gdk_draw_pixmap (sheet->sheet_window, + gdk_draw_drawable (sheet->sheet_window, GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], sheet->pixmap, area.x, @@ -3175,7 +3170,7 @@ gtk_sheet_range_draw (GtkSheet *sheet, const GtkSheetRange *range) sheet->sheet_window_width, sheet->sheet_window_height - area.y); - gdk_draw_pixmap (sheet->sheet_window, + gdk_draw_drawable (sheet->sheet_window, GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], sheet->pixmap, area.x, @@ -3321,7 +3316,7 @@ gtk_sheet_draw_backing_pixmap (GtkSheet *sheet, GtkSheetRange range) if (range.rowi == yyy_row_count (sheet) - 1) height = sheet->sheet_window_height - y; - gdk_draw_pixmap (sheet->sheet_window, + gdk_draw_drawable (sheet->sheet_window, GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], sheet->pixmap, x, @@ -3802,7 +3797,7 @@ gtk_sheet_hide_active_cell (GtkSheet *sheet) gtk_widget_unmap (sheet->entry_widget); if (row != -1 && col != -1) - gdk_draw_pixmap (sheet->sheet_window, + gdk_draw_drawable (sheet->sheet_window, GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], sheet->pixmap, COLUMN_LEFT_XPIXEL (sheet, col)- 1, @@ -3970,8 +3965,8 @@ gtk_sheet_make_backing_pixmap (GtkSheet *sheet, guint width, guint height) else { /* reallocate if sizes don't match */ - gdk_window_get_size (sheet->pixmap, - &pixmap_width, &pixmap_height); + gdk_drawable_get_size (sheet->pixmap, + &pixmap_width, &pixmap_height); if ( (pixmap_width != width) || (pixmap_height != height)) { g_object_unref (sheet->pixmap); @@ -4060,7 +4055,7 @@ gtk_sheet_new_selection (GtkSheet *sheet, GtkSheetRange *range) } if (j == sheet->range.coli) width = width + 3; - gdk_draw_pixmap (sheet->sheet_window, + gdk_draw_drawable (sheet->sheet_window, GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], sheet->pixmap, x + 1, @@ -4134,7 +4129,7 @@ gtk_sheet_new_selection (GtkSheet *sheet, GtkSheetRange *range) } if (j == sheet->range.coli) width = width + 3; - gdk_draw_pixmap (sheet->sheet_window, + gdk_draw_drawable (sheet->sheet_window, GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], sheet->pixmap, x + 1, @@ -4323,7 +4318,7 @@ gtk_sheet_draw_corners (GtkSheet *sheet, GtkSheetRange range) { x = COLUMN_LEFT_XPIXEL (sheet, range.col0); y = ROW_TOP_YPIXEL (sheet, range.row0); - gdk_draw_pixmap (sheet->sheet_window, + gdk_draw_drawable (sheet->sheet_window, GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], sheet->pixmap, x - 1, @@ -4351,7 +4346,7 @@ gtk_sheet_draw_corners (GtkSheet *sheet, GtkSheetRange range) y = ROW_TOP_YPIXEL (sheet, MIN_VISIBLE_ROW (sheet))+3; width = 3; } - gdk_draw_pixmap (sheet->sheet_window, + gdk_draw_drawable (sheet->sheet_window, GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], sheet->pixmap, x - width, @@ -4379,7 +4374,7 @@ gtk_sheet_draw_corners (GtkSheet *sheet, GtkSheetRange range) x = COLUMN_LEFT_XPIXEL (sheet, MIN_VISIBLE_COLUMN (sheet))+3; width = 3; } - gdk_draw_pixmap (sheet->sheet_window, + gdk_draw_drawable (sheet->sheet_window, GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], sheet->pixmap, x - width, @@ -4404,7 +4399,7 @@ gtk_sheet_draw_corners (GtkSheet *sheet, GtkSheetRange range) width = 1; if (sheet->state == GTK_SHEET_RANGE_SELECTED) width = 3; if (sheet->state == GTK_SHEET_NORMAL) width = 3; - gdk_draw_pixmap (sheet->sheet_window, + gdk_draw_drawable (sheet->sheet_window, GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], sheet->pixmap, x - width, @@ -5236,7 +5231,7 @@ gtk_sheet_motion (GtkWidget * widget, new_cursor = GDK_SB_H_DOUBLE_ARROW; if (new_cursor != sheet->cursor_drag->type) { - gdk_cursor_destroy (sheet->cursor_drag); + gdk_cursor_unref (sheet->cursor_drag); sheet->cursor_drag = gdk_cursor_new (GDK_SB_H_DOUBLE_ARROW); gdk_window_set_cursor (sheet->column_title_window, sheet->cursor_drag); @@ -5248,7 +5243,7 @@ gtk_sheet_motion (GtkWidget * widget, if (!GTK_SHEET_IN_XDRAG (sheet) && new_cursor != sheet->cursor_drag->type) { - gdk_cursor_destroy (sheet->cursor_drag); + gdk_cursor_unref (sheet->cursor_drag); sheet->cursor_drag = gdk_cursor_new (GDK_TOP_LEFT_ARROW); gdk_window_set_cursor (sheet->column_title_window, sheet->cursor_drag); @@ -5265,7 +5260,7 @@ gtk_sheet_motion (GtkWidget * widget, new_cursor = GDK_SB_V_DOUBLE_ARROW; if (new_cursor != sheet->cursor_drag->type) { - gdk_cursor_destroy (sheet->cursor_drag); + gdk_cursor_unref (sheet->cursor_drag); sheet->cursor_drag = gdk_cursor_new (GDK_SB_V_DOUBLE_ARROW); gdk_window_set_cursor (sheet->row_title_window, sheet->cursor_drag); } @@ -5276,7 +5271,7 @@ gtk_sheet_motion (GtkWidget * widget, if (!GTK_SHEET_IN_YDRAG (sheet) && new_cursor != sheet->cursor_drag->type) { - gdk_cursor_destroy (sheet->cursor_drag); + gdk_cursor_unref (sheet->cursor_drag); sheet->cursor_drag = gdk_cursor_new (GDK_TOP_LEFT_ARROW); gdk_window_set_cursor (sheet->row_title_window, sheet->cursor_drag); } @@ -5291,7 +5286,7 @@ gtk_sheet_motion (GtkWidget * widget, !GTK_SHEET_IN_RESIZE (sheet) && new_cursor != sheet->cursor_drag->type) { - gdk_cursor_destroy (sheet->cursor_drag); + gdk_cursor_unref (sheet->cursor_drag); sheet->cursor_drag = gdk_cursor_new (GDK_PLUS); gdk_window_set_cursor (sheet->sheet_window, sheet->cursor_drag); } @@ -5302,7 +5297,7 @@ gtk_sheet_motion (GtkWidget * widget, new_cursor != sheet->cursor_drag->type) { - gdk_cursor_destroy (sheet->cursor_drag); + gdk_cursor_unref (sheet->cursor_drag); sheet->cursor_drag = gdk_cursor_new (GDK_TOP_LEFT_ARROW); gdk_window_set_cursor (sheet->sheet_window, sheet->cursor_drag); } @@ -5315,7 +5310,7 @@ gtk_sheet_motion (GtkWidget * widget, GTK_SHEET_IN_RESIZE (sheet)) && new_cursor != sheet->cursor_drag->type) { - gdk_cursor_destroy (sheet->cursor_drag); + gdk_cursor_unref (sheet->cursor_drag); sheet->cursor_drag = gdk_cursor_new (GDK_SIZING); gdk_window_set_cursor (sheet->sheet_window, sheet->cursor_drag); } @@ -5569,7 +5564,7 @@ gtk_sheet_extend_selection (GtkSheet *sheet, gint row, gint column) sheet->range.row0 = r; sheet->range.coli = c; sheet->range.rowi = r; - gdk_draw_pixmap (sheet->sheet_window, + gdk_draw_drawable (sheet->sheet_window, GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], sheet->pixmap, COLUMN_LEFT_XPIXEL (sheet, c)- 1, @@ -6347,7 +6342,6 @@ gtk_sheet_get_entry (GtkSheet *sheet) if (GTK_IS_ENTRY (sheet->entry_container)) return (sheet->entry_container); - //parent = GTK_WIDGET (sheet->entry_widget); parent = sheet->entry_container; if (GTK_IS_TABLE (parent)) children = GTK_TABLE (parent)->children; @@ -6698,9 +6692,9 @@ vadjustment_value_changed (GtkAdjustment * adjustment, old_value = - sheet->voffset; new_row = g_sheet_row_pixel_to_row (sheet->row_geometry, - adjustment->value, sheet); + adjustment->value); - y = g_sheet_row_start_pixel (sheet->row_geometry, new_row, sheet); + y = g_sheet_row_start_pixel (sheet->row_geometry, new_row); if (adjustment->value > sheet->old_vadjustment && sheet->old_vadjustment > 0. && yyy_row_height (sheet, row) > sheet->vadjustment->step_increment) @@ -7156,7 +7150,6 @@ init_attributes (const GtkSheet *sheet, gint col, GtkSheetCellAttr *attributes) { GdkColormap *colormap; colormap = gdk_colormap_get_system (); - gdk_color_black (colormap, &attributes->foreground); attributes->background = sheet->bg_color; } attributes->justification = xxx_column_justification (sheet, col); @@ -7850,7 +7843,7 @@ gtk_sheet_button_new (void) } -inline void +void gtk_sheet_button_free (GtkSheetButton *button) { if (!button) return ; @@ -7860,10 +7853,21 @@ gtk_sheet_button_free (GtkSheetButton *button) } +static void +append_cell_text (GString *string, const GtkSheet *sheet, gint r, gint c) +{ + gchar *celltext = gtk_sheet_cell_get_text (sheet, r, c); + + if ( NULL == celltext) + return; + + g_string_append (string, celltext); + g_free (celltext); +} + static GString * range_to_text (const GtkSheet *sheet) { - gchar *celltext = NULL; gint r, c; GString *string; @@ -7876,16 +7880,12 @@ range_to_text (const GtkSheet *sheet) { for (c = sheet->range.col0; c < sheet->range.coli; ++c) { - celltext = gtk_sheet_cell_get_text (sheet, r, c); - g_string_append (string, celltext); + append_cell_text (string, sheet, r, c); g_string_append (string, "\t"); - g_free (celltext); } - celltext = gtk_sheet_cell_get_text (sheet, r, c); - g_string_append (string, celltext); + append_cell_text (string, sheet, r, c); if ( r < sheet->range.rowi) g_string_append (string, "\n"); - g_free (celltext); } return string; @@ -7894,7 +7894,6 @@ range_to_text (const GtkSheet *sheet) static GString * range_to_html (const GtkSheet *sheet) { - gchar *celltext = NULL; gint r, c; GString *string; @@ -7912,10 +7911,8 @@ range_to_html (const GtkSheet *sheet) for (c = sheet->range.col0; c <= sheet->range.coli; ++c) { g_string_append (string, ""); - celltext = gtk_sheet_cell_get_text (sheet, r, c); - g_string_append (string, celltext); + append_cell_text (string, sheet, r, c); g_string_append (string, "\n"); - g_free (celltext); } g_string_append (string, "\n"); }