Esc removes markers in stages. Temporary markers are removed first (if any) then...
authorIan Thompson <quornian@googlemail.com>
Sat, 16 Aug 2008 14:38:08 +0000 (14:38 +0000)
committerIan Thompson <quornian@googlemail.com>
Sat, 16 Aug 2008 14:38:08 +0000 (14:38 +0000)
source/blender/blenkernel/BKE_text.h
source/blender/blenkernel/intern/text.c
source/blender/src/drawtext.c

index 0094030e757e56c4f1856c507662e05c93eca7ee..a80f3cec6c1de1b4997948e6613a6937fd1c62c9 100644 (file)
@@ -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_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);
 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);
index db5b568f04344c9e2778fce9937dcba02488091c..451642c4670dd591f6fab00e284dc6aace9c96d8 100644 (file)
@@ -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 */
 
 /* 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);
        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;
        
        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) ||
                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);
                        BLI_freelinkN(&text->markers, marker);
+                       cleared= 1;
+               }
        }
        }
+       return cleared;
 }
 
 /* Clears all markers with at least the specified flags set (useful for
    clearing temporary markers) */
 }
 
 /* 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;
        TextMarker *marker, *next;
+       short cleared= 0;
        
        for (marker=text->markers.first; marker; marker=next) {
                next= marker->next;
 
        
        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);
                        BLI_freelinkN(&text->markers, marker);
+                       cleared= 1;
+               }
        }
        }
+       return cleared;
 }
 
 /* Finds the marker at the specified line and cursor position with at least the
 }
 
 /* Finds the marker at the specified line and cursor position with at least the
index 15bf97f19f748d7187bda6a735c5a6920e808be5..3c2016630721aa49188c093308ddde2fa8864a82 100644 (file)
@@ -2483,6 +2483,12 @@ static short do_markers(SpaceText *st, char ascii, unsigned short evnt, short va
                                draw= 1;
                                swallow= 1;
                        }
                                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;
        }
                }
                if (!swallow) return 0;
        }
@@ -3113,9 +3119,6 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
                        do_draw= 1;
                        pop_space_text(st);
                        break;
                        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();
                case BACKSPACEKEY:
                        if (text && text->id.lib) {
                                error_libdata();