From a845dec7336c379d007832cbc5ff9abbb9fe1dab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Tue, 13 Jun 2017 14:20:30 +0200 Subject: view: introduce view_selections_normalize Dispose all invalid and merge all overlapping selections. --- view.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'view.c') diff --git a/view.c b/view.c index 262bdde..1233b24 100644 --- a/view.c +++ b/view.c @@ -1250,6 +1250,28 @@ bool view_selections_restore(Selection *s) { return true; } +void view_selections_normalize(View *view) { + Selection *prev = NULL; + Filerange range_prev = text_range_empty(); + for (Selection *s = view->selections, *next; s; s = next) { + next = s->next; + Filerange range = view_selections_get(s); + if (!text_range_valid(&range)) { + view_selections_dispose(s); + } else if (prev && text_range_overlap(&range_prev, &range)) { + range_prev = text_range_union(&range_prev, &range); + view_selections_dispose(s); + } else { + if (prev) + view_selections_set(prev, &range_prev); + range_prev = range; + prev = s; + } + } + if (prev) + view_selections_set(prev, &range_prev); +} + Text *view_text(View *view) { return view->text; } -- cgit v1.2.3