Mercurial > pidgin.yaz
comparison pidgin/plugins/timestamp.c @ 29361:eb024bcff0c9
timestamp: Do not scroll down if it was scrolled up.
Also, avoid an unnecessary lookup in the tag-table.
Fixes #10440.
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Thu, 04 Feb 2010 18:27:58 +0000 |
parents | ea62e934c80b |
children |
comparison
equal
deleted
inserted
replaced
29359:757a386a5c93 | 29361:eb024bcff0c9 |
---|---|
47 GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(imhtml)); | 47 GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(imhtml)); |
48 GtkTextIter iter; | 48 GtkTextIter iter; |
49 const char *mdate; | 49 const char *mdate; |
50 int y, height; | 50 int y, height; |
51 GdkRectangle rect; | 51 GdkRectangle rect; |
52 gboolean scrolled = FALSE; | |
53 GtkTextTag *tag; | |
52 | 54 |
53 /* display timestamp */ | 55 /* display timestamp */ |
54 mdate = purple_utf8_strftime(then == 0 ? "%H:%M" : "\n%H:%M", | 56 mdate = purple_utf8_strftime(then == 0 ? "%H:%M" : "\n%H:%M", |
55 localtime(&now)); | 57 localtime(&now)); |
56 gtk_text_buffer_get_end_iter(buffer, &iter); | 58 gtk_text_buffer_get_end_iter(buffer, &iter); |
57 | 59 |
58 if (gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(buffer), "TIMESTAMP") == NULL) | 60 /* is the view already scrolled? */ |
59 gtk_text_buffer_create_tag(buffer, "TIMESTAMP", | 61 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(imhtml), &rect); |
62 gtk_text_view_get_line_yrange(GTK_TEXT_VIEW(imhtml), &iter, &y, &height); | |
63 if (((y + height) - (rect.y + rect.height)) > height) | |
64 scrolled = TRUE; | |
65 | |
66 if ((tag = gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(buffer), "TIMESTAMP")) == NULL) | |
67 tag = gtk_text_buffer_create_tag(buffer, "TIMESTAMP", | |
60 "foreground", "#888888", "justification", GTK_JUSTIFY_CENTER, | 68 "foreground", "#888888", "justification", GTK_JUSTIFY_CENTER, |
61 "weight", PANGO_WEIGHT_BOLD, NULL); | 69 "weight", PANGO_WEIGHT_BOLD, NULL); |
62 | 70 |
63 gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, mdate, | 71 gtk_text_buffer_insert_with_tags(buffer, &iter, mdate, |
64 strlen(mdate), "TIMESTAMP", NULL); | 72 strlen(mdate), tag, NULL); |
65 | 73 |
66 /* scroll view if necessary */ | 74 /* scroll view if necessary */ |
67 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(imhtml), &rect); | 75 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(imhtml), &rect); |
68 gtk_text_view_get_line_yrange( | 76 gtk_text_view_get_line_yrange( |
69 GTK_TEXT_VIEW(imhtml), &iter, &y, &height); | 77 GTK_TEXT_VIEW(imhtml), &iter, &y, &height); |
70 if (((y + height) - (rect.y + rect.height)) > height && | 78 if (!scrolled && ((y + height) - (rect.y + rect.height)) > height && |
71 gtk_text_buffer_get_char_count(buffer)) { | 79 gtk_text_buffer_get_char_count(buffer)) { |
72 gboolean smooth = purple_prefs_get_bool( | 80 gboolean smooth = purple_prefs_get_bool( |
73 PIDGIN_PREFS_ROOT "/conversations/use_smooth_scrolling"); | 81 PIDGIN_PREFS_ROOT "/conversations/use_smooth_scrolling"); |
74 gtk_imhtml_scroll_to_end(GTK_IMHTML(imhtml), smooth); | 82 gtk_imhtml_scroll_to_end(GTK_IMHTML(imhtml), smooth); |
75 } | 83 } |