# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1301691642 0 # Node ID 8f2722696a8efb1854f70ccb410cb2476b3161e5 # Parent 93ac372941c456390388fbb8be70cc43efd450a5 Implemented dw_container_scroll() for GTK3. diff -r 93ac372941c4 -r 8f2722696a8e gtk3/dw.c --- a/gtk3/dw.c Fri Apr 01 01:37:05 2011 +0000 +++ b/gtk3/dw.c Fri Apr 01 21:00:42 2011 +0000 @@ -6156,6 +6156,70 @@ */ void dw_container_scroll(HWND handle, int direction, long rows) { + GtkWidget *cont; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + cont = (GtkWidget *)g_object_get_data(G_OBJECT(handle), "_dw_user"); + + /* Make sure it is the correct tree type */ + if(cont && GTK_IS_TREE_VIEW(cont) && g_object_get_data(G_OBJECT(cont), "_dw_tree_type") == GINT_TO_POINTER(_DW_TREE_TYPE_CONTAINER)) + { + GtkAdjustment *adjust = gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(cont)); + + if(adjust) + { + gint rowcount = (gint)g_object_get_data(G_OBJECT(cont), "_dw_rowcount"); + gdouble currpos = gtk_adjustment_get_value(adjust); + gdouble upper = gtk_adjustment_get_upper(adjust); + gdouble lower = gtk_adjustment_get_lower(adjust); + gdouble change; + + /* Safety check */ + if(rowcount < 1) + { + DW_MUTEX_UNLOCK; + return; + } + + change = ((gdouble)rows/(gdouble)rowcount) * (upper - lower); + + switch(direction) + { + case DW_SCROLL_TOP: + { + gtk_adjustment_set_value(adjust, lower); + break; + } + case DW_SCROLL_BOTTOM: + { + gtk_adjustment_set_value(adjust, upper); + break; + } + case DW_SCROLL_UP: + { + gdouble newpos = currpos - change; + if(newpos < lower) + { + newpos = lower; + } + gtk_adjustment_set_value(adjust, newpos); + break; + } + case DW_SCROLL_DOWN: + { + gdouble newpos = currpos + change; + if(newpos > upper) + { + newpos = upper; + } + gtk_adjustment_set_value(adjust, newpos); + break; + } + } + } + } + DW_MUTEX_UNLOCK; } /*