--- gtksheet.c 27 Nov 2005 05:25:00 -0000 1.7 +++ gtksheet.c 27 Nov 2005 05:26:47 -0000 @@ -593,12 +593,14 @@ extern void _gtkextra_signal_emit(GtkObject *object, guint signal_id, ...); enum { SELECT_ROW, SELECT_COLUMN, + DOUBLE_CLICK_ROW, + DOUBLE_CLICK_COLUMN, SELECT_RANGE, CLIP_RANGE, RESIZE_RANGE, MOVE_RANGE, TRAVERSE, DEACTIVATE, @@ -718,12 +720,44 @@ GTK_RUN_LAST, GTK_CLASS_TYPE(object_class), GTK_SIGNAL_OFFSET (GtkSheetClass, select_column), gtkextra_VOID__INT, GTK_TYPE_NONE, 1, GTK_TYPE_INT); + + /** + * 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); + + + /** + * 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); + 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, @@ -4978,19 +5012,39 @@ gboolean veto; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_SHEET (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); + sheet = GTK_SHEET (widget); + + if ( event->type == GDK_2BUTTON_PRESS) + { + gtk_widget_get_pointer (widget, &x, &y); + gtk_sheet_get_pixel_info (sheet, x, y, &row, &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); + } + } + + /* if(event->type != GDK_BUTTON_PRESS) return TRUE; */ gdk_window_get_pointer(widget->window, NULL, NULL, &mods); + if(!(mods & GDK_BUTTON1_MASK)) return TRUE; - sheet = GTK_SHEET (widget); /* press on resize windows */ if (event->window == sheet->column_title_window && gtk_sheet_columns_resizable(sheet)) { gtk_widget_get_pointer (widget, &sheet->x_drag, NULL);