diff options
author | Tristan Van Berkom <tvb@src.gnome.org> | 2004-12-28 23:44:03 +0000 |
---|---|---|
committer | Tristan Van Berkom <tvb@src.gnome.org> | 2004-12-28 23:44:03 +0000 |
commit | 5f89e75bd38229ddbf8ae176560b13591822d876 (patch) | |
tree | 2d1b2e28f6c60bbc8ffab86238de117afe5e0ca4 | |
parent | ed6fecf456740f75b87368e76099d9b4e96215b8 (diff) | |
download | glade-5f89e75bd38229ddbf8ae176560b13591822d876.tar.gz |
Selection on treeview now follows project->selection.
* src/glade-project-view.c: Selection on treeview now follows
project->selection.
* src/glade-project.c: glade_util_add_selection is now a side effect,
glade_util_has_selection is dropped in favor of
g_list_find (project, object) != NULL.
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | src/glade-project-view.c | 68 | ||||
-rw-r--r-- | src/glade-project.c | 26 |
3 files changed, 58 insertions, 47 deletions
@@ -1,3 +1,12 @@ +2004-12-29 Tristan Van Berkom <tvb@cvs.gnome.org> + + * src/glade-project-view.c: Selection on treeview now follows + project->selection. + + * src/glade-project.c: glade_util_add_selection is now a side effect, + glade_util_has_selection is dropped in favor of + g_list_find (project, object) != NULL. + 2004-12-28 Tristan Van Berkom <tvb@cvs.gnome.org> * src/glade-command.[ch]: @@ -22,7 +31,7 @@ * src/glade-widget.c: - No need to free property lists in dispose if we do that in finalize. - Fixed leak where widget creation is canceled by the query popup - (Verified that widget is not in a container or in the project at + (Verified that widget is not in a container or in the project at unref time, safe). 2004-12-22 Gustavo Noronha Silva <kov@debian.org> diff --git a/src/glade-project-view.c b/src/glade-project-view.c index 170f0e15..3a01c24a 100644 --- a/src/glade-project-view.c +++ b/src/glade-project-view.c @@ -344,47 +344,39 @@ static void glade_project_view_selection_update (GladeProjectView *view, GladeProject *project) { -#if 0 + GladeWidget *widget; + GladeWidgetClass *class; GtkTreeSelection *selection; -#endif - GList *list; + GtkTreeModel *model; + GtkTreeIter *iter; + GList *list; g_return_if_fail (GLADE_IS_PROJECT_VIEW (view)); g_return_if_fail (GLADE_IS_PROJECT (project)); g_return_if_fail (view->project == project); - list = glade_project_selection_get (project); - -#if 0 - g_ print ("Update dude\n"); - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view->tree_view)); - - g_return_if_fail (GTK_IS_TREE_SELECTION (selection)); + model = GTK_TREE_MODEL (view->model); - GladeWidgetClass *class; - GtkTreeModel *model; - GtkTreeIter *iter; + g_return_if_fail (selection != NULL); - class = glade_widget_get_class (widget); - - if (view->is_list && !g_type_is_a (class->type, GTK_TYPE_WINDOW)) - return; - - model = GTK_TREE_MODEL (view->model); + gtk_tree_selection_unselect_all (selection); - iter = glade_project_view_find_iter_by_widget (model, - widget); + for (list = glade_project_selection_get (project); + list && list->data; list = list->next) + { + widget = glade_widget_get_from_gobject (G_OBJECT (list->data)); + class = glade_widget_get_class (widget); - if (iter) { - static gboolean warned = FALSE; - if (!warned) - g_print ("Update the cell. BUT HOW ??\n"); - warned = TRUE; - } + if (view->is_list && !g_type_is_a (class->type, GTK_TYPE_WINDOW)) + continue; - gtk_tree_store_remove (view->model, iter); -#endif + if ((iter = glade_project_view_find_iter_by_widget + (model, widget)) != NULL) + { + gtk_tree_selection_select_iter (selection, iter); + } + } } static void @@ -504,6 +496,15 @@ glade_project_view_button_press_cb (GtkWidget *widget, } static void +glade_project_view_row_cb (GtkTreeView *tree_view, + GtkTreeIter *iter, + GtkTreePath *path, + GladeProjectView *view) +{ + GLADE_PROJECT_VIEW_GET_CLASS (view)->selection_update (view, view->project); +} + +static void glade_project_view_cell_function (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *tree_model, @@ -605,17 +606,26 @@ glade_project_view_init (GladeProjectView *view) glade_project_view_add_columns (GTK_TREE_VIEW (view->tree_view)); + /* Show/Hide windows on double-click */ g_signal_connect (G_OBJECT (view->tree_view), "row-activated", G_CALLBACK (glade_project_view_item_activated_cb), NULL); + /* Update project selection */ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view->tree_view)); g_signal_connect_data (G_OBJECT (selection), "changed", G_CALLBACK (glade_project_view_selection_changed_cb), view, NULL, 0); + /* Popup menu */ g_signal_connect (G_OBJECT (view->tree_view), "button-press-event", G_CALLBACK (glade_project_view_button_press_cb), view); + /* Refresh selection */ + g_signal_connect (G_OBJECT (view->tree_view), "row-expanded", + G_CALLBACK (glade_project_view_row_cb), view); + g_signal_connect (G_OBJECT (view->tree_view), "row-collapsed", + G_CALLBACK (glade_project_view_row_cb), view); + view->updating_selection = FALSE; } diff --git a/src/glade-project.c b/src/glade-project.c index 4b1cf205..b1340881 100644 --- a/src/glade-project.c +++ b/src/glade-project.c @@ -577,13 +577,9 @@ glade_project_selection_remove (GladeProject *project, g_return_if_fail (GLADE_IS_PROJECT (project)); g_return_if_fail (G_IS_OBJECT (object)); - if (!glade_util_has_selection (object)) - return; - - glade_util_remove_selection (object); - - if (project) + if ((g_list_find (project->selection, object)) != NULL) { + glade_util_remove_selection (object); project->selection = g_list_remove (project->selection, object); if (emit_signal) glade_project_selection_changed (project); @@ -608,13 +604,9 @@ glade_project_selection_add (GladeProject *project, g_return_if_fail (GLADE_IS_PROJECT (project)); g_return_if_fail (G_IS_OBJECT (object)); - if (glade_util_has_selection (object)) - return; - - glade_util_add_selection (object); - - if (project) + if ((g_list_find (project->selection, object)) == NULL) { + glade_util_add_selection (object); project->selection = g_list_prepend (project->selection, object); if (emit_signal) glade_project_selection_changed (project); @@ -639,11 +631,11 @@ glade_project_selection_set (GladeProject *project, g_return_if_fail (GLADE_IS_PROJECT (project)); g_return_if_fail (G_IS_OBJECT (object)); - if (glade_util_has_selection (object)) - return; - - glade_project_selection_clear (project, FALSE); - glade_project_selection_add (project, object, emit_signal); + if ((g_list_find (project->selection, object)) == NULL) + { + glade_project_selection_clear (project, FALSE); + glade_project_selection_add (project, object, emit_signal); + } } /** |