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 }