diff options
author | Christopher James Lahey <clahey@ximian.com> | 2001-12-05 05:03:28 +0800 |
---|---|---|
committer | Chris Lahey <clahey@src.gnome.org> | 2001-12-05 05:03:28 +0800 |
commit | 410f3bc629f38cb76a5d16209a07e2c336ed1f9f (patch) | |
tree | 8ca2b834f5c5bff158d6e76ea2e27ef4826bf71c /widgets/misc/e-selection-model-array.c | |
parent | e508d293964edda19447e713a2503e3133e84161 (diff) | |
download | gsoc2013-evolution-410f3bc629f38cb76a5d16209a07e2c336ed1f9f.tar.gz gsoc2013-evolution-410f3bc629f38cb76a5d16209a07e2c336ed1f9f.tar.zst gsoc2013-evolution-410f3bc629f38cb76a5d16209a07e2c336ed1f9f.zip |
Merging changes:
2001-12-04 Christopher James Lahey <clahey@ximian.com>
* configure.in (GAL_CURRENT): Bumped version number to 0.18.99.0
and CURRENT to 19.
2001-11-21 Christopher James Lahey <clahey@ximian.com>
* gal/widgets/e-reflow.c, gal/widgets/e-reflow.h: Handle
selection_row_changed signal.
* gal/widgets/e-selection-model-array.c,
gal/widgets/e-selection-model-array.h: Properly send
selection_row_changed signals if changing from a single row
selected to a single other row selected or if moving the
selection_end by a single row.
* gal/widgets/e-selection-model.c,
gal/widgets/e-selection-model.h: Added selection_row_changed
signal.
(e_selection_model_select_as_key_press): Fixed the case statement
here to make MULTIPLE and EXTENDED the same as BROWSE instead of
as SINGLE.
From gal/e-table/ChangeLog:
2001-11-21 Christopher James Lahey <clahey@ximian.com>
* e-table-item.c, e-table-item.h: Handle selection_row_changed
signal. Keep track of the old cursor row so that we only redraw
two rows when the cursor changes.
* e-table.c, e-tree.c: Handle selection_row_changed signal.
* e-tree-selection-model.c: Properly send selection_row_changed
signals if changing from a single row selected to a single other
row selected or if moving the selection_end by a single row.
svn path=/trunk/; revision=14870
Diffstat (limited to 'widgets/misc/e-selection-model-array.c')
-rw-r--r-- | widgets/misc/e-selection-model-array.c | 71 |
1 files changed, 64 insertions, 7 deletions
diff --git a/widgets/misc/e-selection-model-array.c b/widgets/misc/e-selection-model-array.c index 13c964bfba..dd81fb2554 100644 --- a/widgets/misc/e-selection-model-array.c +++ b/widgets/misc/e-selection-model-array.c @@ -70,6 +70,8 @@ e_selection_model_array_delete_rows(ESelectionModelArray *esma, int row, int cou if (esma->cursor_row >= 0) e_bit_array_change_one_row(esma->eba, esma->cursor_row, TRUE); + esma->selected_row = -1; + esma->selected_range_end = -1; e_selection_model_selection_changed(E_SELECTION_MODEL(esma)); e_selection_model_cursor_changed(E_SELECTION_MODEL(esma), esma->cursor_row, esma->cursor_col); } @@ -84,6 +86,8 @@ e_selection_model_array_insert_rows(ESelectionModelArray *esma, int row, int cou if (esma->cursor_row >= row) esma->cursor_row += count; + esma->selected_row = -1; + esma->selected_range_end = -1; e_selection_model_selection_changed(E_SELECTION_MODEL(esma)); e_selection_model_cursor_changed(E_SELECTION_MODEL(esma), esma->cursor_row, esma->cursor_col); } @@ -114,6 +118,8 @@ e_selection_model_array_move_row(ESelectionModelArray *esma, int old_row, int ne if (cursor) { esma->cursor_row = new_row; } + esma->selected_row = -1; + esma->selected_range_end = -1; e_selection_model_selection_changed(esm); e_selection_model_cursor_changed(esm, esma->cursor_row, esma->cursor_col); } @@ -223,6 +229,8 @@ esma_clear(ESelectionModel *selection) } esma->cursor_row = -1; esma->cursor_col = -1; + esma->selected_row = -1; + esma->selected_range_end = -1; e_selection_model_selection_changed(E_SELECTION_MODEL(esma)); e_selection_model_cursor_changed(E_SELECTION_MODEL(esma), -1, -1); } @@ -267,6 +275,8 @@ esma_select_all (ESelectionModel *selection) esma->cursor_col = 0; esma->cursor_row = 0; esma->selection_start_row = 0; + esma->selected_row = -1; + esma->selected_range_end = -1; e_selection_model_selection_changed(E_SELECTION_MODEL(esma)); e_selection_model_cursor_changed(E_SELECTION_MODEL(esma), 0, 0); } @@ -290,6 +300,8 @@ esma_invert_selection (ESelectionModel *selection) esma->cursor_col = -1; esma->cursor_row = -1; esma->selection_start_row = 0; + esma->selected_row = -1; + esma->selected_range_end = -1; e_selection_model_selection_changed(E_SELECTION_MODEL(esma)); e_selection_model_cursor_changed(E_SELECTION_MODEL(esma), -1, -1); } @@ -356,15 +368,33 @@ esma_cursor_col (ESelectionModel *selection) } static void -esma_select_single_row (ESelectionModel *selection, int row) +esma_real_select_single_row (ESelectionModel *selection, int row) { ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(selection); e_selection_model_array_confirm_row_count(esma); + e_bit_array_select_single_row(esma->eba, row); - e_selection_model_selection_changed(E_SELECTION_MODEL(esma)); esma->selection_start_row = row; + esma->selected_row = row; + esma->selected_range_end = row; +} + +static void +esma_select_single_row (ESelectionModel *selection, int row) +{ + int selected_row = E_SELECTION_MODEL_ARRAY(selection)->selected_row; + esma_real_select_single_row (selection, row); + + if (selected_row != -1) { + if (selected_row != row) { + e_selection_model_selection_row_changed(selection, selected_row); + e_selection_model_selection_row_changed(selection, row); + } + } else { + e_selection_model_selection_changed(selection); + } } static void @@ -376,11 +406,13 @@ esma_toggle_single_row (ESelectionModel *selection, int row) e_bit_array_toggle_single_row(esma->eba, row); esma->selection_start_row = row; - e_selection_model_selection_changed(E_SELECTION_MODEL(esma)); + esma->selected_row = -1; + esma->selected_range_end = -1; + e_selection_model_selection_row_changed(E_SELECTION_MODEL(esma), row); } static void -esma_move_selection_end (ESelectionModel *selection, int row) +esma_real_move_selection_end (ESelectionModel *selection, int row) { ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(selection); int old_start; @@ -411,16 +443,38 @@ esma_move_selection_end (ESelectionModel *selection, int row) esma_change_range(selection, old_end, new_end, TRUE); if (new_end < old_end) esma_change_range(selection, new_end, old_end, FALSE); - e_selection_model_selection_changed(E_SELECTION_MODEL(esma)); + esma->selected_row = -1; + esma->selected_range_end = -1; +} + +static void +esma_move_selection_end (ESelectionModel *selection, int row) +{ + esma_real_move_selection_end (selection, row); + e_selection_model_selection_changed(selection); } static void esma_set_selection_end (ESelectionModel *selection, int row) { ESelectionModelArray *esma = E_SELECTION_MODEL_ARRAY(selection); - esma_select_single_row(selection, esma->selection_start_row); + int selected_range_end = esma->selected_range_end; + int view_row = e_sorter_model_to_sorted(selection->sorter, row); + + esma_real_select_single_row(selection, esma->selection_start_row); esma->cursor_row = esma->selection_start_row; - esma_move_selection_end(selection, row); + esma_real_move_selection_end(selection, row); + + esma->selected_range_end = view_row; + if (selected_range_end != -1 && view_row != -1) { + if (selected_range_end == view_row - 1 || + selected_range_end == view_row + 1) { + e_selection_model_selection_row_changed(selection, selected_range_end); + e_selection_model_selection_row_changed(selection, view_row); + return; + } + } + e_selection_model_selection_changed(selection); } int @@ -443,6 +497,9 @@ e_selection_model_array_init (ESelectionModelArray *esma) esma->selection_start_row = 0; esma->cursor_row = -1; esma->cursor_col = -1; + + esma->selected_row = -1; + esma->selected_range_end = -1; } static void |