summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tvb@src.gnome.org>2004-12-28 23:44:03 +0000
committerTristan Van Berkom <tvb@src.gnome.org>2004-12-28 23:44:03 +0000
commit5f89e75bd38229ddbf8ae176560b13591822d876 (patch)
tree2d1b2e28f6c60bbc8ffab86238de117afe5e0ca4
parented6fecf456740f75b87368e76099d9b4e96215b8 (diff)
downloadglade-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--ChangeLog11
-rw-r--r--src/glade-project-view.c68
-rw-r--r--src/glade-project.c26
3 files changed, 58 insertions, 47 deletions
diff --git a/ChangeLog b/ChangeLog
index e2c4e056..81bbeeae 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);
+ }
}
/**