return TRUE;
}
-void vik_treeview_select_iter ( VikTreeview *vt, GtkTreeIter *iter )
+/* Option to ensure visible */
+void vik_treeview_select_iter ( VikTreeview *vt, GtkTreeIter *iter, gboolean view_all )
{
- gtk_tree_selection_select_iter ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( vt ) ), iter );
+ GtkTreeView *tree_view = GTK_TREE_VIEW ( vt );
+ GtkTreePath *path;
+
+ if ( view_all ) {
+ path = gtk_tree_model_get_path ( gtk_tree_view_get_model (tree_view), iter );
+ gtk_tree_view_expand_to_path ( tree_view, path );
+ }
+
+ gtk_tree_selection_select_iter ( gtk_tree_view_get_selection ( tree_view ), iter );
+
+ if ( view_all ) {
+ gtk_tree_view_scroll_to_cell ( tree_view,
+ path,
+ gtk_tree_view_get_expander_column (tree_view),
+ FALSE,
+ 0.0, 0.0 );
+ }
}
gboolean vik_treeview_get_selected_iter ( VikTreeview *vt, GtkTreeIter *iter )
gpointer vik_treeview_item_get_parent ( VikTreeview *vt, GtkTreeIter *iter );
-void vik_treeview_select_iter ( VikTreeview *vt, GtkTreeIter *iter );
+void vik_treeview_select_iter ( VikTreeview *vt, GtkTreeIter *iter, gboolean view_all );
gboolean vik_treeview_get_selected_iter ( VikTreeview *vt, GtkTreeIter *iter );
void vik_treeview_item_set_name ( VikTreeview *vt, GtkTreeIter *iter, const gchar *to );
{
vik_viewport_set_center_coord ( vik_layers_panel_get_viewport(VIK_LAYERS_PANEL(layer_and_vlp[1])), &(wp->coord) );
vik_layers_panel_emit_update ( VIK_LAYERS_PANEL(layer_and_vlp[1]) );
- vik_treeview_select_iter ( VIK_LAYER(layer_and_vlp[0])->vt, g_hash_table_lookup ( VIK_TRW_LAYER(layer_and_vlp[0])->waypoints_iters, upname ) );
+ vik_treeview_select_iter ( VIK_LAYER(layer_and_vlp[0])->vt, g_hash_table_lookup ( VIK_TRW_LAYER(layer_and_vlp[0])->waypoints_iters, upname ), TRUE );
break;
}
#endif
// Actual setting of visibility dependent on the waypoint
vik_treeview_item_set_visible ( VIK_LAYER(vtl)->vt, iter, wp->visible );
- vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, iter );
+ vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, iter, TRUE );
g_hash_table_insert ( vtl->waypoints_iters, name, iter );
}
}
#endif
// Actual setting of visibility dependent on the track
vik_treeview_item_set_visible ( VIK_LAYER(vtl)->vt, iter, t->visible );
- vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, iter );
+ vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, iter, TRUE );
g_hash_table_insert ( vtl->tracks_iters, name, iter );
}
}
vtl->current_wp_name = params.closest_wp_name;
if ( params.closest_wp )
- vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, g_hash_table_lookup ( vtl->waypoints_iters, vtl->current_wp_name ) );
+ vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, g_hash_table_lookup ( vtl->waypoints_iters, vtl->current_wp_name ), TRUE );
/* could make it so don't update if old WP is off screen and new is null but oh well */
vik_layer_emit_update ( VIK_LAYER(vtl) );
{
vtl->current_tpl = params.closest_tpl;
vtl->current_tp_track_name = params.closest_track_name;
- vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, g_hash_table_lookup ( vtl->tracks_iters, vtl->current_tp_track_name ) );
+ vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, g_hash_table_lookup ( vtl->tracks_iters, vtl->current_tp_track_name ), TRUE );
trw_layer_tpwin_init ( vtl );
vik_layer_emit_update ( VIK_LAYER(vtl) );
return TRUE;