diff options
Diffstat (limited to 'widgets')
-rw-r--r-- | widgets/e-table/ChangeLog | 6 | ||||
-rw-r--r-- | widgets/e-table/e-cell-text.c | 31 | ||||
-rw-r--r-- | widgets/e-table/e-table-header-item.c | 23 | ||||
-rw-r--r-- | widgets/table/e-cell-text.c | 31 | ||||
-rw-r--r-- | widgets/table/e-table-header-item.c | 23 |
5 files changed, 108 insertions, 6 deletions
diff --git a/widgets/e-table/ChangeLog b/widgets/e-table/ChangeLog index a2b4ad111b..71ced91a19 100644 --- a/widgets/e-table/ChangeLog +++ b/widgets/e-table/ChangeLog @@ -1,3 +1,9 @@ +2000-02-10 Christopher James Lahey <clahey@helixcode.com> + + * e-cell-text.c: Handle button releases properly. + + * e-table-header-item.c (ethi_start_drag): Added a drag icon. + 2000-02-09 Christopher James Lahey <clahey@helixcode.com> * e-cell-text.c: Tweaked e-cell-text. Added a white background diff --git a/widgets/e-table/e-cell-text.c b/widgets/e-table/e-cell-text.c index 6fe8e2ddfb..5cec90a536 100644 --- a/widgets/e-table/e-cell-text.c +++ b/widgets/e-table/e-cell-text.c @@ -817,6 +817,34 @@ ect_event (ECellView *ecell_view, GdkEvent *event, int model_col, int view_col, break; case GDK_BUTTON_PRESS: /* Fall Through */ case GDK_BUTTON_RELEASE: + if (!edit_display && event->type == GDK_BUTTON_RELEASE && event->button.button == 1) { + GdkEventButton button = event->button; + + e_table_item_enter_edit (text_view->cell_view.e_table_item_view, view_col, row); + edit = text_view->edit; + cellptr = CURRENT_CELL(edit); + edit_display = TRUE; + + e_tep_event.button.type = GDK_BUTTON_PRESS; + e_tep_event.button.time = button.time; + e_tep_event.button.state = button.state; + e_tep_event.button.button = button.button; + e_tep_event.button.position = _get_position_from_xy(cellptr, button.x, button.y); + _get_tep(edit); + return_val = e_text_event_processor_handle_event (edit->tep, + &e_tep_event); + if (event->button.button == 1) { + if (event->type == GDK_BUTTON_PRESS) + edit->button_down = TRUE; + else + edit->button_down = FALSE; + } + edit->lastx = button.x; + edit->lasty = button.y; + edit->last_state = button.state; + + e_tep_event.button.type = GDK_BUTTON_RELEASE; + } if (edit_display) { GdkEventButton button = event->button; e_tep_event.button.time = button.time; @@ -835,9 +863,6 @@ ect_event (ECellView *ecell_view, GdkEvent *event, int model_col, int view_col, edit->lastx = button.x; edit->lasty = button.y; edit->last_state = button.state; - } else if (ect->editable && event->type == GDK_BUTTON_RELEASE && event->button.button == 1) { - e_table_item_enter_edit (text_view->cell_view.e_table_item_view, view_col, row); - return 1; } break; case GDK_MOTION_NOTIFY: diff --git a/widgets/e-table/e-table-header-item.c b/widgets/e-table/e-table-header-item.c index e8f73fc432..ad4d12395c 100644 --- a/widgets/e-table/e-table-header-item.c +++ b/widgets/e-table/e-table-header-item.c @@ -592,6 +592,10 @@ ethi_start_drag (ETableHeaderItem *ethi, GdkEvent *event) GtkWidget *widget = GTK_WIDGET (GNOME_CANVAS_ITEM (ethi)->canvas); GtkTargetList *list; GdkDragContext *context; + ETableCol *ecol; + int col_width; + GdkPixmap *pixmap; + GdkGC *gc; ethi->drag_col = ethi_find_col_by_x (ethi, event->motion.x); if (ethi->drag_col == -1) @@ -599,6 +603,25 @@ ethi_start_drag (ETableHeaderItem *ethi, GdkEvent *event) list = gtk_target_list_new (ethi_drag_types, ELEMENTS (ethi_drag_types)); context = gtk_drag_begin (widget, list, GDK_ACTION_MOVE, 1, event); + + ecol = e_table_header_get_column (ethi->eth, ethi->drag_col); + if (ethi->drag_col == ethi->resize_col) + col_width = ethi->resize_width; + else + col_width = ecol->width; + pixmap = gdk_pixmap_new(widget->window, col_width, ethi->height, -1); + gc = widget->style->bg_gc [GTK_STATE_ACTIVE]; + draw_button (ethi, ecol, pixmap, gc, + widget->style, + 0, 0, col_width, ethi->height); + gtk_drag_set_icon_pixmap (context, + gdk_window_get_colormap(widget->window), + pixmap, + NULL, + col_width / 2, + ethi->height / 2); + gdk_pixmap_unref(pixmap); + ethi->maybe_drag = FALSE; } diff --git a/widgets/table/e-cell-text.c b/widgets/table/e-cell-text.c index 6fe8e2ddfb..5cec90a536 100644 --- a/widgets/table/e-cell-text.c +++ b/widgets/table/e-cell-text.c @@ -817,6 +817,34 @@ ect_event (ECellView *ecell_view, GdkEvent *event, int model_col, int view_col, break; case GDK_BUTTON_PRESS: /* Fall Through */ case GDK_BUTTON_RELEASE: + if (!edit_display && event->type == GDK_BUTTON_RELEASE && event->button.button == 1) { + GdkEventButton button = event->button; + + e_table_item_enter_edit (text_view->cell_view.e_table_item_view, view_col, row); + edit = text_view->edit; + cellptr = CURRENT_CELL(edit); + edit_display = TRUE; + + e_tep_event.button.type = GDK_BUTTON_PRESS; + e_tep_event.button.time = button.time; + e_tep_event.button.state = button.state; + e_tep_event.button.button = button.button; + e_tep_event.button.position = _get_position_from_xy(cellptr, button.x, button.y); + _get_tep(edit); + return_val = e_text_event_processor_handle_event (edit->tep, + &e_tep_event); + if (event->button.button == 1) { + if (event->type == GDK_BUTTON_PRESS) + edit->button_down = TRUE; + else + edit->button_down = FALSE; + } + edit->lastx = button.x; + edit->lasty = button.y; + edit->last_state = button.state; + + e_tep_event.button.type = GDK_BUTTON_RELEASE; + } if (edit_display) { GdkEventButton button = event->button; e_tep_event.button.time = button.time; @@ -835,9 +863,6 @@ ect_event (ECellView *ecell_view, GdkEvent *event, int model_col, int view_col, edit->lastx = button.x; edit->lasty = button.y; edit->last_state = button.state; - } else if (ect->editable && event->type == GDK_BUTTON_RELEASE && event->button.button == 1) { - e_table_item_enter_edit (text_view->cell_view.e_table_item_view, view_col, row); - return 1; } break; case GDK_MOTION_NOTIFY: diff --git a/widgets/table/e-table-header-item.c b/widgets/table/e-table-header-item.c index e8f73fc432..ad4d12395c 100644 --- a/widgets/table/e-table-header-item.c +++ b/widgets/table/e-table-header-item.c @@ -592,6 +592,10 @@ ethi_start_drag (ETableHeaderItem *ethi, GdkEvent *event) GtkWidget *widget = GTK_WIDGET (GNOME_CANVAS_ITEM (ethi)->canvas); GtkTargetList *list; GdkDragContext *context; + ETableCol *ecol; + int col_width; + GdkPixmap *pixmap; + GdkGC *gc; ethi->drag_col = ethi_find_col_by_x (ethi, event->motion.x); if (ethi->drag_col == -1) @@ -599,6 +603,25 @@ ethi_start_drag (ETableHeaderItem *ethi, GdkEvent *event) list = gtk_target_list_new (ethi_drag_types, ELEMENTS (ethi_drag_types)); context = gtk_drag_begin (widget, list, GDK_ACTION_MOVE, 1, event); + + ecol = e_table_header_get_column (ethi->eth, ethi->drag_col); + if (ethi->drag_col == ethi->resize_col) + col_width = ethi->resize_width; + else + col_width = ecol->width; + pixmap = gdk_pixmap_new(widget->window, col_width, ethi->height, -1); + gc = widget->style->bg_gc [GTK_STATE_ACTIVE]; + draw_button (ethi, ecol, pixmap, gc, + widget->style, + 0, 0, col_width, ethi->height); + gtk_drag_set_icon_pixmap (context, + gdk_window_get_colormap(widget->window), + pixmap, + NULL, + col_width / 2, + ethi->height / 2); + gdk_pixmap_unref(pixmap); + ethi->maybe_drag = FALSE; } |