summaryrefslogtreecommitdiff
path: root/gtk/gtktext.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>1999-02-21 18:02:14 +0000
committerOwen Taylor <otaylor@src.gnome.org>1999-02-21 18:02:14 +0000
commit58e63f08aeb2a9496b9ce62b44567ea13185f3f3 (patch)
treef508699e7ea28aee9c513d1f53eab261ca09d709 /gtk/gtktext.c
parentb0558e089e8e06a4ed2e28ee79e2c88f1c4c0570 (diff)
downloadgtk+-58e63f08aeb2a9496b9ce62b44567ea13185f3f3.tar.gz
Revise algorithm for scrolling backwards. This one might actually work
Sun Feb 21 11:39:06 1999 Owen Taylor <otaylor@redhat.com> * gtk/gtktext.c (find_line_containing_point): Revise algorithm for scrolling backwards. This one might actually work with one-line-high Text widgets. * gtk/gtkmain.c: Removed a misplaced comment, a few formatting cleanups.
Diffstat (limited to 'gtk/gtktext.c')
-rw-r--r--gtk/gtktext.c32
1 files changed, 16 insertions, 16 deletions
diff --git a/gtk/gtktext.c b/gtk/gtktext.c
index 6e02d0b792..312c5b140e 100644
--- a/gtk/gtktext.c
+++ b/gtk/gtktext.c
@@ -3562,24 +3562,24 @@ find_line_containing_point (GtkText* text, guint point,
gint height;
text->current_line = NULL;
-
- if (!text->line_start_cache->next)
- {
- /* @@@ Its visible, right? */
- text->current_line = text->line_start_cache;
- return;
- }
-
- while ( ( scroll && (text->first_cut_pixels != 0) &&
- (CACHE_DATA(text->line_start_cache->next).start.index > point) ) ||
- ( (text->first_cut_pixels == 0) &&
- (CACHE_DATA(text->line_start_cache).start.index > point) ) )
+
+ TEXT_SHOW (text);
+
+ /* Scroll backwards until the point is on screen
+ */
+ while (CACHE_DATA(text->line_start_cache).start.index > point)
+ scroll_int (text, - LINE_HEIGHT(CACHE_DATA(text->line_start_cache)));
+
+ /* Now additionally try to make sure that the point is fully on screen
+ */
+ if (scroll)
{
- g_assert (text->line_start_cache->next);
- scroll_int (text, - LINE_HEIGHT(CACHE_DATA(text->line_start_cache->next)));
+ while (text->first_cut_pixels != 0 &&
+ text->line_start_cache->next &&
+ CACHE_DATA(text->line_start_cache->next).start.index > point)
+ scroll_int (text, - LINE_HEIGHT(CACHE_DATA(text->line_start_cache->next)));
}
-
- TEXT_SHOW (text);
+
gdk_window_get_size (text->text_area, NULL, &height);
for (cache = text->line_start_cache; cache; cache = cache->next)