gladish: update world tree selection when currently selected view is destroyed

This commit is contained in:
Nedko Arnaudov 2009-08-22 16:30:47 +03:00
parent e9c49c24a7
commit c01598c0be
3 changed files with 30 additions and 14 deletions

View File

@ -146,11 +146,6 @@ static void detach_canvas(struct graph_view * view_ptr)
}
}
static void activate_view_internal(struct graph_view * view_ptr)
{
attach_canvas(view_ptr);
}
#define view_ptr ((struct graph_view *)view)
void destroy_view(graph_view_handle view)
@ -158,7 +153,7 @@ void destroy_view(graph_view_handle view)
list_del(&view_ptr->siblings);
if (!list_empty(&g_views))
{
activate_view_internal(list_entry(g_views.next, struct graph_view, siblings));
world_tree_activate((graph_view_handle)list_entry(g_views.next, struct graph_view, siblings));
}
detach_canvas(view_ptr);
@ -174,7 +169,7 @@ void destroy_view(graph_view_handle view)
void activate_view(graph_view_handle view)
{
activate_view_internal(view_ptr);
attach_canvas(view_ptr);
}
const char * get_view_name(graph_view_handle view)

View File

@ -451,22 +451,42 @@ void world_tree_add(graph_view_handle view, bool force_activate)
}
}
void world_tree_remove(graph_view_handle view)
static bool find_view(graph_view_handle view, GtkTreeIter * iter_ptr)
{
GtkTreeIter iter;
graph_view_handle view2;
if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(g_treestore), &iter))
if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(g_treestore), iter_ptr))
{
do
{
gtk_tree_model_get(GTK_TREE_MODEL(g_treestore), &iter, COL_VIEW, &view2, -1);
gtk_tree_model_get(GTK_TREE_MODEL(g_treestore), iter_ptr, COL_VIEW, &view2, -1);
if (view == view2)
{
gtk_tree_store_remove(g_treestore, &iter);
return;
return true;
}
}
while (gtk_tree_model_iter_next(GTK_TREE_MODEL(g_treestore), &iter));
while (gtk_tree_model_iter_next(GTK_TREE_MODEL(g_treestore), iter_ptr));
}
return false;
}
void world_tree_remove(graph_view_handle view)
{
GtkTreeIter iter;
if (find_view(view, &iter))
{
gtk_tree_store_remove(g_treestore, &iter);
}
}
void world_tree_activate(graph_view_handle view)
{
GtkTreeIter iter;
if (find_view(view, &iter))
{
gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(g_world_tree_widget)), &iter);
}
}

View File

@ -33,5 +33,6 @@ void world_tree_init(void);
void world_tree_add(graph_view_handle view, bool force_activate);
void world_tree_remove(graph_view_handle view);
void world_tree_activate(graph_view_handle view);
#endif // #ifndef WORLD_TREE_H__D786489B_E400_4E92_85C7_2BAE606DE56D__INCLUDED