diff options
author | Ian Thompson <quornian@googlemail.com> | 2008-08-16 18:38:08 +0400 |
---|---|---|
committer | Ian Thompson <quornian@googlemail.com> | 2008-08-16 18:38:08 +0400 |
commit | 310a6e2179a9c55acbe3bdb833ff8420bd6eb216 (patch) | |
tree | 600444f8def0f5f7f5973c4ddb6b2e783d026365 /source/blender | |
parent | d1d1d2b8702230138d4fddbafa63ce1e66a7ea0c (diff) |
Esc removes markers in stages. Temporary markers are removed first (if any) then other markers follow.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/BKE_text.h | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/text.c | 16 | ||||
-rw-r--r-- | source/blender/src/drawtext.c | 9 |
3 files changed, 20 insertions, 9 deletions
diff --git a/source/blender/blenkernel/BKE_text.h b/source/blender/blenkernel/BKE_text.h index 0094030e757..a80f3cec6c1 100644 --- a/source/blender/blenkernel/BKE_text.h +++ b/source/blender/blenkernel/BKE_text.h @@ -102,8 +102,8 @@ void txt_copy_clipboard (struct Text *text); void txt_paste_clipboard (struct Text *text); void txt_add_marker (struct Text *text, struct TextLine *line, int start, int end, char clr[4], int flags); -void txt_clear_marker_region (struct Text *text, struct TextLine *line, int start, int end, int flags); -void txt_clear_markers (struct Text *text, int flags); +short txt_clear_marker_region (struct Text *text, struct TextLine *line, int start, int end, int flags); +short txt_clear_markers (struct Text *text, int flags); struct TextMarker *txt_find_marker (struct Text *text, struct TextLine *line, int curs, int flags); struct TextMarker *txt_find_marker_region (struct Text *text, struct TextLine *line, int start, int end, int flags); struct TextMarker *txt_prev_marker (struct Text *text, struct TextMarker *marker); diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c index db5b568f043..451642c4670 100644 --- a/source/blender/blenkernel/intern/text.c +++ b/source/blender/blenkernel/intern/text.c @@ -2727,9 +2727,10 @@ TextMarker *txt_find_marker_region(Text *text, TextLine *line, int start, int en /* Clears all markers on the specified line between two points with at least the specified flags set. If flags is zero, all markers will be cleared */ -void txt_clear_marker_region(Text *text, TextLine *line, int start, int end, int flags) { +short txt_clear_marker_region(Text *text, TextLine *line, int start, int end, int flags) { TextMarker *marker, *next; int lineno= txt_get_span(text->lines.first, line); + short cleared= 0; for (marker=text->markers.first; marker; marker=next) { next= marker->next; @@ -2739,22 +2740,29 @@ void txt_clear_marker_region(Text *text, TextLine *line, int start, int end, int else if (marker->lineno > lineno) break; if ((marker->start==marker->end && start<=marker->start && marker->start<=end) || - (marker->start<end && marker->end>start)) + (marker->start<end && marker->end>start)) { BLI_freelinkN(&text->markers, marker); + cleared= 1; + } } + return cleared; } /* Clears all markers with at least the specified flags set (useful for clearing temporary markers) */ -void txt_clear_markers(Text *text, int flags) { +short txt_clear_markers(Text *text, int flags) { TextMarker *marker, *next; + short cleared= 0; for (marker=text->markers.first; marker; marker=next) { next= marker->next; - if ((marker->flags & flags) == flags) + if ((marker->flags & flags) == flags) { BLI_freelinkN(&text->markers, marker); + cleared= 1; + } } + return cleared; } /* Finds the marker at the specified line and cursor position with at least the diff --git a/source/blender/src/drawtext.c b/source/blender/src/drawtext.c index 15bf97f19f7..3c201663072 100644 --- a/source/blender/src/drawtext.c +++ b/source/blender/src/drawtext.c @@ -2483,6 +2483,12 @@ static short do_markers(SpaceText *st, char ascii, unsigned short evnt, short va draw= 1; swallow= 1; } + } else if (evnt==ESCKEY) { + if (txt_clear_markers(text, TMARK_TEMP)) swallow= 1; + else if (txt_clear_markers(text, 0)) swallow= 1; + else return 0; + evnt= ascii= val= 0; + draw= 1; } if (!swallow) return 0; } @@ -3113,9 +3119,6 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt) do_draw= 1; pop_space_text(st); break; - case ESCKEY: - txt_clear_markers(text, TMARK_TEMP); - break; case BACKSPACEKEY: if (text && text->id.lib) { error_libdata(); |