X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fgtksheet%2Fgtksheet.c;h=942b0233117b4641a61b9dadccbec4fed9f51866;hb=e624e2da6ea68d22e6d4fba4eaa96d37d07a6730;hp=fed265eb95acee635cbdd48b4e90e1c84327c01b;hpb=f82952d22e200e1b35cea23545857a2cf2f02c66;p=pspp-builds.git diff --git a/lib/gtksheet/gtksheet.c b/lib/gtksheet/gtksheet.c index fed265eb..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); } @@ -888,6 +883,27 @@ enum PROP_MODEL }; +static void +gtk_sheet_set_row_geometry (GtkSheet *sheet, GSheetRow *geo) +{ + if ( sheet->row_geometry ) g_object_unref (sheet->row_geometry); + + sheet->row_geometry = geo; + + if ( sheet->row_geometry ) g_object_ref (sheet->row_geometry); +} + +static void +gtk_sheet_set_column_geometry (GtkSheet *sheet, GSheetColumn *geo) +{ + if ( sheet->column_geometry ) g_object_unref (sheet->column_geometry); + + sheet->column_geometry = geo; + + if ( sheet->column_geometry ) g_object_ref (sheet->column_geometry); +} + + static void gtk_sheet_set_property (GObject *object, guint prop_id, @@ -900,10 +916,10 @@ gtk_sheet_set_property (GObject *object, switch (prop_id) { case PROP_ROW_GEO: - sheet->row_geometry = g_value_get_pointer (value); + gtk_sheet_set_row_geometry (sheet, g_value_get_pointer (value)); break; case PROP_COL_GEO: - sheet->column_geometry = g_value_get_pointer (value); + gtk_sheet_set_column_geometry (sheet, g_value_get_pointer (value)); if ( sheet->column_geometry) g_signal_connect (sheet->column_geometry, "columns_changed", G_CALLBACK (column_titles_changed), sheet); @@ -1232,6 +1248,7 @@ gtk_sheet_class_init (GtkSheetClass * klass) static void gtk_sheet_init (GtkSheet *sheet) { + sheet->model = NULL; sheet->column_geometry = NULL; sheet->row_geometry = NULL; @@ -1291,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; @@ -1482,6 +1501,8 @@ gtk_sheet_set_model (GtkSheet *sheet, GSheetModel *model) if ( model) { + g_object_ref (model); + g_signal_connect (model, "range_changed", G_CALLBACK (range_update_callback), sheet); @@ -1591,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; @@ -1609,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; @@ -2401,7 +2422,7 @@ gtk_sheet_finalize (GObject * object) } static void -gtk_sheet_dispose (GObject * object) +gtk_sheet_dispose (GObject *object) { GtkSheet *sheet = GTK_SHEET (object); GList *children; @@ -2412,11 +2433,17 @@ gtk_sheet_dispose (GObject * object) if ( sheet->dispose_has_run ) return ; - if (sheet->model) g_object_unref (sheet->model); sheet->dispose_has_run = TRUE; + if (sheet->model) g_object_unref (sheet->model); + if (sheet->row_geometry) g_object_unref (sheet->row_geometry); + 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) @@ -2571,38 +2598,37 @@ 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 | GDK_GC_FUNCTION | GDK_GC_SUBWINDOW); + gtk_widget_set_parent_window (sheet->entry_widget, sheet->sheet_window); gtk_widget_set_parent (sheet->entry_widget, GTK_WIDGET (sheet)); 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); @@ -2676,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); @@ -2694,11 +2720,14 @@ 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); + if (sheet->button != NULL) + gtk_widget_unparent (sheet->button); + if (GTK_WIDGET_CLASS (parent_class)->unrealize) (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget); } @@ -2717,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) @@ -3050,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, @@ -3117,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, @@ -3144,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, @@ -3290,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, @@ -3771,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, @@ -3939,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); @@ -4029,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, @@ -4103,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, @@ -4292,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, @@ -4320,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, @@ -4348,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, @@ -4373,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, @@ -5205,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); @@ -5217,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); @@ -5234,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); } @@ -5245,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); } @@ -5260,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); } @@ -5271,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); } @@ -5284,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); } @@ -5538,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, @@ -6316,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; @@ -6662,16 +6687,14 @@ vadjustment_value_changed (GtkAdjustment * adjustment, if (GTK_SHEET_IS_FROZEN (sheet)) return; - row = ROW_FROM_YPIXEL (sheet, sheet->column_title_area.height + CELL_SPACING); - if (!sheet->column_titles_visible) - row = ROW_FROM_YPIXEL (sheet, CELL_SPACING); + row = ROW_FROM_YPIXEL (sheet, CELL_SPACING); 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) @@ -6767,9 +6790,7 @@ hadjustment_value_changed (GtkAdjustment * adjustment, if (GTK_SHEET_IS_FROZEN (sheet)) return; - column = COLUMN_FROM_XPIXEL (sheet, sheet->row_title_area.width + CELL_SPACING); - if (!sheet->row_titles_visible) - column = COLUMN_FROM_XPIXEL (sheet, CELL_SPACING); + column = COLUMN_FROM_XPIXEL (sheet, CELL_SPACING); old_value = - sheet->hoffset; @@ -7129,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); @@ -7823,7 +7843,7 @@ gtk_sheet_button_new (void) } -inline void +void gtk_sheet_button_free (GtkSheetButton *button) { if (!button) return ; @@ -7833,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; @@ -7849,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; @@ -7867,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; @@ -7885,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"); } @@ -7937,6 +7961,9 @@ primary_clear_cb (GtkClipboard *clipboard, gpointer data) { GtkSheet *sheet = GTK_SHEET (data); + if ( ! GTK_WIDGET_REALIZED (GTK_WIDGET (sheet))) + return; + gtk_sheet_real_unselect_range (sheet, NULL); }