diff options
author | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2005-10-20 07:44:53 +0000 |
---|---|---|
committer | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2005-10-20 07:44:53 +0000 |
commit | b9112be97d8a5d786658378212d3dd95dbff1ee9 (patch) | |
tree | 74917f71c3a9779f155740b3bee2f6fbf7a183c8 /src | |
parent | 36aecc8ea3dcab2bc0cc306414541672a689c760 (diff) |
textview.c: fixed a problem that the view was scrolled to top when it got focus.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@669 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src')
-rw-r--r-- | src/textview.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/textview.c b/src/textview.c index 43641078..9ee523a3 100644 --- a/src/textview.c +++ b/src/textview.c @@ -203,6 +203,9 @@ static void textview_popup_menu_activate_image_cb (GtkMenuItem *menuitem, gpointer data); +static void textview_adj_value_changed (GtkAdjustment *adj, + gpointer data); + static void textview_smooth_scroll_do (TextView *textview, gfloat old_value, gfloat last_value, @@ -282,6 +285,10 @@ TextView *textview_create(void) g_signal_connect(G_OBJECT(text), "populate-popup", G_CALLBACK(textview_populate_popup), textview); + g_signal_connect(G_OBJECT(GTK_TEXT_VIEW(text)->vadjustment), + "value-changed", + G_CALLBACK(textview_adj_value_changed), textview); + gtk_widget_show(scrolledwin); vbox = gtk_vbox_new(FALSE, 0); @@ -1484,11 +1491,17 @@ static void textview_smooth_scroll_do(TextView *textview, /* gdk_key_repeat_disable(); */ + g_signal_handlers_block_by_func(vadj, textview_adj_value_changed, + textview); + for (i = step; i <= change_value; i += step) { vadj->value = old_value + (up ? -i : i); g_signal_emit_by_name(G_OBJECT(vadj), "value_changed", 0); } + g_signal_handlers_unblock_by_func(vadj, textview_adj_value_changed, + textview); + vadj->value = last_value; g_signal_emit_by_name(G_OBJECT(vadj), "value_changed", 0); @@ -2044,6 +2057,13 @@ static void textview_popup_menu_activate_image_cb(GtkMenuItem *menuitem, g_free(src); } +static void textview_adj_value_changed(GtkAdjustment *adj, gpointer data) +{ + TextView *textview = (TextView *)data; + + gtk_text_view_place_cursor_onscreen(GTK_TEXT_VIEW(textview->text)); +} + static gboolean textview_uri_security_check(TextView *textview, RemoteURI *uri) { GtkTextBuffer *buffer; |