comparison src/gtkimhtml.c @ 10795:096c8a65d3fc

[gaim-migrate @ 12438] ok, I hope this fixes the looping problems. committer: Tailor Script <tailor@pidgin.im>
author Tim Ringenbach <marv@pidgin.im>
date Fri, 08 Apr 2005 14:56:58 +0000
parents d34054fcab50
children 5335eb2b8b95
comparison
equal deleted inserted replaced
10794:d34054fcab50 10795:096c8a65d3fc
527 gtk_imhtml_expose_event (GtkWidget *widget, 527 gtk_imhtml_expose_event (GtkWidget *widget,
528 GdkEventExpose *event) 528 GdkEventExpose *event)
529 { 529 {
530 GtkTextIter start, end, cur; 530 GtkTextIter start, end, cur;
531 int buf_x, buf_y; 531 int buf_x, buf_y;
532 GSList *tags, *l;
533 GdkRectangle visible_rect; 532 GdkRectangle visible_rect;
534 GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(event->window)); 533 GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(event->window));
535 GdkColor gcolor; 534 GdkColor gcolor;
536 535
537 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(widget), &visible_rect); 536 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(widget), &visible_rect);
575 574
576 575
577 cur = start; 576 cur = start;
578 577
579 while (gtk_text_iter_in_range(&cur, &start, &end)) { 578 while (gtk_text_iter_in_range(&cur, &start, &end)) {
580 tags = gtk_text_iter_get_tags(&cur); 579 GSList *tags = gtk_text_iter_get_tags(&cur);
580 GSList *l;
581 581
582 gaim_debug_info("gtkimhtml", "cur = %d, start = %d, end = %d\n", 582 gaim_debug_info("gtkimhtml", "cur = %d, start = %d, end = %d\n",
583 gtk_text_iter_get_offset(&cur), gtk_text_iter_get_offset(&start), 583 gtk_text_iter_get_offset(&cur), gtk_text_iter_get_offset(&start),
584 gtk_text_iter_get_offset(&end)); 584 gtk_text_iter_get_offset(&end));
585 585
603 &tag_area.x, 603 &tag_area.x,
604 &tag_area.y); 604 &tag_area.y);
605 rect.x = visible_rect.x; 605 rect.x = visible_rect.x;
606 rect.y = tag_area.y; 606 rect.y = tag_area.y;
607 607
608 while (!gtk_text_iter_is_end(&cur) && gtk_text_iter_begins_tag(&cur, tag)) 608 do
609 gtk_text_iter_forward_to_tag_toggle(&cur, tag); 609 gtk_text_iter_forward_to_tag_toggle(&cur, tag);
610 while (!gtk_text_iter_is_end(&cur) && gtk_text_iter_begins_tag(&cur, tag));
611
610 gtk_text_view_get_iter_location(GTK_TEXT_VIEW(widget), &cur, &tag_area); 612 gtk_text_view_get_iter_location(GTK_TEXT_VIEW(widget), &cur, &tag_area);
611 gtk_text_view_buffer_to_window_coords(GTK_TEXT_VIEW(widget), 613 gtk_text_view_buffer_to_window_coords(GTK_TEXT_VIEW(widget),
612 GTK_TEXT_WINDOW_TEXT, 614 GTK_TEXT_WINDOW_TEXT,
613 tag_area.x, 615 tag_area.x,
614 tag_area.y, 616 tag_area.y,
632 gc, 634 gc,
633 TRUE, 635 TRUE,
634 rect.x, rect.y, rect.width, rect.height); 636 rect.x, rect.y, rect.width, rect.height);
635 gaim_debug_info("gtkimhtml", "drawing rect at %d,%d to %d,%d\n", 637 gaim_debug_info("gtkimhtml", "drawing rect at %d,%d to %d,%d\n",
636 rect.x, rect.y, rect.x+rect.width, rect.y+rect.height); 638 rect.x, rect.y, rect.x+rect.width, rect.y+rect.height);
637 gtk_text_iter_backward_char(&cur); 639 gtk_text_iter_backward_char(&cur); /* go back one, in case the end is the begining is the end
640 * note that above, we always moved cur ahead by at least
641 * one character */
638 break; 642 break;
639 } 643 }
640 644
641 g_slist_free(tags); 645 g_slist_free(tags);
642 while (gtk_text_iter_forward_to_tag_toggle(&cur, NULL) && gtk_text_iter_begins_tag(&cur, NULL)); 646
643 } 647 /* loop until another tag begins, or no tag begins */
644 648 while (gtk_text_iter_forward_to_tag_toggle(&cur, NULL) &&
649 !gtk_text_iter_is_end(&cur) &&
650 !gtk_text_iter_begins_tag(&cur, NULL));
651 }
652
645 gdk_gc_unref(gc); 653 gdk_gc_unref(gc);
646 654
647 if (GTK_WIDGET_CLASS (parent_class)->expose_event) 655 if (GTK_WIDGET_CLASS (parent_class)->expose_event)
648 return (* GTK_WIDGET_CLASS (parent_class)->expose_event) 656 return (* GTK_WIDGET_CLASS (parent_class)->expose_event)
649 (widget, event); 657 (widget, event);