static void remove_tag_cb (GbColorPickerDocumentMonitor *self, GtkTextTag *tag, GtkTextIter *start, GtkTextIter *end, GtkTextBuffer *buffer) { GtkTextTagTable *tag_table; g_autofree gchar *name = NULL; Position spos; Position epos; g_assert (GB_IS_COLOR_PICKER_DOCUMENT_MONITOR (self)); g_assert (GTK_IS_TEXT_BUFFER (buffer)); g_assert (GTK_IS_TEXT_TAG (tag)); position_save (&spos, start); position_save (&epos, end); tag_table = gtk_text_buffer_get_tag_table (GTK_TEXT_BUFFER (self->buffer)); g_object_get (G_OBJECT (tag), "name", &name, NULL); if (!dzl_str_empty0 (name) && g_str_has_prefix (name, COLOR_TAG_PREFIX) && gtk_text_tag_table_lookup (tag_table, name)) gtk_text_tag_table_remove (tag_table, tag); position_restore (&spos, buffer, start); position_restore (&epos, buffer, end); }
static void text_deleted_cb (GbColorPickerDocumentMonitor *self, GtkTextIter *begin, GtkTextIter *end, GtkTextBuffer *buffer) { GtkTextIter recolor_begin; GtkTextIter recolor_end; Position spos; Position epos; g_assert (GB_IS_COLOR_PICKER_DOCUMENT_MONITOR (self)); g_assert (GTK_IS_TEXT_BUFFER (buffer)); position_save (&spos, begin); position_save (&epos, end); self->remove_tag_handler_id = g_signal_connect_object (GTK_TEXT_BUFFER (self->buffer), "remove-tag", G_CALLBACK (remove_tag_cb), self, G_CONNECT_SWAPPED | G_CONNECT_AFTER); recolor_begin = *begin; gtk_text_iter_set_line_offset (&recolor_begin, 0); recolor_end = *end; if (!gtk_text_iter_ends_line (&recolor_end)) gtk_text_iter_forward_to_line_end (&recolor_end); /* FIXME: we only need to remove color tag */ gtk_text_buffer_remove_all_tags (buffer, &recolor_begin, &recolor_end); g_signal_handler_disconnect (GTK_TEXT_BUFFER (self->buffer), self->remove_tag_handler_id); position_restore (&spos, buffer, begin); position_restore (&epos, buffer, end); }
void view(void) { static byte mod; static unsigned k; static unsigned long delta; static byte i; load_headers(); in_buf=0; ateof=0; atstart=1; scrollbar_pos=0xa000+29; if(last==0) last=header_length; goto_pos(last); mod=1; ozcls(); while(1) { if(mod) { if(!backandforth)position_save(); show(); unbar(); scrollbar(); backandforth=mod=0; } switch(k=ozgetchblank()) { case KEY_LEFT: case KEY_BACKSPACE: #ifdef DEBUG putformatted(0,0,"positionptr=| numpositions=| ", positionptr,numpositions); ozgetch(); #endif if(positionptr<=1) break; goto_pos(positions[(--positionptr)-1]); if(!positionptr) positionptr=1; backandforth=mod=1; #ifdef DEBUG putformatted(0,0,"positionptr=| numpositions=| ", positionptr,numpositions); ozgetch(); #endif break; case KEY_RIGHT: #ifdef DEBUG putformatted(0,0,"positionptr=| numpositions=| ", positionptr,numpositions); ozgetch(); #endif if(positionptr>=numpositions) break; goto_pos(positions[positionptr]); positionptr++; backandforth=mod=1; #ifdef DEBUG putformatted(0,0,"positionptr=| numpositions=| ", positionptr,numpositions); ozgetch(); #endif break; case 'm': /* mark position */ if(numbookmarks>=MAX_BOOKMARKS) { for(i=0;i<MAX_BOOKMARKS-1;i++) { bookmarks[i]=bookmarks[i+1]; } numbookmarks--; } bookmarkptr=numbookmarks; bookmarks[numbookmarks++]=screen_offset+buffer_offset; bookmarksmod=1; break; case 'b': if(numbookmarks) { goto_pos(bookmarks[bookmarkptr]); if(bookmarkptr) bookmarkptr--; else bookmarkptr=numbookmarks-1; mod=1; } break; case 'r': show_bar=!show_bar; bookmarksmod=1; unbar(); scrollbar(); break; case 'h': case KEY_UPPER_MENU: case KEY_LOWER_MENU: dohelp(); ozcls(); mod=1; break; case 'i': _ozfilledbox(0,0,WIDTH,line_height,0); delta=screen_offset+buffer_offset-header_length; putformatted(0,0,"$ : ^/^=|%",filename, delta,length-header_length, (unsigned int)(delta*100/(length-header_length)) ); _ozfilledbox(0,0,WIDTH,line_height,XOR); ozgetchblank(); mod=1; ozcls(); break; case 'c': if(numbookmarks && ozwarn("Delete all bookmarks?",yn)==KEY_LOWER_ENTER ) { bookmarksmod=1; numbookmarks=0; } mod=1; ozcls(); break; case '-': case KEY_PAGEUP: for(i=0;i<num_lines-1;i++) { checkshiftup(); backline(); } mod=1; break; case 's': if(myfont) break; line_height++; if(line_height==11) line_height=8; if(line_height!=9) num_lines=80/line_height; else num_lines=9; bookmarksmod=1; mod=1; ozcls(); break; case KEY_PAGEDOWN: case KEY_LOWER_ENTER: case KEY_UPPER_ENTER: case KEY_RETURN: case ' ': for(i=0;i<num_lines-1;i++) { checkshiftdown(); forwardline(); } mod=1; break; case KEY_UP: checkshiftup(); if(!backline()) break; unbar(); ozscrolldown(line_height*30); dcompline(filebuf+screen_offset); puttextline(0); position_save(); scrollbar(); break; case KEY_DOWN: checkshiftdown(); if(forwardline()) { mod=1; showbot=1; unbar(); ozscroll(line_height*30); } break; case KEY_LEFT_SHIFT | MASKSHIFT: case KEY_RIGHT_SHIFT | MASKSHIFT: switch(ozgetch() & 0xF0FF) { case '-': ozclick(!ozgetclick()); ozsavekeysettings(); break; case KEY_PAGEUP: case KEY_UP: tenpercent(-1); mod=1; break; case KEY_PAGEDOWN: case KEY_DOWN: tenpercent(1); mod=1; break; } break; case KEY_UP | MASKSHIFT: case KEY_PAGEUP | MASKSHIFT: tenpercent(-1); mod=1; break; case KEY_PAGEDOWN | MASKSHIFT: case KEY_DOWN | MASKSHIFT: tenpercent(1); mod=1; break; case KEY_2ND: switch(ozgetch() & 0xF0FF ) { case '-': ozclick(!ozgetclick()); ozsavekeysettings(); break; case KEY_PAGEUP: case KEY_UP: goto_pos(header_length); mod=1; break; case KEY_PAGEDOWN: case KEY_DOWN: goto_pos(length); mod=1; break; } break; case KEY_LOWER_ESC: case KEY_UPPER_ESC: case KEY_MYPROGRAMS: exit(0); case KEY_MAIN: case KEY_CALENDAR: case KEY_TELEPHONE: case KEY_MEMO: ozexitto(k); case KEY_BACKLIGHT: oztogglelight(); break; } } }