aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--widgets/e-table/ChangeLog5
-rw-r--r--widgets/e-table/e-table-item.c52
-rw-r--r--widgets/table/e-table-item.c52
3 files changed, 91 insertions, 18 deletions
diff --git a/widgets/e-table/ChangeLog b/widgets/e-table/ChangeLog
index d0572c5d13..d9c0699d83 100644
--- a/widgets/e-table/ChangeLog
+++ b/widgets/e-table/ChangeLog
@@ -1,5 +1,10 @@
2000-07-27 Christopher James Lahey <clahey@helixcode.com>
+ * e-table-item.c: Fixed up the table behavior so that it's not
+ always in an edit mode.
+
+2000-07-27 Christopher James Lahey <clahey@helixcode.com>
+
* e-table-selection-model.c: Added a comment.
2000-07-27 Christopher James Lahey <clahey@helixcode.com>
diff --git a/widgets/e-table/e-table-item.c b/widgets/e-table/e-table-item.c
index 3a3f46a505..a1afb2c3be 100644
--- a/widgets/e-table/e-table-item.c
+++ b/widgets/e-table/e-table-item.c
@@ -1378,6 +1378,10 @@ eti_event (GnomeCanvasItem *item, GdkEvent *e)
if (cursor_row == view_to_model_row(eti, row) && cursor_col == view_to_model_col(eti, col)){
+ if ((!eti_editing(eti)) && e_table_model_is_cell_editable(eti->selection->model, cursor_col, cursor_row)) {
+ e_table_item_enter_edit (eti, col, row);
+ }
+
ecell_view = eti->cell_views [col];
/*
@@ -1495,6 +1499,7 @@ eti_event (GnomeCanvasItem *item, GdkEvent *e)
case GDK_KEY_PRESS: {
gint cursor_row, cursor_col;
+ gint handled = TRUE;
gtk_object_get(GTK_OBJECT(eti->selection),
"cursor_row", &cursor_row,
"cursor_col", &cursor_col,
@@ -1505,18 +1510,22 @@ eti_event (GnomeCanvasItem *item, GdkEvent *e)
switch (e->key.keyval){
case GDK_Left:
- if (eti_editing (eti))
+ if (eti_editing (eti)) {
+ handled = FALSE;
break;
+ }
- if (cursor_col > 0)
+ if (cursor_col != view_to_model_col(eti, 0))
eti_cursor_move_left (eti);
break;
case GDK_Right:
- if (eti_editing (eti))
+ if (eti_editing (eti)) {
+ handled = FALSE;
break;
-
- if (cursor_col < eti->cols - 1)
+ }
+
+ if (cursor_col != view_to_model_col(eti, eti->cols - 1))
eti_cursor_move_right (eti);
break;
@@ -1553,6 +1562,15 @@ eti_event (GnomeCanvasItem *item, GdkEvent *e)
else
return_val = FALSE;
}
+ gtk_object_get(GTK_OBJECT(eti->selection),
+ "cursor_row", &cursor_row,
+ "cursor_col", &cursor_col,
+ NULL);
+
+ if (cursor_col > 0 && cursor_row > 0 && return_val &&
+ (!eti_editing(eti)) && e_table_model_is_cell_editable(eti->selection->model, cursor_col, cursor_row)) {
+ e_table_item_enter_edit (eti, model_to_view_col(eti, cursor_col), model_to_view_row(eti, cursor_row));
+ }
break;
case GDK_Return:
@@ -1560,8 +1578,11 @@ eti_event (GnomeCanvasItem *item, GdkEvent *e)
case GDK_ISO_Enter:
case GDK_3270_Enter:
if (eti_editing (eti)){
+ e_table_item_leave_edit (eti);
+#if 0
ecell_view = eti->cell_views [eti->editing_col];
e_cell_event (ecell_view, e, view_to_model_col(eti, eti->editing_col), eti->editing_col, eti->editing_row);
+#endif
}
return_val = FALSE;
gtk_signal_emit (GTK_OBJECT (eti), eti_signals [KEY_PRESS],
@@ -1569,6 +1590,18 @@ eti_event (GnomeCanvasItem *item, GdkEvent *e)
break;
default:
+ handled = FALSE;
+ break;
+ }
+ if (!handled) {
+ if (!eti_editing (eti)){
+ gint col, row;
+ row = model_to_view_row(eti, cursor_row);
+ col = model_to_view_col(eti, cursor_col);
+ if (col != -1 && row != -1 && e_table_model_is_cell_editable(eti->selection->model, cursor_col, cursor_row)) {
+ e_table_item_enter_edit (eti, col, row);
+ }
+ }
if (!eti_editing (eti)){
gtk_signal_emit (GTK_OBJECT (eti), eti_signals [KEY_PRESS],
model_to_view_row(eti, cursor_row), cursor_col, e, &return_val);
@@ -1579,7 +1612,7 @@ eti_event (GnomeCanvasItem *item, GdkEvent *e)
}
break;
}
-
+
case GDK_KEY_RELEASE: {
gint cursor_row, cursor_col;
@@ -1776,11 +1809,12 @@ eti_cursor_change (ETableSelectionModel *selection, int row, int col, ETableItem
eti_request_region_show (eti, view_col, view_row, view_col, view_row);
e_canvas_item_grab_focus(GNOME_CANVAS_ITEM(eti));
- if (e_table_model_is_cell_editable(selection->model, col, view_row)) {
- e_table_item_enter_edit (eti, view_col, view_row);
- }
+ if (eti_editing(eti))
+ e_table_item_leave_edit (eti);
gtk_signal_emit (GTK_OBJECT (eti), eti_signals [CURSOR_CHANGE],
view_row);
+ eti->needs_redraw = TRUE;
+ gnome_canvas_item_request_update(GNOME_CANVAS_ITEM(eti));
}
static void
diff --git a/widgets/table/e-table-item.c b/widgets/table/e-table-item.c
index 3a3f46a505..a1afb2c3be 100644
--- a/widgets/table/e-table-item.c
+++ b/widgets/table/e-table-item.c
@@ -1378,6 +1378,10 @@ eti_event (GnomeCanvasItem *item, GdkEvent *e)
if (cursor_row == view_to_model_row(eti, row) && cursor_col == view_to_model_col(eti, col)){
+ if ((!eti_editing(eti)) && e_table_model_is_cell_editable(eti->selection->model, cursor_col, cursor_row)) {
+ e_table_item_enter_edit (eti, col, row);
+ }
+
ecell_view = eti->cell_views [col];
/*
@@ -1495,6 +1499,7 @@ eti_event (GnomeCanvasItem *item, GdkEvent *e)
case GDK_KEY_PRESS: {
gint cursor_row, cursor_col;
+ gint handled = TRUE;
gtk_object_get(GTK_OBJECT(eti->selection),
"cursor_row", &cursor_row,
"cursor_col", &cursor_col,
@@ -1505,18 +1510,22 @@ eti_event (GnomeCanvasItem *item, GdkEvent *e)
switch (e->key.keyval){
case GDK_Left:
- if (eti_editing (eti))
+ if (eti_editing (eti)) {
+ handled = FALSE;
break;
+ }
- if (cursor_col > 0)
+ if (cursor_col != view_to_model_col(eti, 0))
eti_cursor_move_left (eti);
break;
case GDK_Right:
- if (eti_editing (eti))
+ if (eti_editing (eti)) {
+ handled = FALSE;
break;
-
- if (cursor_col < eti->cols - 1)
+ }
+
+ if (cursor_col != view_to_model_col(eti, eti->cols - 1))
eti_cursor_move_right (eti);
break;
@@ -1553,6 +1562,15 @@ eti_event (GnomeCanvasItem *item, GdkEvent *e)
else
return_val = FALSE;
}
+ gtk_object_get(GTK_OBJECT(eti->selection),
+ "cursor_row", &cursor_row,
+ "cursor_col", &cursor_col,
+ NULL);
+
+ if (cursor_col > 0 && cursor_row > 0 && return_val &&
+ (!eti_editing(eti)) && e_table_model_is_cell_editable(eti->selection->model, cursor_col, cursor_row)) {
+ e_table_item_enter_edit (eti, model_to_view_col(eti, cursor_col), model_to_view_row(eti, cursor_row));
+ }
break;
case GDK_Return:
@@ -1560,8 +1578,11 @@ eti_event (GnomeCanvasItem *item, GdkEvent *e)
case GDK_ISO_Enter:
case GDK_3270_Enter:
if (eti_editing (eti)){
+ e_table_item_leave_edit (eti);
+#if 0
ecell_view = eti->cell_views [eti->editing_col];
e_cell_event (ecell_view, e, view_to_model_col(eti, eti->editing_col), eti->editing_col, eti->editing_row);
+#endif
}
return_val = FALSE;
gtk_signal_emit (GTK_OBJECT (eti), eti_signals [KEY_PRESS],
@@ -1569,6 +1590,18 @@ eti_event (GnomeCanvasItem *item, GdkEvent *e)
break;
default:
+ handled = FALSE;
+ break;
+ }
+ if (!handled) {
+ if (!eti_editing (eti)){
+ gint col, row;
+ row = model_to_view_row(eti, cursor_row);
+ col = model_to_view_col(eti, cursor_col);
+ if (col != -1 && row != -1 && e_table_model_is_cell_editable(eti->selection->model, cursor_col, cursor_row)) {
+ e_table_item_enter_edit (eti, col, row);
+ }
+ }
if (!eti_editing (eti)){
gtk_signal_emit (GTK_OBJECT (eti), eti_signals [KEY_PRESS],
model_to_view_row(eti, cursor_row), cursor_col, e, &return_val);
@@ -1579,7 +1612,7 @@ eti_event (GnomeCanvasItem *item, GdkEvent *e)
}
break;
}
-
+
case GDK_KEY_RELEASE: {
gint cursor_row, cursor_col;
@@ -1776,11 +1809,12 @@ eti_cursor_change (ETableSelectionModel *selection, int row, int col, ETableItem
eti_request_region_show (eti, view_col, view_row, view_col, view_row);
e_canvas_item_grab_focus(GNOME_CANVAS_ITEM(eti));
- if (e_table_model_is_cell_editable(selection->model, col, view_row)) {
- e_table_item_enter_edit (eti, view_col, view_row);
- }
+ if (eti_editing(eti))
+ e_table_item_leave_edit (eti);
gtk_signal_emit (GTK_OBJECT (eti), eti_signals [CURSOR_CHANGE],
view_row);
+ eti->needs_redraw = TRUE;
+ gnome_canvas_item_request_update(GNOME_CANVAS_ITEM(eti));
}
static void