X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fgtksheet%2Fgtksheet.c;h=3830dac1e10ed50442b912f1171222ca20e074f8;hb=89135f74964ca9277c46006377068f22721a26a7;hp=9a4e84faa85b39f0026565eb3b511e79100830c4;hpb=c427e8ca6b4c5d3d365b4ff3bb58a81e34efd217;p=pspp-builds.git diff --git a/lib/gtksheet/gtksheet.c b/lib/gtksheet/gtksheet.c index 9a4e84fa..3830dac1 100644 --- a/lib/gtksheet/gtksheet.c +++ b/lib/gtksheet/gtksheet.c @@ -73,8 +73,7 @@ enum GTK_SHEET_IN_DRAG = 1 << 4, GTK_SHEET_IN_SELECTION = 1 << 5, GTK_SHEET_IN_RESIZE = 1 << 6, - GTK_SHEET_IN_CLIP = 1 << 7, - GTK_SHEET_REDRAW_PENDING = 1 << 8, + GTK_SHEET_REDRAW_PENDING = 1 << 7, }; #define GTK_SHEET_FLAGS(sheet) (GTK_SHEET (sheet)->flags) @@ -90,12 +89,10 @@ enum #define GTK_SHEET_IN_DRAG(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_IN_DRAG) #define GTK_SHEET_IN_SELECTION(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_IN_SELECTION) #define GTK_SHEET_IN_RESIZE(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_IN_RESIZE) -#define GTK_SHEET_IN_CLIP(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_IN_CLIP) #define GTK_SHEET_REDRAW_PENDING(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_REDRAW_PENDING) #define CELL_SPACING 1 #define DRAG_WIDTH 6 -#define TIMEOUT_FLASH 200 #define TIMEOUT_HOVER 300 #define TIME_INTERVAL 8 #define COLUMN_MIN_WIDTH 10 @@ -106,6 +103,9 @@ enum #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); static void gtk_sheet_row_title_button_draw (GtkSheet *sheet, gint row); @@ -449,7 +449,7 @@ yyy_set_row_height (GtkSheet *sheet, gint row, gint height) /* returns the total width of the sheet */ static inline gint SHEET_WIDTH (GtkSheet *sheet) { - gint i,cx; + gint i, cx; cx = ( sheet->row_titles_visible ? sheet->row_title_area.width : 0); @@ -504,7 +504,7 @@ POSSIBLE_YDRAG (const GtkSheet *sheet, gint y, gint *drag_row) row = ROW_FROM_YPIXEL (sheet, y); *drag_row = row; - ydrag = ROW_TOP_YPIXEL (sheet,row)+CELL_SPACING; + ydrag = ROW_TOP_YPIXEL (sheet, row)+CELL_SPACING; if (y <= ydrag + DRAG_WIDTH / 2 && row != 0) { while (!yyy_row_is_visible (sheet, row - 1) && row > 0) row--; @@ -539,7 +539,7 @@ POSSIBLE_DRAG (const GtkSheet *sheet, gint x, gint y, x <= COLUMN_LEFT_XPIXEL (sheet, sheet->range.coli) + xxx_column_width (sheet, sheet->range.coli) + DRAG_WIDTH / 2) { - ydrag = ROW_TOP_YPIXEL (sheet,sheet->range.row0); + ydrag = ROW_TOP_YPIXEL (sheet, sheet->range.row0); if (y >= ydrag - DRAG_WIDTH / 2 && y <= ydrag + DRAG_WIDTH / 2) { *drag_row = sheet->range.row0; @@ -587,10 +587,10 @@ POSSIBLE_RESIZE (const GtkSheet *sheet, gint x, gint y, sheet->range.col0 < 0 || sheet->range.coli < 0 ) return FALSE; - xdrag = COLUMN_LEFT_XPIXEL (sheet,sheet->range.coli)+ + xdrag = COLUMN_LEFT_XPIXEL (sheet, sheet->range.coli)+ xxx_column_width (sheet, sheet->range.coli); - ydrag = ROW_TOP_YPIXEL (sheet,sheet->range.rowi)+ + ydrag = ROW_TOP_YPIXEL (sheet, sheet->range.rowi)+ yyy_row_height (sheet, sheet->range.rowi); if (sheet->state == GTK_SHEET_COLUMN_SELECTED) @@ -599,8 +599,8 @@ POSSIBLE_RESIZE (const GtkSheet *sheet, gint x, gint y, if (sheet->state == GTK_SHEET_ROW_SELECTED) xdrag = COLUMN_LEFT_XPIXEL (sheet, MIN_VISIBLE_COLUMN (sheet)); - *drag_column = COLUMN_FROM_XPIXEL (sheet,x); - *drag_row = ROW_FROM_YPIXEL (sheet,y); + *drag_column = COLUMN_FROM_XPIXEL (sheet, x); + *drag_row = ROW_FROM_YPIXEL (sheet, y); if (x >= xdrag - DRAG_WIDTH / 2 && x <= xdrag + DRAG_WIDTH / 2 && y >= ydrag - DRAG_WIDTH / 2 && y <= ydrag + DRAG_WIDTH / 2) return TRUE; @@ -646,14 +646,10 @@ static void gtk_sheet_size_allocate (GtkWidget * widget, /* Sheet queries */ -static gint gtk_sheet_range_isvisible (GtkSheet * sheet, - GtkSheetRange range); -static gint gtk_sheet_cell_isvisible (GtkSheet * sheet, - gint row, gint column); -/* Clipped Range */ - -static gint gtk_sheet_flash (gpointer data); - +static gboolean gtk_sheet_range_isvisible (const GtkSheet * sheet, + GtkSheetRange range); +static gboolean gtk_sheet_cell_isvisible (GtkSheet * sheet, + gint row, gint column); /* Drawing Routines */ /* draw cell background and frame */ @@ -724,8 +720,7 @@ static void draw_xor_vline (GtkSheet * sheet); static void draw_xor_hline (GtkSheet * sheet); static void draw_xor_rectangle (GtkSheet *sheet, GtkSheetRange range); -static void gtk_sheet_draw_flashing_range (GtkSheet *sheet, - GtkSheetRange range); + static guint new_column_width (GtkSheet * sheet, gint column, gint * x); @@ -761,12 +756,11 @@ static void init_attributes (const GtkSheet *sheet, gint col, /* Memory allocation routines */ static void gtk_sheet_real_range_clear (GtkSheet *sheet, - const GtkSheetRange *range, - gboolean delete); + const GtkSheetRange *range); + static void gtk_sheet_real_cell_clear (GtkSheet *sheet, gint row, - gint column, - gboolean delete); + gint column); /* Container Functions */ @@ -798,8 +792,9 @@ enum SELECT_COLUMN, DOUBLE_CLICK_ROW, DOUBLE_CLICK_COLUMN, + BUTTON_EVENT_ROW, + BUTTON_EVENT_COLUMN, SELECT_RANGE, - CLIP_RANGE, RESIZE_RANGE, MOVE_RANGE, TRAVERSE, @@ -904,12 +899,16 @@ gtk_sheet_class_init (GtkSheetClass * klass) * A row has been selected. */ sheet_signals[SELECT_ROW] = - gtk_signal_new ("select-row", - GTK_RUN_LAST, - GTK_CLASS_TYPE (object_class), - GTK_SIGNAL_OFFSET (GtkSheetClass, select_row), - gtkextra_VOID__INT, - GTK_TYPE_NONE, 1, GTK_TYPE_INT); + g_signal_new ("select-row", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + offsetof (GtkSheetClass, select_row), + NULL, NULL, + gtkextra_VOID__INT, + G_TYPE_NONE, + 1, + G_TYPE_INT); + /** * GtkSheet::select - column @@ -919,147 +918,216 @@ gtk_sheet_class_init (GtkSheetClass * klass) * A column has been selected. */ sheet_signals[SELECT_COLUMN] = - gtk_signal_new ("select-column", - GTK_RUN_LAST, - GTK_CLASS_TYPE (object_class), - GTK_SIGNAL_OFFSET (GtkSheetClass, select_column), - gtkextra_VOID__INT, - GTK_TYPE_NONE, 1, GTK_TYPE_INT); + g_signal_new ("select-column", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + offsetof (GtkSheetClass, select_column), + NULL, NULL, + gtkextra_VOID__INT, + G_TYPE_NONE, + 1, + G_TYPE_INT); /** - * GtkSheet::double - click - row + * GtkSheet::double-click-row * @sheet: the sheet widget that emitted the signal * @row: the row that was double clicked. * * A row's title button has been double clicked */ sheet_signals[DOUBLE_CLICK_ROW] = - gtk_signal_new ("double-click-row", - GTK_RUN_LAST, - GTK_CLASS_TYPE (object_class), - 0, - gtkextra_VOID__INT, - GTK_TYPE_NONE, 1, GTK_TYPE_INT); + g_signal_new ("double-click-row", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + gtkextra_VOID__INT, + G_TYPE_NONE, + 1, + G_TYPE_INT); /** - * GtkSheet::double - click - column + * GtkSheet::double-click-column * @sheet: the sheet widget that emitted the signal * @column: the column that was double clicked. * * A column's title button has been double clicked */ sheet_signals[DOUBLE_CLICK_COLUMN] = - gtk_signal_new ("double-click-column", - GTK_RUN_LAST, - GTK_CLASS_TYPE (object_class), - 0, - gtkextra_VOID__INT, - GTK_TYPE_NONE, 1, GTK_TYPE_INT); + g_signal_new ("double-click-column", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + gtkextra_VOID__INT, + G_TYPE_NONE, + 1, + G_TYPE_INT); + + + /** + * GtkSheet::button-event-column + * @sheet: the sheet widget that emitted the signal + * @column: the column on which the event occured. + * + * A button event occured on a column title button + */ + sheet_signals[BUTTON_EVENT_COLUMN] = + g_signal_new ("button-event-column", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + gtkextra_VOID__INT_POINTER, + G_TYPE_NONE, + 2, + G_TYPE_INT, + G_TYPE_POINTER + ); + + + /** + * GtkSheet::button-event-row + * @sheet: the sheet widget that emitted the signal + * @column: the column on which the event occured. + * + * A button event occured on a row title button + */ + sheet_signals[BUTTON_EVENT_ROW] = + g_signal_new ("button-event-row", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + gtkextra_VOID__INT_POINTER, + G_TYPE_NONE, + 2, + G_TYPE_INT, + G_TYPE_POINTER + ); + sheet_signals[SELECT_RANGE] = - gtk_signal_new ("select-range", - GTK_RUN_LAST, - GTK_CLASS_TYPE (object_class), - GTK_SIGNAL_OFFSET (GtkSheetClass, select_range), - gtkextra_VOID__BOXED, - GTK_TYPE_NONE, 1, GTK_TYPE_SHEET_RANGE); - - sheet_signals[CLIP_RANGE] = - gtk_signal_new ("clip-range", - GTK_RUN_LAST, - GTK_CLASS_TYPE (object_class), - GTK_SIGNAL_OFFSET (GtkSheetClass, clip_range), - gtkextra_VOID__BOXED, - GTK_TYPE_NONE, 1, GTK_TYPE_SHEET_RANGE); + g_signal_new ("select-range", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + offsetof (GtkSheetClass, select_range), + NULL, NULL, + gtkextra_VOID__BOXED, + G_TYPE_NONE, + 1, + GTK_TYPE_SHEET_RANGE); + sheet_signals[RESIZE_RANGE] = - gtk_signal_new ("resize-range", - GTK_RUN_LAST, - GTK_CLASS_TYPE (object_class), - GTK_SIGNAL_OFFSET (GtkSheetClass, resize_range), - gtkextra_VOID__BOXED_BOXED, - GTK_TYPE_NONE, 2, GTK_TYPE_SHEET_RANGE, GTK_TYPE_SHEET_RANGE); + g_signal_new ("resize-range", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + offsetof (GtkSheetClass, resize_range), + NULL, NULL, + gtkextra_VOID__BOXED_BOXED, + G_TYPE_NONE, + 2, + GTK_TYPE_SHEET_RANGE, GTK_TYPE_SHEET_RANGE + ); + sheet_signals[MOVE_RANGE] = - gtk_signal_new ("move-range", - GTK_RUN_LAST, - GTK_CLASS_TYPE (object_class), - GTK_SIGNAL_OFFSET (GtkSheetClass, move_range), - gtkextra_VOID__BOXED_BOXED, - GTK_TYPE_NONE, 2, GTK_TYPE_SHEET_RANGE, GTK_TYPE_SHEET_RANGE); + g_signal_new ("move-range", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + offsetof (GtkSheetClass, move_range), + NULL, NULL, + gtkextra_VOID__BOXED_BOXED, + G_TYPE_NONE, + 2, + GTK_TYPE_SHEET_RANGE, GTK_TYPE_SHEET_RANGE + ); + sheet_signals[TRAVERSE] = - gtk_signal_new ("traverse", - GTK_RUN_LAST, - GTK_CLASS_TYPE (object_class), - GTK_SIGNAL_OFFSET (GtkSheetClass, traverse), - gtkextra_BOOLEAN__INT_INT_POINTER_POINTER, - GTK_TYPE_BOOL, 4, GTK_TYPE_INT, GTK_TYPE_INT, - GTK_TYPE_POINTER, GTK_TYPE_POINTER); + g_signal_new ("traverse", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + offsetof (GtkSheetClass, traverse), + NULL, NULL, + gtkextra_BOOLEAN__INT_INT_POINTER_POINTER, + G_TYPE_BOOLEAN, 4, G_TYPE_INT, G_TYPE_INT, + G_TYPE_POINTER, G_TYPE_POINTER); + sheet_signals[DEACTIVATE] = - gtk_signal_new ("deactivate", - GTK_RUN_LAST, - GTK_CLASS_TYPE (object_class), - GTK_SIGNAL_OFFSET (GtkSheetClass, deactivate), - gtkextra_BOOLEAN__INT_INT, - GTK_TYPE_BOOL, 2, GTK_TYPE_INT, GTK_TYPE_INT); + g_signal_new ("deactivate", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + offsetof (GtkSheetClass, deactivate), + NULL, NULL, + gtkextra_BOOLEAN__INT_INT, + G_TYPE_BOOLEAN, 2, G_TYPE_INT, G_TYPE_INT); sheet_signals[ACTIVATE] = - gtk_signal_new ("activate", - GTK_RUN_LAST, - GTK_CLASS_TYPE (object_class), - GTK_SIGNAL_OFFSET (GtkSheetClass, activate), - gtkextra_BOOLEAN__INT_INT, - GTK_TYPE_BOOL, 2, GTK_TYPE_INT, GTK_TYPE_INT); + g_signal_new ("activate", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + offsetof (GtkSheetClass, activate), + NULL, NULL, + gtkextra_BOOLEAN__INT_INT, + G_TYPE_BOOLEAN, 2, G_TYPE_INT, G_TYPE_INT); sheet_signals[SET_CELL] = - gtk_signal_new ("set-cell", - GTK_RUN_LAST, - GTK_CLASS_TYPE (object_class), - GTK_SIGNAL_OFFSET (GtkSheetClass, set_cell), - gtkextra_VOID__INT_INT, - GTK_TYPE_NONE, 2, GTK_TYPE_INT, GTK_TYPE_INT); + g_signal_new ("set-cell", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + offsetof (GtkSheetClass, set_cell), + NULL, NULL, + gtkextra_VOID__INT_INT, + G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT); + sheet_signals[CLEAR_CELL] = - gtk_signal_new ("clear-cell", - GTK_RUN_LAST, - GTK_CLASS_TYPE (object_class), - GTK_SIGNAL_OFFSET (GtkSheetClass, clear_cell), - gtkextra_VOID__INT_INT, - GTK_TYPE_NONE, 2, GTK_TYPE_INT, GTK_TYPE_INT); + g_signal_new ("clear-cell", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + offsetof (GtkSheetClass, clear_cell), + NULL, NULL, + gtkextra_VOID__INT_INT, + G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT); sheet_signals[CHANGED] = - gtk_signal_new ("changed", - GTK_RUN_LAST, - GTK_CLASS_TYPE (object_class), - GTK_SIGNAL_OFFSET (GtkSheetClass, changed), - gtkextra_VOID__INT_INT, - GTK_TYPE_NONE, 2, GTK_TYPE_INT, GTK_TYPE_INT); + g_signal_new ("changed", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + offsetof (GtkSheetClass, changed), + NULL, NULL, + gtkextra_VOID__INT_INT, + G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT); sheet_signals[NEW_COL_WIDTH] = - gtk_signal_new ("new-column-width", - GTK_RUN_LAST, - GTK_CLASS_TYPE (object_class), - GTK_SIGNAL_OFFSET (GtkSheetClass, changed), - gtkextra_VOID__INT_INT, - GTK_TYPE_NONE, 2, GTK_TYPE_INT, GTK_TYPE_INT); + g_signal_new ("new-column-width", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + offsetof (GtkSheetClass, new_column_width), /*!!!! */ + NULL, NULL, + gtkextra_VOID__INT_INT, + G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT); sheet_signals[NEW_ROW_HEIGHT] = - gtk_signal_new ("new-row-height", - GTK_RUN_LAST, - GTK_CLASS_TYPE (object_class), - GTK_SIGNAL_OFFSET (GtkSheetClass, changed), - gtkextra_VOID__INT_INT, - GTK_TYPE_NONE, 2, GTK_TYPE_INT, GTK_TYPE_INT); + g_signal_new ("new-row-height", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + offsetof (GtkSheetClass, new_row_height), /*!!!! */ + NULL, NULL, + gtkextra_VOID__INT_INT, + G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT); widget_class->set_scroll_adjustments_signal = - gtk_signal_new ("set-scroll-adjustments", - GTK_RUN_LAST, - GTK_CLASS_TYPE (object_class), - GTK_SIGNAL_OFFSET (GtkSheetClass, set_scroll_adjustments), - gtkextra_VOID__OBJECT_OBJECT, - GTK_TYPE_NONE, 2, GTK_TYPE_ADJUSTMENT, GTK_TYPE_ADJUSTMENT); + g_signal_new ("set-scroll-adjustments", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + offsetof (GtkSheetClass, set_scroll_adjustments), + NULL, NULL, + gtkextra_VOID__OBJECT_OBJECT, + G_TYPE_NONE, 2, GTK_TYPE_ADJUSTMENT, GTK_TYPE_ADJUSTMENT); container_class->add = NULL; @@ -1088,7 +1156,6 @@ gtk_sheet_class_init (GtkSheetClass * klass) klass->select_row = NULL; klass->select_column = NULL; klass->select_range = NULL; - klass->clip_range = NULL; klass->resize_range = NULL; klass->move_range = NULL; klass->traverse = NULL; @@ -1168,7 +1235,7 @@ gtk_sheet_init (GtkSheet *sheet) gdk_color_alloc (gdk_colormap_get_system (), &sheet->grid_color); sheet->show_grid = TRUE; - sheet->motion_events = 0; + sheet->motion_timer = 0; } @@ -1304,9 +1371,7 @@ GtkWidget * gtk_sheet_new (GSheetRow *vgeo, GSheetColumn *hgeo, const gchar *title, GSheetModel *model) { - GtkWidget *widget; - - widget = gtk_type_new (gtk_sheet_get_type ()); + GtkWidget *widget = g_object_new (GTK_TYPE_SHEET, NULL); gtk_sheet_construct (GTK_SHEET (widget), vgeo, hgeo, title); @@ -1375,7 +1440,7 @@ column_titles_changed (GtkWidget *w, gint first, gint n_columns, gpointer data) for ( i = first ; i <= first + n_columns ; ++i ) { gtk_sheet_column_title_button_draw (sheet, i); - gtk_signal_emit (GTK_OBJECT (sheet), sheet_signals[CHANGED], -1, i); + g_signal_emit (G_OBJECT (sheet), sheet_signals[CHANGED], 0, -1, i); } } @@ -1428,9 +1493,7 @@ GtkWidget * gtk_sheet_new_with_custom_entry (GSheetRow *rows, GSheetColumn *columns, const gchar *title, GtkType entry_type) { - GtkWidget *widget; - - widget = gtk_type_new (gtk_sheet_get_type ()); + GtkWidget *widget = g_object_new (GTK_TYPE_SHEET, NULL); gtk_sheet_construct_with_custom_entry (GTK_SHEET (widget), rows, columns, title, entry_type); @@ -1658,23 +1721,6 @@ gtk_sheet_autoscroll (GtkSheet *sheet) return sheet->autoscroll; } -void -gtk_sheet_set_clip_text (GtkSheet *sheet, gboolean clip_text) -{ - g_return_if_fail (sheet != NULL); - g_return_if_fail (GTK_IS_SHEET (sheet)); - - sheet->clip_text = clip_text; -} - -gboolean -gtk_sheet_clip_text (GtkSheet *sheet) -{ - g_return_val_if_fail (sheet != NULL, FALSE); - g_return_val_if_fail (GTK_IS_SHEET (sheet), FALSE); - - return sheet->clip_text; -} void gtk_sheet_set_justify_entry (GtkSheet *sheet, gboolean justify) @@ -1702,13 +1748,13 @@ gtk_sheet_set_locked (GtkSheet *sheet, gboolean locked) if ( locked ) { - GTK_SHEET_SET_FLAGS (sheet,GTK_SHEET_IS_LOCKED); + GTK_SHEET_SET_FLAGS (sheet, GTK_SHEET_IS_LOCKED); gtk_widget_hide (sheet->sheet_entry); gtk_widget_unmap (sheet->sheet_entry); } else { - GTK_SHEET_UNSET_FLAGS (sheet,GTK_SHEET_IS_LOCKED); + GTK_SHEET_UNSET_FLAGS (sheet, GTK_SHEET_IS_LOCKED); if (GTK_WIDGET_MAPPED (GTK_WIDGET (sheet))) { gtk_widget_show (sheet->sheet_entry); @@ -1716,7 +1762,7 @@ gtk_sheet_set_locked (GtkSheet *sheet, gboolean locked) } } - gtk_entry_set_editable (GTK_ENTRY (sheet->sheet_entry), locked); + gtk_editable_set_editable (GTK_EDITABLE (sheet->sheet_entry), locked); } @@ -1782,11 +1828,11 @@ gtk_sheet_thaw (GtkSheet *sheet) sheet->old_hadjustment = -1.; if (sheet->hadjustment) - gtk_signal_emit_by_name (GTK_OBJECT (sheet->hadjustment), - "value_changed"); + g_signal_emit_by_name (G_OBJECT (sheet->hadjustment), + "value_changed"); if (sheet->vadjustment) - gtk_signal_emit_by_name (GTK_OBJECT (sheet->vadjustment), - "value_changed"); + g_signal_emit_by_name (G_OBJECT (sheet->vadjustment), + "value_changed"); if (sheet->state == GTK_STATE_NORMAL) if (sheet->sheet_entry && GTK_WIDGET_MAPPED (sheet->sheet_entry)) @@ -1808,8 +1854,8 @@ gtk_sheet_set_row_titles_width (GtkSheet *sheet, guint width) sheet->old_hadjustment = -1.; if (sheet->hadjustment) - gtk_signal_emit_by_name (GTK_OBJECT (sheet->hadjustment), - "value_changed"); + g_signal_emit_by_name (G_OBJECT (sheet->hadjustment), + "value_changed"); size_allocate_global_button (sheet); } @@ -1824,8 +1870,8 @@ gtk_sheet_set_column_titles_height (GtkSheet *sheet, guint height) sheet->old_vadjustment = -1.; if (sheet->vadjustment) - gtk_signal_emit_by_name (GTK_OBJECT (sheet->vadjustment), - "value_changed"); + g_signal_emit_by_name (G_OBJECT (sheet->vadjustment), + "value_changed"); size_allocate_global_button (sheet); } @@ -1863,8 +1909,8 @@ gtk_sheet_show_column_titles (GtkSheet *sheet) sheet->old_vadjustment = -1.; if (sheet->vadjustment) - gtk_signal_emit_by_name (GTK_OBJECT (sheet->vadjustment), - "value_changed"); + g_signal_emit_by_name (G_OBJECT (sheet->vadjustment), + "value_changed"); size_allocate_global_button (sheet); } @@ -1905,8 +1951,8 @@ gtk_sheet_show_row_titles (GtkSheet *sheet) sheet->old_hadjustment = -1.; if (sheet->hadjustment) - gtk_signal_emit_by_name (GTK_OBJECT (sheet->hadjustment), - "value_changed"); + g_signal_emit_by_name (G_OBJECT (sheet->hadjustment), + "value_changed"); size_allocate_global_button (sheet); } @@ -1941,8 +1987,8 @@ gtk_sheet_hide_column_titles (GtkSheet *sheet) sheet->old_vadjustment = -1.; if (sheet->vadjustment) - gtk_signal_emit_by_name (GTK_OBJECT (sheet->vadjustment), - "value_changed"); + g_signal_emit_by_name (G_OBJECT (sheet->vadjustment), + "value_changed"); } void @@ -1976,8 +2022,8 @@ gtk_sheet_hide_row_titles (GtkSheet *sheet) sheet->old_hadjustment = -1.; if (sheet->hadjustment) - gtk_signal_emit_by_name (GTK_OBJECT (sheet->hadjustment), - "value_changed"); + g_signal_emit_by_name (G_OBJECT (sheet->hadjustment), + "value_changed"); } gboolean @@ -2054,8 +2100,8 @@ gtk_sheet_moveto (GtkSheet *sheet, sheet->vadjustment->value = y; sheet->old_vadjustment = -1.; - gtk_signal_emit_by_name (GTK_OBJECT (sheet->vadjustment), - "value_changed"); + g_signal_emit_by_name (G_OBJECT (sheet->vadjustment), + "value_changed"); } @@ -2094,8 +2140,8 @@ gtk_sheet_moveto (GtkSheet *sheet, sheet->hadjustment->value = x; sheet->old_vadjustment = -1.; - gtk_signal_emit_by_name (GTK_OBJECT (sheet->hadjustment), - "value_changed"); + g_signal_emit_by_name (G_OBJECT (sheet->hadjustment), + "value_changed"); } } @@ -2166,7 +2212,7 @@ gtk_sheet_select_row (GtkSheet * sheet, sheet->active_cell.row = row; sheet->active_cell.col = 0; - gtk_signal_emit (GTK_OBJECT (sheet), sheet_signals[SELECT_ROW], row); + g_signal_emit (G_OBJECT (sheet), sheet_signals[SELECT_ROW], 0, row); gtk_sheet_real_select_range (sheet, NULL); } @@ -2197,194 +2243,15 @@ gtk_sheet_select_column (GtkSheet * sheet, gint column) sheet->active_cell.row = 0; sheet->active_cell.col = column; - gtk_signal_emit (GTK_OBJECT (sheet), sheet_signals[SELECT_COLUMN], column); + g_signal_emit (G_OBJECT (sheet), sheet_signals[SELECT_COLUMN], 0, column); gtk_sheet_real_select_range (sheet, NULL); } -void -gtk_sheet_clip_range (GtkSheet *sheet, const GtkSheetRange *range) -{ - - g_return_if_fail (sheet != NULL); - g_return_if_fail (GTK_IS_SHEET (sheet)); - - if (GTK_SHEET_IN_CLIP (sheet)) return; - - GTK_SHEET_SET_FLAGS (sheet, GTK_SHEET_IN_CLIP); - - if (range == NULL) - sheet->clip_range = sheet->range; - else - sheet->clip_range=*range; - - sheet->interval = 0; - sheet->clip_timer = gtk_timeout_add (TIMEOUT_FLASH, gtk_sheet_flash, sheet); - - gtk_signal_emit (GTK_OBJECT (sheet), sheet_signals[CLIP_RANGE], - &sheet->clip_range); - -} - -void -gtk_sheet_unclip_range (GtkSheet *sheet) -{ - - g_return_if_fail (sheet != NULL); - g_return_if_fail (GTK_IS_SHEET (sheet)); - - if (!GTK_SHEET_IN_CLIP (sheet)) return; - - GTK_SHEET_UNSET_FLAGS (sheet, GTK_SHEET_IN_CLIP); - - gtk_timeout_remove (sheet->clip_timer); - gtk_sheet_range_draw (sheet, &sheet->clip_range); - - if (gtk_sheet_range_isvisible (sheet, sheet->range)) - gtk_sheet_range_draw (sheet, &sheet->range); -} - -gboolean -gtk_sheet_in_clip (GtkSheet *sheet) -{ - g_return_val_if_fail (sheet != NULL, FALSE); - g_return_val_if_fail (GTK_IS_SHEET (sheet), FALSE); - - return GTK_SHEET_IN_CLIP (sheet); -} - -static gint -gtk_sheet_flash (gpointer data) -{ - GtkSheet *sheet; - gint x,y,width,height; - GdkRectangle clip_area; - - sheet = GTK_SHEET (data); - - if (!GTK_WIDGET_REALIZED (GTK_WIDGET (sheet))) return TRUE; - if (!GTK_WIDGET_DRAWABLE (GTK_WIDGET (sheet))) return TRUE; - if (!gtk_sheet_range_isvisible (sheet, sheet->clip_range)) return TRUE; - if (GTK_SHEET_IN_XDRAG (sheet)) return TRUE; - if (GTK_SHEET_IN_YDRAG (sheet)) return TRUE; - - GDK_THREADS_ENTER (); - - x = COLUMN_LEFT_XPIXEL (sheet,sheet->clip_range.col0)+1; - y = ROW_TOP_YPIXEL (sheet,sheet->clip_range.row0)+1; - width = COLUMN_LEFT_XPIXEL (sheet,sheet->clip_range.coli)- x+ - xxx_column_width (sheet, sheet->clip_range.coli) - 1; - height = ROW_TOP_YPIXEL (sheet,sheet->clip_range.rowi)- y+ - yyy_row_height (sheet, sheet->clip_range.rowi)- 1; - - clip_area.x = COLUMN_LEFT_XPIXEL (sheet, MIN_VISIBLE_COLUMN (sheet)); - clip_area.y = ROW_TOP_YPIXEL (sheet, MIN_VISIBLE_ROW (sheet)); - clip_area.width = sheet->sheet_window_width; - clip_area.height = sheet->sheet_window_height; - - if (x < 0) - { - width += x + 1; - x =- 1; - } - if (width > clip_area.width) width = clip_area.width + 10; - if (y < 0) - { - height += y + 1; - y =- 1; - } - if (height > clip_area.height) height = clip_area.height + 10; - - gdk_draw_pixmap (sheet->sheet_window, - GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], - sheet->pixmap, - x, y, - x, y, - 1, height); - - gdk_draw_pixmap (sheet->sheet_window, - GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], - sheet->pixmap, - x, y, - x, y, - width, 1); - - gdk_draw_pixmap (sheet->sheet_window, - GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], - sheet->pixmap, - x, y + height, - x, y + height, - width, 1); - - gdk_draw_pixmap (sheet->sheet_window, - GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], - sheet->pixmap, - x + width, y, - x + width, y, - 1, height); - - - sheet->interval = sheet->interval + 1; - if (sheet->interval == TIME_INTERVAL) sheet->interval = 0; - - gdk_gc_set_dashes (sheet->xor_gc, sheet->interval, (gint8*)"\4\4", 2); - gtk_sheet_draw_flashing_range (sheet,sheet->clip_range); - gdk_gc_set_dashes (sheet->xor_gc, 0, (gint8*)"\4\4", 2); - - GDK_THREADS_LEAVE (); - - return TRUE; -} - -static void -gtk_sheet_draw_flashing_range (GtkSheet *sheet, GtkSheetRange range) -{ - GdkRectangle clip_area; - gint x,y,width,height; - - if (!gtk_sheet_range_isvisible (sheet, sheet->clip_range)) return; - - clip_area.x = COLUMN_LEFT_XPIXEL (sheet, MIN_VISIBLE_COLUMN (sheet)); - clip_area.y = ROW_TOP_YPIXEL (sheet, MIN_VISIBLE_ROW (sheet)); - clip_area.width = sheet->sheet_window_width; - clip_area.height = sheet->sheet_window_height; - - gdk_gc_set_clip_rectangle (sheet->xor_gc, &clip_area); - - x = COLUMN_LEFT_XPIXEL (sheet,sheet->clip_range.col0)+1; - y = ROW_TOP_YPIXEL (sheet,sheet->clip_range.row0)+1; - width = COLUMN_LEFT_XPIXEL (sheet,sheet->clip_range.coli)- x+ - xxx_column_width (sheet, sheet->clip_range.coli) - 1; - height = ROW_TOP_YPIXEL (sheet,sheet->clip_range.rowi)- y+ - yyy_row_height (sheet, sheet->clip_range.rowi)- 1; - - if (x < 0) - { - width += x + 1; - x =- 1; - } - if (width > clip_area.width) width = clip_area.width + 10; - if (y < 0) - { - height += y + 1; - y =- 1; - } - if (height > clip_area.height) height = clip_area.height + 10; - - gdk_gc_set_line_attributes (sheet->xor_gc, 1, 1, 0, 0 ); - - gdk_draw_rectangle (sheet->sheet_window, sheet->xor_gc, FALSE, - x, y, - width, height); - - gdk_gc_set_line_attributes (sheet->xor_gc, 1, 0, 0, 0); - gdk_gc_set_clip_rectangle (sheet->xor_gc, NULL); -} - -static gint -gtk_sheet_range_isvisible (GtkSheet * sheet, +static gboolean +gtk_sheet_range_isvisible (const GtkSheet * sheet, GtkSheetRange range) { g_return_val_if_fail (sheet != NULL, FALSE); @@ -2416,7 +2283,7 @@ gtk_sheet_range_isvisible (GtkSheet * sheet, return TRUE; } -static gint +static gboolean gtk_sheet_cell_isvisible (GtkSheet * sheet, gint row, gint column) { @@ -2479,20 +2346,23 @@ gtk_sheet_set_vadjustment (GtkSheet *sheet, if (sheet->vadjustment) { - gtk_signal_disconnect_by_data (GTK_OBJECT (sheet->vadjustment), sheet); - gtk_object_unref (GTK_OBJECT (sheet->vadjustment)); + g_signal_handlers_disconnect_matched (G_OBJECT (sheet->vadjustment), + G_SIGNAL_MATCH_DATA, + 0, 0, 0, 0, + sheet); + g_object_unref (G_OBJECT (sheet->vadjustment)); } sheet->vadjustment = adjustment; if (sheet->vadjustment) { - gtk_object_ref (GTK_OBJECT (sheet->vadjustment)); - gtk_object_sink (GTK_OBJECT (sheet->vadjustment)); + g_object_ref (G_OBJECT (sheet->vadjustment)); + g_object_ref_sink (G_OBJECT (sheet->vadjustment)); - gtk_signal_connect (GTK_OBJECT (sheet->vadjustment), "value_changed", - (GtkSignalFunc) vadjustment_value_changed, - (gpointer) sheet); + g_signal_connect (G_OBJECT (sheet->vadjustment), "value_changed", + G_CALLBACK (vadjustment_value_changed), + sheet); } if (!sheet->vadjustment || !old_adjustment) @@ -2522,20 +2392,23 @@ gtk_sheet_set_hadjustment (GtkSheet *sheet, if (sheet->hadjustment) { - gtk_signal_disconnect_by_data (GTK_OBJECT (sheet->hadjustment), sheet); - gtk_object_unref (GTK_OBJECT (sheet->hadjustment)); + g_signal_handlers_disconnect_matched (G_OBJECT (sheet->hadjustment), + G_SIGNAL_MATCH_DATA, + 0, 0, 0, 0, + sheet); + g_object_unref (G_OBJECT (sheet->hadjustment)); } sheet->hadjustment = adjustment; if (sheet->hadjustment) { - gtk_object_ref (GTK_OBJECT (sheet->hadjustment)); - gtk_object_sink (GTK_OBJECT (sheet->hadjustment)); + g_object_ref (G_OBJECT (sheet->hadjustment)); + g_object_ref_sink (G_OBJECT (sheet->hadjustment)); - gtk_signal_connect (GTK_OBJECT (sheet->hadjustment), "value_changed", - (GtkSignalFunc) hadjustment_value_changed, - (gpointer) sheet); + g_signal_connect (G_OBJECT (sheet->hadjustment), "value_changed", + G_CALLBACK (hadjustment_value_changed), + sheet); } if (!sheet->hadjustment || !old_adjustment) @@ -2569,10 +2442,6 @@ gtk_sheet_finalize (GObject * object) sheet = GTK_SHEET (object); - /* get rid of all the cells */ - gtk_sheet_range_clear (sheet, NULL); - gtk_sheet_range_delete (sheet, NULL); - if (sheet->name) { g_free (sheet->name); @@ -2608,23 +2477,27 @@ gtk_sheet_destroy (GtkObject * object) sheet->button = NULL; } - if (sheet->clip_timer) - { - gtk_timeout_remove (sheet->clip_timer); - sheet->clip_timer = 0; - } - /* unref adjustments */ if (sheet->hadjustment) { - gtk_signal_disconnect_by_data (GTK_OBJECT (sheet->hadjustment), sheet); - gtk_object_unref (GTK_OBJECT (sheet->hadjustment)); + g_signal_handlers_disconnect_matched (G_OBJECT (sheet->hadjustment), + G_SIGNAL_MATCH_DATA, + 0, 0, 0, 0, + sheet); + + g_object_unref (G_OBJECT (sheet->hadjustment)); sheet->hadjustment = NULL; } + if (sheet->vadjustment) { - gtk_signal_disconnect_by_data (GTK_OBJECT (sheet->vadjustment), sheet); - gtk_object_unref (GTK_OBJECT (sheet->vadjustment)); + g_signal_handlers_disconnect_matched (G_OBJECT (sheet->vadjustment), + G_SIGNAL_MATCH_DATA, + 0, 0, 0, 0, + sheet); + + g_object_unref (G_OBJECT (sheet->vadjustment)); + sheet->vadjustment = NULL; } @@ -2822,6 +2695,8 @@ gtk_sheet_realize (GtkWidget * widget) gtk_sheet_realize_child (sheet, child); } + + gtk_sheet_update_primary_selection (sheet); } static void @@ -2829,10 +2704,10 @@ create_global_button (GtkSheet *sheet) { sheet->button = gtk_button_new_with_label (" "); - gtk_signal_connect (GTK_OBJECT (sheet->button), - "pressed", - (GtkSignalFunc) global_button_clicked, - (gpointer) sheet); + g_signal_connect (G_OBJECT (sheet->button), + "pressed", + G_CALLBACK (global_button_clicked), + sheet); } static void @@ -3052,8 +2927,8 @@ gtk_sheet_cell_draw_default (GtkSheet *sheet, gint row, gint col) fg_gc = sheet->fg_gc; bg_gc = sheet->bg_gc; - area.x = COLUMN_LEFT_XPIXEL (sheet,col); - area.y = ROW_TOP_YPIXEL (sheet,row); + area.x = COLUMN_LEFT_XPIXEL (sheet, col); + area.y = ROW_TOP_YPIXEL (sheet, row); area.width= xxx_column_width (sheet, col); area.height = yyy_row_height (sheet, row); @@ -3083,7 +2958,7 @@ static void gtk_sheet_cell_draw_label (GtkSheet *sheet, gint row, gint col) { GtkWidget *widget; - GdkRectangle area, clip_area; + GdkRectangle area; gint i; gint text_width, text_height, y; gint xoffset = 0; @@ -3127,12 +3002,11 @@ gtk_sheet_cell_draw_label (GtkSheet *sheet, gint row, gint col) fg_gc = sheet->fg_gc; bg_gc = sheet->bg_gc; - area.x = COLUMN_LEFT_XPIXEL (sheet,col); - area.y = ROW_TOP_YPIXEL (sheet,row); + area.x = COLUMN_LEFT_XPIXEL (sheet, col); + area.y = ROW_TOP_YPIXEL (sheet, row); area.width = xxx_column_width (sheet, col); area.height = yyy_row_height (sheet, row); - clip_area = area; layout = gtk_widget_create_pango_layout (GTK_WIDGET (sheet), label); dispose_string (sheet, label); @@ -3174,7 +3048,6 @@ gtk_sheet_cell_draw_label (GtkSheet *sheet, gint row, gint col) case GTK_JUSTIFY_RIGHT: size = area.width; area.x +=area.width; - if (!gtk_sheet_clip_text (sheet)) { for (i = col - 1; i >= MIN_VISIBLE_COLUMN (sheet); i--) { @@ -3195,7 +3068,6 @@ gtk_sheet_cell_draw_label (GtkSheet *sheet, gint row, gint col) sizel = area.width / 2; sizer = area.width / 2; area.x += area.width / 2; - if (!gtk_sheet_clip_text (sheet)) { for (i = col + 1; i <= MAX_VISIBLE_COLUMN (sheet); i++) { @@ -3225,7 +3097,6 @@ gtk_sheet_cell_draw_label (GtkSheet *sheet, gint row, gint col) case GTK_JUSTIFY_LEFT: default: size = area.width; - if (!gtk_sheet_clip_text (sheet)) { for (i = col + 1; i <= MAX_VISIBLE_COLUMN (sheet); i++) { @@ -3244,8 +3115,7 @@ gtk_sheet_cell_draw_label (GtkSheet *sheet, gint row, gint col) break; } - if (!gtk_sheet_clip_text (sheet)) clip_area = area; - gdk_gc_set_clip_rectangle (fg_gc, &clip_area); + gdk_gc_set_clip_rectangle (fg_gc, &area); gdk_draw_layout (sheet->pixmap, fg_gc, @@ -3271,7 +3141,7 @@ gtk_sheet_cell_draw_label (GtkSheet *sheet, gint row, gint col) static void gtk_sheet_range_draw (GtkSheet *sheet, const GtkSheetRange *range) { - gint i,j; + gint i, j; GtkSheetRange drawing_range; GdkRectangle area; @@ -3294,7 +3164,7 @@ gtk_sheet_range_draw (GtkSheet *sheet, const GtkSheetRange *range) gdk_draw_rectangle (sheet->pixmap, GTK_WIDGET (sheet)->style->white_gc, TRUE, - 0,0, + 0, 0, sheet->sheet_window_width, sheet->sheet_window_height); } @@ -3319,7 +3189,7 @@ gtk_sheet_range_draw (GtkSheet *sheet, const GtkSheetRange *range) gdk_draw_rectangle (sheet->pixmap, sheet->fg_gc, TRUE, - area.x,area.y, + area.x, area.y, sheet->sheet_window_width - area.x, sheet->sheet_window_height); @@ -3346,7 +3216,7 @@ gtk_sheet_range_draw (GtkSheet *sheet, const GtkSheetRange *range) gdk_draw_rectangle (sheet->pixmap, sheet->fg_gc, TRUE, - area.x,area.y, + area.x, area.y, sheet->sheet_window_width, sheet->sheet_window_height - area.y); @@ -3386,7 +3256,7 @@ static void gtk_sheet_range_draw_selection (GtkSheet *sheet, GtkSheetRange range) { GdkRectangle area; - gint i,j; + gint i, j; GtkSheetRange aux; if (range.col0 > sheet->range.coli || range.coli < sheet->range.col0 || @@ -3417,8 +3287,8 @@ gtk_sheet_range_draw_selection (GtkSheet *sheet, GtkSheetRange range) xxx_column_is_visible (sheet, j) && yyy_row_is_visible (sheet, i)) { - area.x = COLUMN_LEFT_XPIXEL (sheet,j); - area.y = ROW_TOP_YPIXEL (sheet,i); + area.x = COLUMN_LEFT_XPIXEL (sheet, j); + area.y = ROW_TOP_YPIXEL (sheet, i); area.width= xxx_column_width (sheet, j); area.height = yyy_row_height (sheet, i); @@ -3440,8 +3310,8 @@ gtk_sheet_range_draw_selection (GtkSheet *sheet, GtkSheetRange range) gdk_draw_rectangle (sheet->sheet_window, sheet->xor_gc, TRUE, - area.x + 1,area.y + 1, - area.width,area.height); + area.x + 1, area.y + 1, + area.width, area.height); } } @@ -3454,11 +3324,11 @@ gtk_sheet_range_draw_selection (GtkSheet *sheet, GtkSheetRange range) static void gtk_sheet_draw_backing_pixmap (GtkSheet *sheet, GtkSheetRange range) { - gint x,y,width,height; + gint x, y, width, height; if (!GTK_WIDGET_REALIZED (GTK_WIDGET (sheet))) return; - x = COLUMN_LEFT_XPIXEL (sheet,range.col0); + x = COLUMN_LEFT_XPIXEL (sheet, range.col0); y = ROW_TOP_YPIXEL (sheet, range.row0); width = COLUMN_LEFT_XPIXEL (sheet, range.coli) - x + xxx_column_width (sheet, range.coli); @@ -3596,7 +3466,7 @@ gtk_sheet_set_cell (GtkSheet *sheet, gint row, gint col, } if ( changed ) - gtk_signal_emit (GTK_OBJECT (sheet),sheet_signals[CHANGED], row, col); + g_signal_emit (G_OBJECT (sheet), sheet_signals[CHANGED], 0, row, col); } @@ -3618,30 +3488,7 @@ gtk_sheet_cell_clear (GtkSheet *sheet, gint row, gint column) range.col0 = MIN_VISIBLE_COLUMN (sheet); range.coli = MAX_VISIBLE_COLUMN (sheet); - gtk_sheet_real_cell_clear (sheet, row, column, FALSE); - - if (!GTK_SHEET_IS_FROZEN (sheet)) - { - gtk_sheet_range_draw (sheet, &range); - } -} - -void -gtk_sheet_cell_delete (GtkSheet *sheet, gint row, gint column) -{ - GtkSheetRange range; - - g_return_if_fail (sheet != NULL); - g_return_if_fail (GTK_IS_SHEET (sheet)); - if (column >= xxx_column_count (sheet) || row >= yyy_row_count (sheet)) return; - if (column < 0 || row < 0) return; - - range.row0 = row; - range.rowi = row; - range.col0 = MIN_VISIBLE_COLUMN (sheet); - range.coli = MAX_VISIBLE_COLUMN (sheet); - - gtk_sheet_real_cell_clear (sheet, row, column, TRUE); + gtk_sheet_real_cell_clear (sheet, row, column); if (!GTK_SHEET_IS_FROZEN (sheet)) { @@ -3650,7 +3497,7 @@ gtk_sheet_cell_delete (GtkSheet *sheet, gint row, gint column) } static void -gtk_sheet_real_cell_clear (GtkSheet *sheet, gint row, gint column, gboolean delete) +gtk_sheet_real_cell_clear (GtkSheet *sheet, gint row, gint column) { GSheetModel *model = gtk_sheet_get_model (sheet); @@ -3661,8 +3508,8 @@ gtk_sheet_real_cell_clear (GtkSheet *sheet, gint row, gint column, gboolean dele g_sheet_model_datum_clear (model, row, column); if (GTK_IS_OBJECT (sheet) && G_OBJECT (sheet)->ref_count > 0) - gtk_signal_emit (GTK_OBJECT (sheet),sheet_signals[CLEAR_CELL], - row, column); + g_signal_emit (G_OBJECT (sheet), sheet_signals[CLEAR_CELL], 0, + row, column); } dispose_string (sheet, old_text); @@ -3674,22 +3521,11 @@ gtk_sheet_range_clear (GtkSheet *sheet, const GtkSheetRange *range) g_return_if_fail (sheet != NULL); g_return_if_fail (GTK_IS_SHEET (sheet)); - gtk_sheet_real_range_clear (sheet, range, FALSE); -} - -void -gtk_sheet_range_delete (GtkSheet *sheet, const GtkSheetRange *range) -{ - g_return_if_fail (sheet != NULL); - g_return_if_fail (GTK_IS_SHEET (sheet)); - - gtk_sheet_real_range_clear (sheet, range, TRUE); + gtk_sheet_real_range_clear (sheet, range); } - static void -gtk_sheet_real_range_clear (GtkSheet *sheet, const GtkSheetRange *range, - gboolean delete) +gtk_sheet_real_range_clear (GtkSheet *sheet, const GtkSheetRange *range) { gint i, j; GtkSheetRange clear; @@ -3712,7 +3548,7 @@ gtk_sheet_real_range_clear (GtkSheet *sheet, const GtkSheetRange *range, for (i = clear.row0; i <= clear.rowi; i++) for (j = clear.col0; j <= clear.coli; j++) { - gtk_sheet_real_cell_clear (sheet, i, j, delete); + gtk_sheet_real_cell_clear (sheet, i, j); } gtk_sheet_range_draw (sheet, NULL); @@ -3915,7 +3751,7 @@ static void gtk_sheet_entry_changed (GtkWidget *widget, gpointer data) { GtkSheet *sheet; - gint row,col; + gint row, col; const char *text; GtkJustification justification; GtkSheetCellAttr attributes; @@ -3966,7 +3802,7 @@ gtk_sheet_deactivate_cell (GtkSheet *sheet) if (!GTK_WIDGET_REALIZED (GTK_WIDGET (sheet))) return FALSE; if (sheet->state != GTK_SHEET_NORMAL) return FALSE; - _gtkextra_signal_emit (GTK_OBJECT (sheet),sheet_signals[DEACTIVATE], + _gtkextra_signal_emit (GTK_OBJECT (sheet), sheet_signals[DEACTIVATE], sheet->active_cell.row, sheet->active_cell.col, &veto); @@ -3975,9 +3811,9 @@ gtk_sheet_deactivate_cell (GtkSheet *sheet) if ( sheet->active_cell.row == -1 || sheet->active_cell.col == -1 ) return TRUE; - gtk_signal_disconnect_by_func (GTK_OBJECT (gtk_sheet_get_entry (sheet)), - (GtkSignalFunc) gtk_sheet_entry_changed, - GTK_OBJECT (GTK_WIDGET (sheet))); + g_signal_handlers_disconnect_by_func (G_OBJECT (gtk_sheet_get_entry (sheet)), + G_CALLBACK (gtk_sheet_entry_changed), + sheet); gtk_sheet_hide_active_cell (sheet); sheet->active_cell.row = -1; @@ -3996,7 +3832,7 @@ static void gtk_sheet_hide_active_cell (GtkSheet *sheet) { const char *text; - gint row,col; + gint row, col; GtkJustification justification; GtkSheetCellAttr attributes; @@ -4018,7 +3854,7 @@ gtk_sheet_hide_active_cell (GtkSheet *sheet) if (text && strlen (text) != 0) { gtk_sheet_set_cell (sheet, row, col, justification, text); - gtk_signal_emit (GTK_OBJECT (sheet),sheet_signals[SET_CELL], row, col); + g_signal_emit (G_OBJECT (sheet), sheet_signals[SET_CELL], 0, row, col); } else { @@ -4035,10 +3871,10 @@ gtk_sheet_hide_active_cell (GtkSheet *sheet) gdk_draw_pixmap (sheet->sheet_window, GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], sheet->pixmap, - COLUMN_LEFT_XPIXEL (sheet,col)- 1, - ROW_TOP_YPIXEL (sheet,row)- 1, - COLUMN_LEFT_XPIXEL (sheet,col)- 1, - ROW_TOP_YPIXEL (sheet,row)- 1, + COLUMN_LEFT_XPIXEL (sheet, col)- 1, + ROW_TOP_YPIXEL (sheet, row)- 1, + COLUMN_LEFT_XPIXEL (sheet, col)- 1, + ROW_TOP_YPIXEL (sheet, row)- 1, xxx_column_width (sheet, col) + 4, yyy_row_height (sheet, row)+4); @@ -4060,10 +3896,6 @@ gtk_sheet_activate_cell (GtkSheet *sheet, gint row, gint col) if (row >= yyy_row_count (sheet) || col >= xxx_column_count (sheet)) return FALSE; - /* _gtkextra_signal_emit (GTK_OBJECT (sheet),sheet_signals[ACTIVATE], row, col, &veto); - if (!GTK_WIDGET_REALIZED (GTK_WIDGET (sheet))) return veto; - */ - if (!veto) return FALSE; if (sheet->state != GTK_SHEET_NORMAL) { @@ -4090,7 +3922,7 @@ gtk_sheet_activate_cell (GtkSheet *sheet, gint row, gint col) G_CALLBACK (gtk_sheet_entry_changed), sheet); - _gtkextra_signal_emit (GTK_OBJECT (sheet),sheet_signals[ACTIVATE], row, col, &veto); + _gtkextra_signal_emit (GTK_OBJECT (sheet), sheet_signals [ACTIVATE], row, col, &veto); return TRUE; } @@ -4137,9 +3969,9 @@ gtk_sheet_show_active_cell (GtkSheet *sheet) gtk_entry_set_visibility (GTK_ENTRY (sheet_entry), attributes.is_visible); if (gtk_sheet_locked (sheet) || !attributes.is_editable) - gtk_entry_set_editable (GTK_ENTRY (sheet_entry), FALSE); + gtk_editable_set_editable (GTK_EDITABLE (sheet_entry), FALSE); else - gtk_entry_set_editable (GTK_ENTRY (sheet_entry), TRUE); + gtk_editable_set_editable (GTK_EDITABLE (sheet_entry), TRUE); /*** Added by John Gotts. Mar 25, 2005 *********/ old_text = gtk_entry_get_text (GTK_ENTRY (sheet_entry)); @@ -4165,6 +3997,7 @@ static void gtk_sheet_draw_active_cell (GtkSheet *sheet) { gint row, col; + GtkSheetRange range; if (!GTK_WIDGET_DRAWABLE (GTK_WIDGET (sheet))) return; if (!GTK_WIDGET_REALIZED (GTK_WIDGET (sheet))) return; @@ -4176,7 +4009,10 @@ gtk_sheet_draw_active_cell (GtkSheet *sheet) if (!gtk_sheet_cell_isvisible (sheet, row, col)) return; - gtk_sheet_draw_border (sheet, sheet->range); + range.col0 = range.coli = col; + range.row0 = range.rowi = row; + + gtk_sheet_draw_border (sheet, range); } @@ -4220,9 +4056,9 @@ gtk_sheet_make_backing_pixmap (GtkSheet *sheet, guint width, guint height) static void gtk_sheet_new_selection (GtkSheet *sheet, GtkSheetRange *range) { - gint i,j, mask1, mask2; + gint i, j, mask1, mask2; gint state, selected; - gint x,y,width,height; + gint x, y, width, height; GtkSheetRange new_range, aux_range; g_return_if_fail (sheet != NULL); @@ -4275,7 +4111,7 @@ gtk_sheet_new_selection (GtkSheet *sheet, GtkSheetRange *range) if (mask1 != mask2) { - x = COLUMN_LEFT_XPIXEL (sheet,j); + x = COLUMN_LEFT_XPIXEL (sheet, j); y = ROW_TOP_YPIXEL (sheet, i); width = COLUMN_LEFT_XPIXEL (sheet, j)- x+ xxx_column_width (sheet, j); @@ -4306,7 +4142,7 @@ gtk_sheet_new_selection (GtkSheet *sheet, GtkSheetRange *range) if (i != sheet->active_cell.row || j != sheet->active_cell.col) { - x = COLUMN_LEFT_XPIXEL (sheet,j); + x = COLUMN_LEFT_XPIXEL (sheet, j); y = ROW_TOP_YPIXEL (sheet, i); width = COLUMN_LEFT_XPIXEL (sheet, j)- x+ xxx_column_width (sheet, j); @@ -4329,8 +4165,8 @@ gtk_sheet_new_selection (GtkSheet *sheet, GtkSheetRange *range) gdk_draw_rectangle (sheet->sheet_window, sheet->xor_gc, TRUE, - x + 1,y + 1, - width,height); + x + 1, y + 1, + width, height); } } } @@ -4350,7 +4186,7 @@ gtk_sheet_new_selection (GtkSheet *sheet, GtkSheetRange *range) xxx_column_is_visible (sheet, j) && yyy_row_is_visible (sheet, i)) { - x = COLUMN_LEFT_XPIXEL (sheet,j); + x = COLUMN_LEFT_XPIXEL (sheet, j); y = ROW_TOP_YPIXEL (sheet, i); width = COLUMN_LEFT_XPIXEL (sheet, j)- x+ xxx_column_width (sheet, j); height = ROW_TOP_YPIXEL (sheet, i)- y + yyy_row_height (sheet, i); @@ -4395,7 +4231,7 @@ gtk_sheet_new_selection (GtkSheet *sheet, GtkSheetRange *range) (i != sheet->active_cell.row || j != sheet->active_cell.col)) { - x = COLUMN_LEFT_XPIXEL (sheet,j); + x = COLUMN_LEFT_XPIXEL (sheet, j); y = ROW_TOP_YPIXEL (sheet, i); width = COLUMN_LEFT_XPIXEL (sheet, j)- x+ xxx_column_width (sheet, j); height = ROW_TOP_YPIXEL (sheet, i)- y + yyy_row_height (sheet, i); @@ -4416,8 +4252,8 @@ gtk_sheet_new_selection (GtkSheet *sheet, GtkSheetRange *range) gdk_draw_rectangle (sheet->sheet_window, sheet->xor_gc, TRUE, - x + 1,y + 1, - width,height); + x + 1, y + 1, + width, height); } @@ -4445,7 +4281,7 @@ gtk_sheet_new_selection (GtkSheet *sheet, GtkSheetRange *range) mask2 = j == new_range.coli ? mask2 + 8 : mask2; if (mask2 != mask1 || (mask2 == mask1 && state != GTK_STATE_SELECTED)) { - x = COLUMN_LEFT_XPIXEL (sheet,j); + x = COLUMN_LEFT_XPIXEL (sheet, j); y = ROW_TOP_YPIXEL (sheet, i); width = xxx_column_width (sheet, j); height = yyy_row_height (sheet, i); @@ -4453,31 +4289,31 @@ gtk_sheet_new_selection (GtkSheet *sheet, GtkSheetRange *range) gdk_draw_rectangle (sheet->sheet_window, sheet->xor_gc, TRUE, - x + 1,y - 1, - width,3); + x + 1, y - 1, + width, 3); if (mask2 & 2) gdk_draw_rectangle (sheet->sheet_window, sheet->xor_gc, TRUE, - x + 1,y + height - 1, - width,3); + x + 1, y + height - 1, + width, 3); if (mask2 & 4) gdk_draw_rectangle (sheet->sheet_window, sheet->xor_gc, TRUE, - x - 1,y + 1, - 3,height); + x - 1, y + 1, + 3, height); if (mask2 & 8) gdk_draw_rectangle (sheet->sheet_window, sheet->xor_gc, TRUE, - x + width - 1,y + 1, - 3,height); + x + width - 1, y + 1, + 3, height); @@ -4504,8 +4340,8 @@ gtk_sheet_draw_border (GtkSheet *sheet, GtkSheetRange new_range) widget = GTK_WIDGET (sheet); - x = COLUMN_LEFT_XPIXEL (sheet,new_range.col0); - y = ROW_TOP_YPIXEL (sheet,new_range.row0); + x = COLUMN_LEFT_XPIXEL (sheet, new_range.col0); + y = ROW_TOP_YPIXEL (sheet, new_range.row0); width = COLUMN_LEFT_XPIXEL (sheet, new_range.coli) - x + xxx_column_width (sheet, new_range.coli); @@ -4550,13 +4386,13 @@ gtk_sheet_draw_border (GtkSheet *sheet, GtkSheetRange new_range) static void gtk_sheet_draw_corners (GtkSheet *sheet, GtkSheetRange range) { - gint x,y; + gint x, y; guint width = 1; if (gtk_sheet_cell_isvisible (sheet, range.row0, range.col0)) { - x = COLUMN_LEFT_XPIXEL (sheet,range.col0); - y = ROW_TOP_YPIXEL (sheet,range.row0); + x = COLUMN_LEFT_XPIXEL (sheet, range.col0); + y = ROW_TOP_YPIXEL (sheet, range.row0); gdk_draw_pixmap (sheet->sheet_window, GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], sheet->pixmap, @@ -4569,16 +4405,16 @@ gtk_sheet_draw_corners (GtkSheet *sheet, GtkSheetRange range) gdk_draw_rectangle (sheet->sheet_window, sheet->xor_gc, TRUE, - x - 1,y - 1, - 3,3); + x - 1, y - 1, + 3, 3); } if (gtk_sheet_cell_isvisible (sheet, range.row0, range.coli) || sheet->state == GTK_SHEET_COLUMN_SELECTED) { - x = COLUMN_LEFT_XPIXEL (sheet,range.coli)+ + x = COLUMN_LEFT_XPIXEL (sheet, range.coli)+ xxx_column_width (sheet, range.coli); - y = ROW_TOP_YPIXEL (sheet,range.row0); + y = ROW_TOP_YPIXEL (sheet, range.row0); width = 1; if (sheet->state == GTK_SHEET_COLUMN_SELECTED) { @@ -4597,15 +4433,15 @@ gtk_sheet_draw_corners (GtkSheet *sheet, GtkSheetRange range) gdk_draw_rectangle (sheet->sheet_window, sheet->xor_gc, TRUE, - x - width + width / 2,y - width + width / 2, - 2 + width,2 + width); + x - width + width / 2, y - width + width / 2, + 2 + width, 2 + width); } if (gtk_sheet_cell_isvisible (sheet, range.rowi, range.col0) || sheet->state == GTK_SHEET_ROW_SELECTED) { - x = COLUMN_LEFT_XPIXEL (sheet,range.col0); - y = ROW_TOP_YPIXEL (sheet,range.rowi)+ + x = COLUMN_LEFT_XPIXEL (sheet, range.col0); + y = ROW_TOP_YPIXEL (sheet, range.rowi)+ yyy_row_height (sheet, range.rowi); width = 1; if (sheet->state == GTK_SHEET_ROW_SELECTED) @@ -4625,15 +4461,15 @@ gtk_sheet_draw_corners (GtkSheet *sheet, GtkSheetRange range) gdk_draw_rectangle (sheet->sheet_window, sheet->xor_gc, TRUE, - x - width + width / 2,y - width + width / 2, - 2 + width,2 + width); + x - width + width / 2, y - width + width / 2, + 2 + width, 2 + width); } if (gtk_sheet_cell_isvisible (sheet, range.rowi, range.coli)) { - x = COLUMN_LEFT_XPIXEL (sheet,range.coli)+ + x = COLUMN_LEFT_XPIXEL (sheet, range.coli)+ xxx_column_width (sheet, range.coli); - y = ROW_TOP_YPIXEL (sheet,range.rowi)+ + y = ROW_TOP_YPIXEL (sheet, range.rowi)+ yyy_row_height (sheet, range.rowi); width = 1; if (sheet->state == GTK_SHEET_RANGE_SELECTED) width = 3; @@ -4650,8 +4486,8 @@ gtk_sheet_draw_corners (GtkSheet *sheet, GtkSheetRange range) gdk_draw_rectangle (sheet->sheet_window, sheet->xor_gc, TRUE, - x - width + width / 2,y - width + width / 2, - 2 + width,2 + width); + x - width + width / 2, y - width + width / 2, + 2 + width, 2 + width); } @@ -4686,7 +4522,9 @@ gtk_sheet_real_select_range (GtkSheet * sheet, gtk_sheet_range_draw_selection (sheet, sheet->range); } - gtk_signal_emit (GTK_OBJECT (sheet), sheet_signals[SELECT_RANGE], &sheet->range); + gtk_sheet_update_primary_selection (sheet); + + g_signal_emit (G_OBJECT (sheet), sheet_signals[SELECT_RANGE], 0, &sheet->range); } @@ -4740,6 +4578,7 @@ gtk_sheet_unselect_range (GtkSheet * sheet) { gtk_sheet_real_unselect_range (sheet, NULL); sheet->state = GTK_STATE_NORMAL; + gtk_sheet_activate_cell (sheet, sheet->active_cell.row, sheet->active_cell.col); } @@ -4758,6 +4597,9 @@ gtk_sheet_real_unselect_range (GtkSheet * sheet, if (range->row0 < 0 || range->rowi < 0) return; if (range->col0 < 0 || range->coli < 0) return; + g_signal_emit (G_OBJECT (sheet), sheet_signals[SELECT_COLUMN], 0, -1); + g_signal_emit (G_OBJECT (sheet), sheet_signals[SELECT_ROW], 0, -1); + if (gtk_sheet_range_isvisible (sheet, *range)) gtk_sheet_draw_backing_pixmap (sheet, *range); @@ -4861,21 +4703,37 @@ gtk_sheet_button_press (GtkWidget * widget, sheet = GTK_SHEET (widget); - if ( event->type == GDK_2BUTTON_PRESS) + /* Cancel any pending tooltips */ + if (sheet->motion_timer) { - gtk_widget_get_pointer (widget, &x, &y); - gtk_sheet_get_pixel_info (sheet, x, y, &row, &column); + g_source_remove (sheet->motion_timer); + sheet->motion_timer = 0; + } + + gtk_widget_get_pointer (widget, &x, &y); + gtk_sheet_get_pixel_info (sheet, x, y, &row, &column); + + + if (event->window == sheet->column_title_window) + { + g_signal_emit (G_OBJECT (sheet), + sheet_signals[BUTTON_EVENT_COLUMN], 0, + column, event); + + if ( event->type == GDK_2BUTTON_PRESS && event->button == 1) + g_signal_emit (G_OBJECT (sheet), + sheet_signals[DOUBLE_CLICK_COLUMN], 0, column); - if (event->window == sheet->column_title_window) - { - gtk_signal_emit (GTK_OBJECT (sheet), - sheet_signals[DOUBLE_CLICK_COLUMN], column); - } - else if (event->window == sheet->row_title_window) - { - gtk_signal_emit (GTK_OBJECT (sheet), - sheet_signals[DOUBLE_CLICK_ROW], row); - } + } + else if (event->window == sheet->row_title_window) + { + g_signal_emit (G_OBJECT (sheet), + sheet_signals[BUTTON_EVENT_ROW], 0, + row, event); + + if ( event->type == GDK_2BUTTON_PRESS && event->button == 1) + g_signal_emit (G_OBJECT (sheet), + sheet_signals[DOUBLE_CLICK_ROW], 0, row); } @@ -5051,7 +4909,7 @@ static gint gtk_sheet_scroll (gpointer data) { GtkSheet *sheet; - gint x,y,row,column; + gint x, y, row, column; gint move; sheet = GTK_SHEET (data); @@ -5152,6 +5010,7 @@ gtk_sheet_click_cell (GtkSheet *sheet, gint row, gint column, gboolean *veto) *veto = FALSE; return; } + gtk_sheet_activate_cell (sheet, row, column); } if (gtk_sheet_autoscroll (sheet)) @@ -5180,7 +5039,7 @@ gtk_sheet_button_release (GtkWidget * widget, GdkEventButton * event) { GtkSheet *sheet; - gint x,y; + gint x, y; sheet = GTK_SHEET (widget); @@ -5196,7 +5055,7 @@ gtk_sheet_button_release (GtkWidget * widget, gtk_sheet_set_column_width (sheet, sheet->drag_cell.col, new_column_width (sheet, sheet->drag_cell.col, &x)); sheet->old_hadjustment = -1.; - gtk_signal_emit_by_name (GTK_OBJECT (sheet->hadjustment), "value_changed"); + g_signal_emit_by_name (G_OBJECT (sheet->hadjustment), "value_changed"); return TRUE; } @@ -5210,7 +5069,7 @@ gtk_sheet_button_release (GtkWidget * widget, gtk_sheet_set_row_height (sheet, sheet->drag_cell.row, new_row_height (sheet, sheet->drag_cell.row, &y)); sheet->old_vadjustment = -1.; - gtk_signal_emit_by_name (GTK_OBJECT (sheet->vadjustment), "value_changed"); + g_signal_emit_by_name (G_OBJECT (sheet->vadjustment), "value_changed"); return TRUE; } @@ -5235,8 +5094,8 @@ gtk_sheet_button_release (GtkWidget * widget, old_range = sheet->range; sheet->range = sheet->drag_range; sheet->drag_range = old_range; - gtk_signal_emit (GTK_OBJECT (sheet),sheet_signals[MOVE_RANGE], - &sheet->drag_range, &sheet->range); + g_signal_emit (G_OBJECT (sheet), sheet_signals[MOVE_RANGE], 0, + &sheet->drag_range, &sheet->range); gtk_sheet_select_range (sheet, &sheet->range); } @@ -5266,8 +5125,8 @@ gtk_sheet_button_release (GtkWidget * widget, sheet->drag_range = old_range; if (sheet->state == GTK_STATE_NORMAL) sheet->state = GTK_SHEET_RANGE_SELECTED; - gtk_signal_emit (GTK_OBJECT (sheet),sheet_signals[RESIZE_RANGE], - &sheet->drag_range, &sheet->range); + g_signal_emit (G_OBJECT (sheet), sheet_signals[RESIZE_RANGE], 0, + &sheet->drag_range, &sheet->range); gtk_sheet_select_range (sheet, &sheet->range); } @@ -5404,39 +5263,36 @@ static gboolean motion_timeout_callback (gpointer data) { GtkSheet *sheet = GTK_SHEET (data); - if ( --sheet->motion_events == 0 ) + gint x, y; + gint row, column; + gtk_widget_get_pointer (GTK_WIDGET (sheet), &x, &y); + + if ( gtk_sheet_get_pixel_info (sheet, x, y, &row, &column) ) { - gint x, y; - gint row, column; - gtk_widget_get_pointer (GTK_WIDGET (sheet), &x, &y); + if ( column == -1 && row == -1 ) + return FALSE; - if ( gtk_sheet_get_pixel_info (sheet, x, y, &row, &column) ) + if ( column == -1) { - if ( column == -1 && row == -1 ) - return FALSE; + GSheetRow *row_geo = sheet->row_geometry; + gchar *text; - if ( column == -1) - { - GSheetRow *row_geo = sheet->row_geometry; - gchar *text; + text = g_sheet_row_get_subtitle (row_geo, row); - text = g_sheet_row_get_subtitle (row_geo, row); - - show_subtitle (sheet, row, column, text); - g_free (text); - } + show_subtitle (sheet, row, column, text); + g_free (text); + } - if ( row == -1) - { - GSheetColumn *col_geo = sheet->column_geometry; - gchar *text; + if ( row == -1) + { + GSheetColumn *col_geo = sheet->column_geometry; + gchar *text; - text = g_sheet_column_get_subtitle (col_geo, column); + text = g_sheet_column_get_subtitle (col_geo, column); - show_subtitle (sheet, row, column, text ); + show_subtitle (sheet, row, column, text ); - g_free (text); - } + g_free (text); } } @@ -5465,8 +5321,9 @@ gtk_sheet_motion (GtkWidget * widget, if (!sheet->hover_window || ! GTK_WIDGET_VISIBLE (sheet->hover_window->window)) { - sheet->motion_events++; - g_timeout_add (TIMEOUT_HOVER, motion_timeout_callback, sheet); + if ( sheet->motion_timer > 0 ) + g_source_remove (sheet->motion_timer); + sheet->motion_timer = g_timeout_add (TIMEOUT_HOVER, motion_timeout_callback, sheet); } else { @@ -5517,7 +5374,7 @@ gtk_sheet_motion (GtkWidget * widget, gtk_sheet_rows_resizable (sheet)) { gtk_widget_get_pointer (widget, &x, &y); - if (!GTK_SHEET_IN_SELECTION (sheet) && POSSIBLE_YDRAG (sheet,y, &column)) + if (!GTK_SHEET_IN_SELECTION (sheet) && POSSIBLE_YDRAG (sheet, y, &column)) { new_cursor = GDK_SB_V_DOUBLE_ARROW; if (new_cursor != sheet->cursor_drag->type) @@ -5555,13 +5412,13 @@ gtk_sheet_motion (GtkWidget * widget, new_cursor = GDK_TOP_LEFT_ARROW; if ( event->window == sheet->sheet_window && - ! (POSSIBLE_RESIZE (sheet,x,y,&row,&column) || GTK_SHEET_IN_RESIZE (sheet)) && (POSSIBLE_DRAG (sheet, x,y,&row,&column) || GTK_SHEET_IN_DRAG (sheet)) && + ! (POSSIBLE_RESIZE (sheet, x, y, &row, &column) || GTK_SHEET_IN_RESIZE (sheet)) && (POSSIBLE_DRAG (sheet, x, y, &row, &column) || GTK_SHEET_IN_DRAG (sheet)) && new_cursor != sheet->cursor_drag->type) { gdk_cursor_destroy (sheet->cursor_drag); sheet->cursor_drag = gdk_cursor_new (GDK_TOP_LEFT_ARROW); - gdk_window_set_cursor (sheet->sheet_window,sheet->cursor_drag); + gdk_window_set_cursor (sheet->sheet_window, sheet->cursor_drag); } new_cursor = GDK_SIZING; @@ -5574,7 +5431,7 @@ gtk_sheet_motion (GtkWidget * widget, { gdk_cursor_destroy (sheet->cursor_drag); sheet->cursor_drag = gdk_cursor_new (GDK_SIZING); - gdk_window_set_cursor (sheet->sheet_window,sheet->cursor_drag); + gdk_window_set_cursor (sheet->sheet_window, sheet->cursor_drag); } @@ -5618,8 +5475,8 @@ gtk_sheet_motion (GtkWidget * widget, if (GTK_SHEET_IN_DRAG (sheet)) { GtkSheetRange aux; - column = COLUMN_FROM_XPIXEL (sheet,x)- sheet->drag_cell.col; - row = ROW_FROM_YPIXEL (sheet,y)- sheet->drag_cell.row; + column = COLUMN_FROM_XPIXEL (sheet, x)- sheet->drag_cell.col; + row = ROW_FROM_YPIXEL (sheet, y)- sheet->drag_cell.row; if (sheet->state == GTK_SHEET_COLUMN_SELECTED) row = 0; if (sheet->state == GTK_SHEET_ROW_SELECTED) column = 0; sheet->x_drag = x; @@ -5649,18 +5506,18 @@ gtk_sheet_motion (GtkWidget * widget, gint v_h, current_col, current_row, col_threshold, row_threshold; v_h = 1; - if (abs (x - COLUMN_LEFT_XPIXEL (sheet,sheet->drag_cell.col)) > - abs (y - ROW_TOP_YPIXEL (sheet,sheet->drag_cell.row))) v_h = 2; + if (abs (x - COLUMN_LEFT_XPIXEL (sheet, sheet->drag_cell.col)) > + abs (y - ROW_TOP_YPIXEL (sheet, sheet->drag_cell.row))) v_h = 2; - current_col = COLUMN_FROM_XPIXEL (sheet,x); - current_row = ROW_FROM_YPIXEL (sheet,y); + current_col = COLUMN_FROM_XPIXEL (sheet, x); + current_row = ROW_FROM_YPIXEL (sheet, y); column = current_col - sheet->drag_cell.col; row = current_row - sheet->drag_cell.row; /*use half of column width resp. row height as threshold to expand selection*/ - col_threshold = COLUMN_LEFT_XPIXEL (sheet,current_col) + - xxx_column_width (sheet,current_col) / 2; + col_threshold = COLUMN_LEFT_XPIXEL (sheet, current_col) + + xxx_column_width (sheet, current_col) / 2; if (column > 0) { if (x < col_threshold) @@ -5671,7 +5528,7 @@ gtk_sheet_motion (GtkWidget * widget, if (x > col_threshold) column +=1; } - row_threshold = ROW_TOP_YPIXEL (sheet,current_row) + + row_threshold = ROW_TOP_YPIXEL (sheet, current_row) + yyy_row_height (sheet, current_row)/2; if (row > 0) { @@ -5796,7 +5653,7 @@ gtk_sheet_extend_selection (GtkSheet *sheet, gint row, gint column) { GtkSheetRange range; gint state; - gint r,c; + gint r, c; if (row == sheet->selection_cell.row && column == sheet->selection_cell.col) return; @@ -5829,10 +5686,10 @@ gtk_sheet_extend_selection (GtkSheet *sheet, gint row, gint column) gdk_draw_pixmap (sheet->sheet_window, GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL], sheet->pixmap, - COLUMN_LEFT_XPIXEL (sheet,c)- 1, - ROW_TOP_YPIXEL (sheet,r)- 1, - COLUMN_LEFT_XPIXEL (sheet,c)- 1, - ROW_TOP_YPIXEL (sheet,r)- 1, + COLUMN_LEFT_XPIXEL (sheet, c)- 1, + ROW_TOP_YPIXEL (sheet, r)- 1, + COLUMN_LEFT_XPIXEL (sheet, c)- 1, + ROW_TOP_YPIXEL (sheet, r)- 1, xxx_column_width (sheet, c)+4, yyy_row_height (sheet, r)+4); gtk_sheet_range_draw_selection (sheet, sheet->range); @@ -5843,10 +5700,10 @@ gtk_sheet_extend_selection (GtkSheet *sheet, gint row, gint column) sheet->selection_cell.row = row; sheet->selection_cell.col = column; - range.col0 = MIN (column,sheet->active_cell.col); - range.coli = MAX (column,sheet->active_cell.col); - range.row0 = MIN (row,sheet->active_cell.row); - range.rowi = MAX (row,sheet->active_cell.row); + range.col0 = MIN (column, sheet->active_cell.col); + range.coli = MAX (column, sheet->active_cell.col); + range.row0 = MIN (row, sheet->active_cell.row); + range.rowi = MAX (row, sheet->active_cell.row); if (range.row0 != sheet->range.row0 || range.rowi != sheet->range.rowi || range.col0 != sheet->range.col0 || range.coli != sheet->range.coli || @@ -5860,7 +5717,7 @@ gtk_sheet_entry_key_press (GtkWidget *widget, GdkEventKey *key) { gboolean focus; - gtk_signal_emit_by_name (GTK_OBJECT (widget), "key_press_event", key, &focus); + g_signal_emit_by_name (G_OBJECT (widget), "key_press_event", key, &focus); return focus; } @@ -5894,8 +5751,8 @@ gtk_sheet_key_press (GtkWidget *widget, case GDK_Return: case GDK_KP_Enter: if (sheet->state == GTK_SHEET_NORMAL && !GTK_SHEET_IN_SELECTION (sheet)) - gtk_signal_emit_stop_by_name (GTK_OBJECT (gtk_sheet_get_entry (sheet)), - "key_press_event"); + g_signal_stop_emission_by_name (gtk_sheet_get_entry (sheet), + "key-press-event"); row = sheet->active_cell.row; col = sheet->active_cell.col; if (sheet->state == GTK_SHEET_COLUMN_SELECTED) @@ -5973,7 +5830,7 @@ gtk_sheet_key_press (GtkWidget *widget, col = MIN_VISIBLE_COLUMN (sheet); row = row - scroll; while (!yyy_row_is_visible (sheet, row) && row > 0) row--; - row = MAX (0,row); + row = MAX (0, row); gtk_sheet_click_cell (sheet, row, col, &veto); extend_selection = FALSE; break; @@ -6256,7 +6113,7 @@ static void size_allocate_column_title_buttons (GtkSheet * sheet) { gint i; - gint x,width; + gint x, width; if (!sheet->column_titles_visible) return; if (!GTK_WIDGET_REALIZED (sheet)) @@ -6285,7 +6142,7 @@ size_allocate_column_title_buttons (GtkSheet * sheet) if (MAX_VISIBLE_COLUMN (sheet) == xxx_column_count (sheet) - 1) gdk_window_clear_area (sheet->column_title_window, - 0,0, + 0, 0, sheet->column_title_area.width, sheet->column_title_area.height); @@ -6326,7 +6183,7 @@ size_allocate_row_title_buttons (GtkSheet * sheet) } if (MAX_VISIBLE_ROW (sheet) == yyy_row_count (sheet)- 1) gdk_window_clear_area (sheet->row_title_window, - 0,0, + 0, 0, sheet->row_title_area.width, sheet->row_title_area.height); @@ -6411,13 +6268,13 @@ gtk_sheet_size_allocate_entry (GtkSheet *sheet) column_width = xxx_column_width (sheet, sheet->active_cell.col); size = MIN (text_size, max_size); - size = MAX (size,column_width - 2 * CELLOFFSET); + size = MAX (size, column_width - 2 * CELLOFFSET); row = sheet->active_cell.row; col = sheet->active_cell.col; - shentry_allocation.x = COLUMN_LEFT_XPIXEL (sheet,sheet->active_cell.col); - shentry_allocation.y = ROW_TOP_YPIXEL (sheet,sheet->active_cell.row); + shentry_allocation.x = COLUMN_LEFT_XPIXEL (sheet, sheet->active_cell.col); + shentry_allocation.y = ROW_TOP_YPIXEL (sheet, sheet->active_cell.row); shentry_allocation.width = column_width; shentry_allocation.height = yyy_row_height (sheet, sheet->active_cell.row); @@ -6425,10 +6282,7 @@ gtk_sheet_size_allocate_entry (GtkSheet *sheet) { shentry_allocation.height -= 2 * CELLOFFSET; shentry_allocation.y += CELLOFFSET; - if (gtk_sheet_clip_text (sheet)) - shentry_allocation.width = column_width - 2 * CELLOFFSET; - else - shentry_allocation.width = size; + shentry_allocation.width = size; switch (GTK_ITEM_ENTRY (sheet_entry)->justification) { @@ -6455,7 +6309,7 @@ gtk_sheet_size_allocate_entry (GtkSheet *sheet) gtk_widget_size_allocate (sheet->sheet_entry, &shentry_allocation); - if (previous_style == style) gtk_style_unref (previous_style); + if (previous_style == style) g_object_unref (previous_style); } static void @@ -6464,14 +6318,14 @@ gtk_sheet_entry_set_max_size (GtkSheet *sheet) gint i; gint size = 0; gint sizel = 0, sizer = 0; - gint row,col; + gint row, col; GtkJustification justification; gchar *s = NULL; row = sheet->active_cell.row; col = sheet->active_cell.col; - if ( ! GTK_IS_ITEM_ENTRY (sheet->sheet_entry) || gtk_sheet_clip_text (sheet)) + if ( ! GTK_IS_ITEM_ENTRY (sheet->sheet_entry) ) return; justification = GTK_ITEM_ENTRY (sheet->sheet_entry)->justification; @@ -6525,6 +6379,7 @@ gtk_sheet_entry_set_max_size (GtkSheet *sheet) GTK_ITEM_ENTRY (sheet->sheet_entry)->text_max_size = size; } + static void create_sheet_entry (GtkSheet *sheet) { @@ -6547,7 +6402,7 @@ create_sheet_entry (GtkSheet *sheet) { if (!g_type_is_a (sheet->entry_type, GTK_TYPE_ENTRY)) { - parent = GTK_WIDGET (gtk_type_new (sheet->entry_type)); + parent = g_object_new (sheet->entry_type, NULL); sheet->sheet_entry = parent; @@ -6557,7 +6412,7 @@ create_sheet_entry (GtkSheet *sheet) } else { - parent = GTK_WIDGET (gtk_type_new (sheet->entry_type)); + parent = g_object_new (sheet->entry_type, NULL); entry = parent; found_entry = TRUE; } @@ -6586,9 +6441,9 @@ create_sheet_entry (GtkSheet *sheet) gtk_widget_realize (sheet->sheet_entry); } - gtk_signal_connect_object (GTK_OBJECT (entry),"key_press_event", - (GtkSignalFunc) gtk_sheet_entry_key_press, - GTK_OBJECT (sheet)); + g_signal_connect_swapped (G_OBJECT (entry), "key_press_event", + G_CALLBACK (gtk_sheet_entry_key_press), + sheet); gtk_widget_show (sheet->sheet_entry); } @@ -6926,7 +6781,7 @@ adjust_scrollbars (GtkSheet * sheet) sheet->vadjustment->step_increment = DEFAULT_ROW_HEIGHT (GTK_WIDGET (sheet)); sheet->vadjustment->lower = 0; sheet->vadjustment->upper = SHEET_HEIGHT (sheet) + 80; - gtk_signal_emit_by_name (GTK_OBJECT (sheet->vadjustment), "changed"); + g_signal_emit_by_name (G_OBJECT (sheet->vadjustment), "changed"); } @@ -6937,7 +6792,7 @@ adjust_scrollbars (GtkSheet * sheet) sheet->hadjustment->step_increment = DEFAULT_COLUMN_WIDTH; sheet->hadjustment->lower = 0; sheet->hadjustment->upper = SHEET_WIDTH (sheet)+ 80; - gtk_signal_emit_by_name (GTK_OBJECT (sheet->hadjustment), "changed"); + g_signal_emit_by_name (G_OBJECT (sheet->hadjustment), "changed"); } } @@ -6959,14 +6814,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); + row = ROW_FROM_YPIXEL (sheet, sheet->column_title_area.height + CELL_SPACING); if (!sheet->column_titles_visible) 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, sheet); y = g_sheet_row_start_pixel (sheet->row_geometry, new_row, sheet); @@ -7064,7 +6919,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); + column = COLUMN_FROM_XPIXEL (sheet, sheet->row_title_area.width + CELL_SPACING); if (!sheet->row_titles_visible) column = COLUMN_FROM_XPIXEL (sheet, CELL_SPACING); @@ -7340,9 +7195,9 @@ gtk_sheet_set_column_width (GtkSheet * sheet, gtk_sheet_range_draw (sheet, NULL); } - gtk_signal_emit (GTK_OBJECT (sheet), sheet_signals[CHANGED], - 1, column); - gtk_signal_emit (GTK_OBJECT (sheet), sheet_signals[NEW_COL_WIDTH], - column, width); + g_signal_emit (G_OBJECT (sheet), sheet_signals[CHANGED], 0, -1, column); + g_signal_emit (G_OBJECT (sheet), sheet_signals[NEW_COL_WIDTH], 0, + column, width); } @@ -7373,8 +7228,9 @@ gtk_sheet_set_row_height (GtkSheet * sheet, gtk_sheet_range_draw (sheet, NULL); } - gtk_signal_emit (GTK_OBJECT (sheet), sheet_signals[CHANGED], row, - 1); - gtk_signal_emit (GTK_OBJECT (sheet), sheet_signals[NEW_ROW_HEIGHT], row, height); + g_signal_emit (G_OBJECT (sheet), sheet_signals[CHANGED], 0, row, - 1); + g_signal_emit (G_OBJECT (sheet), sheet_signals[NEW_ROW_HEIGHT], 0, + row, height); } @@ -8128,3 +7984,148 @@ gtk_sheet_button_free (GtkSheetButton *button) g_free (button->label); g_free (button); } + + +static GString * +range_to_text (const GtkSheet *sheet) +{ + gchar *celltext = NULL; + gint r, c; + GString *string; + + if ( !gtk_sheet_range_isvisible (sheet, sheet->range)) + return NULL; + + string = g_string_sized_new (80); + + for (r = sheet->range.row0; r <= sheet->range.rowi; ++r) + { + for (c = sheet->range.col0; c < sheet->range.coli; ++c) + { + celltext = gtk_sheet_cell_get_text (sheet, r, c); + g_string_append (string, celltext); + g_string_append (string, "\t"); + g_free (celltext); + } + celltext = gtk_sheet_cell_get_text (sheet, r, c); + g_string_append (string, celltext); + if ( r < sheet->range.rowi) + g_string_append (string, "\n"); + g_free (celltext); + } + + return string; +} + +static GString * +range_to_html (const GtkSheet *sheet) +{ + gchar *celltext = NULL; + gint r, c; + GString *string; + + if ( !gtk_sheet_range_isvisible (sheet, sheet->range)) + return NULL; + + string = g_string_sized_new (480); + + g_string_append (string, "\n"); + g_string_append (string, "\n"); + g_string_append (string, "\n"); + for (r = sheet->range.row0; r <= sheet->range.rowi; ++r) + { + g_string_append (string, "\n"); + for (c = sheet->range.col0; c <= sheet->range.coli; ++c) + { + g_string_append (string, "\n"); + g_free (celltext); + } + g_string_append (string, "\n"); + } + g_string_append (string, "
"); + celltext = gtk_sheet_cell_get_text (sheet, r, c); + g_string_append (string, celltext); + g_string_append (string, "
\n"); + g_string_append (string, "\n"); + g_string_append (string, "\n"); + + return string; +} + +enum { + SELECT_FMT_NULL, + SELECT_FMT_TEXT, + SELECT_FMT_HTML +}; + +static void +primary_get_cb (GtkClipboard *clipboard, + GtkSelectionData *selection_data, + guint info, + gpointer data) +{ + GtkSheet *sheet = GTK_SHEET (data); + GString *string = NULL; + + switch (info) + { + case SELECT_FMT_TEXT: + string = range_to_text (sheet); + break; + case SELECT_FMT_HTML: + string = range_to_html (sheet); + break; + default: + g_assert_not_reached (); + } + + gtk_selection_data_set (selection_data, selection_data->target, + 8, + (const guchar *) string->str, string->len); + g_string_free (string, TRUE); +} + +static void +primary_clear_cb (GtkClipboard *clipboard, + gpointer data) +{ + GtkSheet *sheet = GTK_SHEET (data); + gtk_sheet_real_unselect_range (sheet, NULL); +} + +static void +gtk_sheet_update_primary_selection (GtkSheet *sheet) +{ + static const GtkTargetEntry targets[] = { + { "UTF8_STRING", 0, SELECT_FMT_TEXT }, + { "STRING", 0, SELECT_FMT_TEXT }, + { "TEXT", 0, SELECT_FMT_TEXT }, + { "COMPOUND_TEXT", 0, SELECT_FMT_TEXT }, + { "text/plain;charset=utf-8", 0, SELECT_FMT_TEXT }, + { "text/plain", 0, SELECT_FMT_TEXT }, + { "text/html", 0, SELECT_FMT_HTML } + }; + + GtkClipboard *clipboard; + + if (!GTK_WIDGET_REALIZED (sheet)) + return; + + clipboard = gtk_widget_get_clipboard (GTK_WIDGET (sheet), + GDK_SELECTION_PRIMARY); + + if (gtk_sheet_range_isvisible (sheet, sheet->range)) + { + if (!gtk_clipboard_set_with_owner (clipboard, targets, + G_N_ELEMENTS (targets), + primary_get_cb, primary_clear_cb, + G_OBJECT (sheet))) + primary_clear_cb (clipboard, sheet); + } + else + { + if (gtk_clipboard_get_owner (clipboard) == G_OBJECT (sheet)) + gtk_clipboard_clear (clipboard); + } +} +