Cancel the drag or maybe drag if you have the mouse button down when the

2001-10-22  Christopher James Lahey  <clahey@ximian.com>

	* e-table-item.c (eti_cancel_drag_due_to_model_change): Cancel the
	drag or maybe drag if you have the mouse button down when the
	pre_change signal comes in.  Fixes Ximian bug #11309.

	* e-table-without.c (add_row, remove_row,
	e_table_without_show_all): Call e_table_model_pre_change where
	appropriate here.

svn path=/trunk/; revision=13927
This commit is contained in:
Christopher James Lahey
2001-10-23 02:09:42 +00:00
committed by Chris Lahey
parent 183cd7e571
commit da49f32d5c
2 changed files with 27 additions and 6 deletions

View File

@ -4,7 +4,7 @@
*
* Author:
* Christopher James Lahey <clahey@ximian.com>
* Miguel de Icaza (miguel@gnu.org)
* Miguel de Icaza <miguel@gnu.org>
*
* Copyright 1999, 2000, 2001, Ximian, Inc.
*
@ -881,12 +881,26 @@ eti_idle_maybe_show_cursor(ETableItem *eti)
g_idle_add (eti_idle_maybe_show_cursor_cb, eti);
}
static void
eti_cancel_drag_due_to_model_change (ETableItem *eti)
{
if (eti->maybe_in_drag) {
eti->maybe_in_drag = FALSE;
if (!eti->maybe_did_something)
e_selection_model_do_something(E_SELECTION_MODEL (eti->selection), eti->drag_row, eti->drag_col, eti->drag_state);
}
if (eti->in_drag) {
eti->in_drag = FALSE;
}
}
/*
* Callback routine: invoked before the ETableModel has suffers a change
*/
static void
eti_table_model_pre_change (ETableModel *table_model, ETableItem *eti)
{
eti_cancel_drag_due_to_model_change (eti);
eti_check_cursor_bounds (eti);
if (eti_editing (eti))
e_table_item_leave_edit (eti);
@ -895,6 +909,7 @@ eti_table_model_pre_change (ETableModel *table_model, ETableItem *eti)
/*
* Callback routine: invoked when the ETableModel has suffered a change
*/
static void
eti_table_model_changed (ETableModel *table_model, ETableItem *eti)
{
@ -2065,12 +2080,13 @@ eti_event (GnomeCanvasItem *item, GdkEvent *e)
int col, row;
gint cursor_row, cursor_col;
if (e->button.button == 1) {
if (eti->grabbed) {
gtk_grab_remove (GTK_WIDGET (item->canvas));
gnome_canvas_item_ungrab(item, e->button.time);
}
if (eti->grabbed) {
gtk_grab_remove (GTK_WIDGET (item->canvas));
gnome_canvas_item_ungrab(item, e->button.time);
eti->grabbed = FALSE;
}
if (e->button.button == 1) {
if (eti->maybe_in_drag) {
eti->maybe_in_drag = FALSE;
if (!eti->maybe_did_something)

View File

@ -85,6 +85,8 @@ add_row (ETableWithout *etw, int model_row)
{
ETableSubset *etss = E_TABLE_SUBSET (etw);
e_table_model_pre_change (E_TABLE_MODEL (etw));
etss->map_table = g_renew (int, etss->map_table, etss->n_map + 1);
etss->map_table[etss->n_map++] = model_row;
@ -97,6 +99,7 @@ remove_row (ETableWithout *etw, int view_row)
{
ETableSubset *etss = E_TABLE_SUBSET (etw);
e_table_model_pre_change (E_TABLE_MODEL (etw));
memmove (etss->map_table + view_row, etss->map_table + view_row + 1, (etss->n_map - view_row - 1) * sizeof (int));
etss->n_map --;
e_table_model_row_deleted (E_TABLE_MODEL (etw), view_row);
@ -341,6 +344,8 @@ e_table_without_show_all (ETableWithout *etw)
int row_count;
ETableSubset *etss = E_TABLE_SUBSET (etw);
e_table_model_pre_change (E_TABLE_MODEL (etw));
if (etw->priv->hash) {
g_hash_table_foreach (etw->priv->hash, delete_hash_element, etw);
g_hash_table_destroy (etw->priv->hash);