[gimp] Make sure don't lose the selected item when the tree get collapsed
- From: Michael Natterer <mitch src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gimp] Make sure don't lose the selected item when the tree get collapsed
- Date: Sun, 13 Sep 2009 20:43:42 +0000 (UTC)
commit fd224caa103bc5c4b433b64444e23e42cd4ee86b
Author: Michael Natterer <mitch gimp org>
Date: Sun Sep 13 22:39:01 2009 +0200
Make sure don't lose the selected item when the tree get collapsed
Collapsing the tree gets rid of any selection in the collapsed branch,
and doesn't restore it upon exapnding. So connect to the
GtkTreeView::row-expanded signal and select the active item manually.
Had to add evil hack that makes sure we don't try this on child items
that are currently being inserted, because our parent class has no
choice but to expand the tree while the item is not completely
inserted in all subclasses yet.
app/widgets/gimpitemtreeview.c | 40 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 40 insertions(+), 0 deletions(-)
---
diff --git a/app/widgets/gimpitemtreeview.c b/app/widgets/gimpitemtreeview.c
index 3d51ccd..060c503 100644
--- a/app/widgets/gimpitemtreeview.c
+++ b/app/widgets/gimpitemtreeview.c
@@ -88,6 +88,8 @@ struct _GimpItemTreeViewPriv
GimpTreeHandler *visible_changed_handler;
GimpTreeHandler *linked_changed_handler;
GimpTreeHandler *lock_content_changed_handler;
+
+ gboolean inserting_item; /* EEK */
};
@@ -186,6 +188,11 @@ static void gimp_item_tree_view_toggle_clicked (GtkCellRendererToggle *togg
GimpItemTreeView *view,
GimpUndoType undo_type);
+static void gimp_item_tree_view_row_expanded (GtkTreeView *tree_view,
+ GtkTreeIter *iter,
+ GtkTreePath *path,
+ GimpItemTreeView *item_view);
+
G_DEFINE_TYPE_WITH_CODE (GimpItemTreeView, gimp_item_tree_view,
GIMP_TYPE_CONTAINER_TREE_VIEW,
@@ -339,6 +346,10 @@ gimp_item_tree_view_constructor (GType type,
G_CALLBACK (gimp_item_tree_view_name_edited),
item_view);
+ g_signal_connect (tree_view->view, "row-expanded",
+ G_CALLBACK (gimp_item_tree_view_row_expanded),
+ tree_view);
+
column = gtk_tree_view_column_new ();
gtk_tree_view_insert_column (tree_view->view, column, 0);
@@ -903,9 +914,13 @@ gimp_item_tree_view_insert_item (GimpContainerView *view,
GimpItem *item = GIMP_ITEM (viewable);
GtkTreeIter *iter;
+ item_view->priv->inserting_item = TRUE;
+
iter = parent_view_iface->insert_item (view, viewable,
parent_insert_data, index);
+ item_view->priv->inserting_item = FALSE;
+
gtk_tree_store_set (GTK_TREE_STORE (tree_view->model), iter,
item_view->priv->model_column_visible,
gimp_item_get_visible (item),
@@ -1534,3 +1549,28 @@ gimp_item_tree_view_toggle_clicked (GtkCellRendererToggle *toggle,
gtk_tree_path_free (path);
}
+
+
+/* GtkTreeView callbacks */
+
+static void
+gimp_item_tree_view_row_expanded (GtkTreeView *tree_view,
+ GtkTreeIter *iter,
+ GtkTreePath *path,
+ GimpItemTreeView *item_view)
+{
+ /* don't select the item while it is being inserted */
+ if (! item_view->priv->inserting_item)
+ {
+ GimpItemTreeViewClass *item_view_class;
+ GimpItem *active_item;
+
+ item_view_class = GIMP_ITEM_TREE_VIEW_GET_CLASS (item_view);
+
+ active_item = item_view_class->get_active_item (item_view->priv->image);
+
+ if (active_item)
+ gimp_container_view_select_item (GIMP_CONTAINER_VIEW (item_view),
+ GIMP_VIEWABLE (active_item));
+ }
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]