Mercurial > dwindows
comparison gtk3/dw.c @ 1330:c63069148357
Mostly fixed dw_listbox_set_top() on GTK3.
It still doesn't seem to want to scroll to the very last line though.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Thu, 10 Nov 2011 14:24:37 +0000 |
parents | e4ef8d86dfc4 |
children | 08de3c1f4ae4 |
comparison
equal
deleted
inserted
replaced
1329:19bfcdbab74e | 1330:c63069148357 |
---|---|
9138 { | 9138 { |
9139 GtkWidget *tmp = (GtkWidget *)g_object_get_data(G_OBJECT(handle), "_dw_user"); | 9139 GtkWidget *tmp = (GtkWidget *)g_object_get_data(G_OBJECT(handle), "_dw_user"); |
9140 if(tmp) | 9140 if(tmp) |
9141 handle2 = tmp; | 9141 handle2 = tmp; |
9142 } | 9142 } |
9143 | |
9144 /* Make sure it is the correct tree type */ | 9143 /* Make sure it is the correct tree type */ |
9145 if(handle2 && GTK_IS_TREE_VIEW(handle2) && g_object_get_data(G_OBJECT(handle2), "_dw_tree_type") == GINT_TO_POINTER(_DW_TREE_TYPE_LISTBOX)) | 9144 if(handle2 && GTK_IS_TREE_VIEW(handle2) && g_object_get_data(G_OBJECT(handle2), "_dw_tree_type") == GINT_TO_POINTER(_DW_TREE_TYPE_LISTBOX)) |
9146 { | 9145 { |
9147 GtkAdjustment *adjust = gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(handle2)); | 9146 GtkAdjustment *adjust = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(handle)); |
9148 GtkListStore *store = (GtkListStore *)gtk_tree_view_get_model(GTK_TREE_VIEW(handle2)); | 9147 GtkListStore *store = (GtkListStore *)gtk_tree_view_get_model(GTK_TREE_VIEW(handle2)); |
9149 | 9148 |
9150 if(store && adjust) | 9149 if(store && adjust) |
9151 { | 9150 { |
9152 /* Get the number of children at the top level */ | 9151 /* Get the number of children at the top level */ |
9153 gint rowcount = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), NULL); | 9152 gint rowcount = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), NULL); |
9154 gdouble upper = gtk_adjustment_get_upper(adjust); | 9153 gdouble pagesize = gtk_adjustment_get_page_size(adjust); |
9154 gdouble upper = gtk_adjustment_get_upper(adjust) - pagesize; | |
9155 gdouble lower = gtk_adjustment_get_lower(adjust); | 9155 gdouble lower = gtk_adjustment_get_lower(adjust); |
9156 gdouble change; | 9156 gdouble change; |
9157 | 9157 |
9158 /* Safety check */ | 9158 /* Safety check */ |
9159 if(rowcount < 1) | 9159 if(rowcount < 2) |
9160 { | 9160 { |
9161 DW_MUTEX_UNLOCK; | 9161 DW_MUTEX_UNLOCK; |
9162 return; | 9162 return; |
9163 } | 9163 } |
9164 | |
9165 /* Verify the range */ | |
9166 rowcount--; | |
9167 if(top > rowcount) | |
9168 top = rowcount; | |
9164 | 9169 |
9165 change = ((gdouble)top/(gdouble)rowcount) * (upper - lower); | 9170 change = ((gdouble)top/(gdouble)rowcount) * (upper - lower); |
9166 | 9171 |
9167 gtk_adjustment_set_value(adjust, change + lower); | 9172 gtk_adjustment_set_value(adjust, change + lower); |
9168 } | 9173 } |