tmpfp = g_fopen(mimeinfo->data.filename, "rb");
fseek(tmpfp, mimeinfo->offset, SEEK_SET);
debug_print("Viewing text content of type: %s (length: %d)\n", mimeinfo->subtype, mimeinfo->length);
- while ((fgets(buf, sizeof(buf), tmpfp) != NULL) &&
- (ftell(tmpfp) <= mimeinfo->offset + mimeinfo->length))
+ while ((ftell(tmpfp) < mimeinfo->offset + mimeinfo->length) &&
+ (fgets(buf, sizeof(buf), tmpfp) != NULL))
textview_write_line(textview, buf, conv);
fclose(tmpfp);
}
/* colorize this line */
if (head.next) {
- const gchar *normal_text = mybuf;
-
/* insert URIs */
- for (last = head.next; last != NULL;
- normal_text = last->ep, last = last->next) {
+ for (last = head.next; last != NULL; last = last->next) {
ClickableText *uri;
+ gint start_offset, end_offset;
+ gchar *tmp_str;
+ gchar old_char;
uri = g_new0(ClickableText, 1);
uri->uri = parser[last->pti].build_uri(last->bp,
last->ep);
-
- gtk_text_buffer_get_iter_at_offset(buffer, &start_iter, last->bp - mybuf + offset);
- gtk_text_buffer_get_iter_at_offset(buffer, &end_iter, last->ep - mybuf + offset);
+
+ tmp_str = mybuf;
+ old_char = tmp_str[last->ep - mybuf];
+ tmp_str[last->ep - mybuf] = '\0';
+ end_offset = g_utf8_strlen(tmp_str, -1);
+ tmp_str[last->ep - mybuf] = old_char;
+
+ old_char = tmp_str[last->bp - mybuf];
+ tmp_str[last->bp - mybuf] = '\0';
+ start_offset = g_utf8_strlen(tmp_str, -1);
+ tmp_str[last->bp - mybuf] = old_char;
+
+ gtk_text_buffer_get_iter_at_offset(buffer, &start_iter, start_offset + offset);
+ gtk_text_buffer_get_iter_at_offset(buffer, &end_iter, end_offset + offset);
uri->start = gtk_text_iter_get_offset(&start_iter);
GtkTextIter iter;
gchar buf[BUFFSIZE];
gchar *fg_color;
- gint quotelevel = -1;
+ gint quotelevel = -1, real_quotelevel = -1;
gchar quote_tag_str[10];
text = GTK_TEXT_VIEW(textview->text);
level is colored using a different color. */
if (prefs_common.enable_color
&& line_has_quote_char(buf, prefs_common.quote_chars)) {
- quotelevel = get_quote_level(buf, prefs_common.quote_chars);
-
+ real_quotelevel = get_quote_level(buf, prefs_common.quote_chars);
+ quotelevel = real_quotelevel;
/* set up the correct foreground color */
if (quotelevel > 2) {
/* recycle colors */
textview->is_in_signature = TRUE;
}
- if (quotelevel > -1) {
- if ( previousquotelevel != quotelevel ) {
+ if (real_quotelevel > -1) {
+ if ( previousquotelevel != real_quotelevel ) {
ClickableText *uri;
uri = g_new0(ClickableText, 1);
uri->uri = g_strdup("");
uri->filename = NULL;
uri->fg_color = g_strdup(fg_color);
uri->is_quote = TRUE;
- uri->quote_level = quotelevel;
+ uri->quote_level = real_quotelevel;
textview->uri_list =
g_slist_append(textview->uri_list, uri);
gtk_text_buffer_insert(buffer, &iter, " \n", -1);
- previousquotelevel = quotelevel;
+ previousquotelevel = real_quotelevel;
} else {
GSList *last = g_slist_last(textview->uri_list);
ClickableText *lasturi = (ClickableText *)last->data;
GtkTextIter iter;
GSList *tags;
GSList *cur;
-
+
gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(textview->text),
GTK_TEXT_WINDOW_WIDGET,
x, y, &bx, &by);
g_object_get(G_OBJECT(tag), "name", &name, NULL);
- if ((!strcmp(name, "link") || !strcmp(name, "qlink"))
+ if ((!strcmp(name, "link"))
&& textview_get_uri_range(textview, &iter, tag,
&start_iter, &end_iter)) {
&iter, tag,
&start_iter,
&end_iter);
- }
+ }
g_free(name);
-
if (uri)
break;
}
end_pos == uri_->end) {
uri = uri_;
break;
- } else if (start_pos == uri_->start ||
+ }
+ }
+ for (cur = textview->uri_list; uri == NULL && cur != NULL; cur = cur->next) {
+ ClickableText *uri_ = (ClickableText *)cur->data;
+ if (start_pos == uri_->start ||
end_pos == uri_->end) {
/* in case of contiguous links, textview_get_uri_range
* returns a broader range (start of 1st link to end
bevent = (GdkEventButton *) event;
/* doubleclick: open compose / add address / browser */
- if ((event->type == (qlink ? GDK_2BUTTON_PRESS:GDK_BUTTON_PRESS) && bevent->button == 1) ||
+ if (qlink && event->type == GDK_BUTTON_PRESS && bevent->button != 1) {
+ /* pass rightclick through */
+ return FALSE;
+ } else if ((event->type == (qlink ? GDK_2BUTTON_PRESS:GDK_BUTTON_PRESS) && bevent->button == 1) ||
bevent->button == 2 || bevent->button == 3) {
if (uri->filename && !g_ascii_strncasecmp(uri->filename, "sc://", 5)) {
MimeView *mimeview =
} else if (qlink && bevent->button == 1) {
textview_toggle_quote(textview, uri, FALSE);
return TRUE;
-
} else if (!g_ascii_strncasecmp(uri->uri, "mailto:", 7)) {
if (bevent->button == 3) {
g_object_set_data(