diff gtk/dw.c @ 107:cd0e5cf92f6a

Rewrote the Windows packing code so it is more like OS/2 to improve window redrawing performance. Fixed problems with the tree widget on unix. lastselect needs to be set on the root tree widget... not the scrolled window!
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 17 Sep 2002 17:33:06 +0000
parents baaf4b04d284
children cf0115e38ef0
line wrap: on
line diff
--- a/gtk/dw.c	Fri Sep 06 22:49:10 2002 +0000
+++ b/gtk/dw.c	Tue Sep 17 17:33:06 2002 +0000
@@ -408,16 +408,21 @@
 void _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data)
 {
 	SignalHandler *work = (SignalHandler *)data;
+	GtkWidget *treeroot = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(child), "tree");
+
+	if(treeroot && GTK_IS_TREE(treeroot))
+	{
+		GtkWidget *lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(treeroot), "lastselect");
+		if(lastselect && GTK_IS_TREE_ITEM(lastselect))
+			gtk_tree_item_deselect(GTK_TREE_ITEM(lastselect));
+		gtk_object_set_data(GTK_OBJECT(treeroot), "lastselect", (gpointer)child);
+	}
 
 	if(work)
 	{
 		void (*treeselectfunc)(HWND, HWND, char *, void *, void *) = work->func;
 		char *text = (char *)gtk_object_get_data(GTK_OBJECT(child), "text");
 		void *itemdata = (char *)gtk_object_get_data(GTK_OBJECT(child), "itemdata");
-		GtkWidget *treeroot = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(child), "tree");
-
-		if(treeroot && GTK_IS_TREE(treeroot))
-			gtk_object_set_data(GTK_OBJECT(treeroot), "lastselect", (gpointer)child);
 		treeselectfunc(work->window, child, text, itemdata, work->data);
 	}
 }
@@ -2906,7 +2911,7 @@
 	GtkWidget *newitem, *tree, *subtree, *label, *hbox, *pixmap;
 	GdkPixmap *gdkpix;
 	GdkBitmap *gdkbmp = NULL;
-	int position = 0;
+	int position = -1;
 	int _locked_by_me = FALSE;
 
 	if(!handle)
@@ -3136,18 +3141,19 @@
  */
 void dw_tree_item_select(HWND handle, HWND item)
 {
-	GtkWidget *lastselect;
+	GtkWidget *lastselect, *tree;
 	int _locked_by_me = FALSE;
 
 	if(!handle || !item)
 		return;
 
 	DW_MUTEX_LOCK;
-	lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "lastselect");
+	tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle));
+	lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(tree), "lastselect");
 	if(lastselect && GTK_IS_TREE_ITEM(lastselect))
 		gtk_tree_item_deselect(GTK_TREE_ITEM(lastselect));
 	gtk_tree_item_select(GTK_TREE_ITEM(item));
-	gtk_object_set_data(GTK_OBJECT(handle), "lastselect", (gpointer)item);
+	gtk_object_set_data(GTK_OBJECT(tree), "lastselect", (gpointer)item);
 	DW_MUTEX_UNLOCK;
 }
 
@@ -3171,6 +3177,7 @@
 		DW_MUTEX_UNLOCK;
 		return;
 	}
+	gtk_object_set_data(GTK_OBJECT(tree), "lastselect", NULL);
 	gtk_tree_clear_items(GTK_TREE(tree), 0, 1000000);
 	DW_MUTEX_UNLOCK;
 }
@@ -3235,23 +3242,18 @@
 		return;
 	}
 
-	lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "lastselect");
+	lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(tree), "lastselect");
+
+	parenttree = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "parenttree");
 
 	if(lastselect == item)
 	{
-		if(lastselect && GTK_IS_WIDGET(lastselect))
-		{
-			parenttree = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(lastselect), "parenttree");
-			if(parenttree && GTK_IS_TREE(parenttree))
-				gtk_tree_unselect_child(GTK_TREE(parenttree), lastselect);
-		}
-		gtk_object_set_data(GTK_OBJECT(handle), "lastselect", NULL);
-	}
-
-	parenttree = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "parenttree");
+		gtk_tree_item_deselect(GTK_TREE_ITEM(lastselect));
+		gtk_object_set_data(GTK_OBJECT(tree), "lastselect", NULL);
+	}
 
 	if(parenttree && GTK_IS_WIDGET(parenttree))
-		gtk_tree_remove_item(GTK_TREE(parenttree), item);
+		gtk_container_remove(GTK_CONTAINER(parenttree), item);
 	DW_MUTEX_UNLOCK;
 }