changeset 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 4b6799f3dbbc
children 108674099806
files gtk/dw.c win/dw.c
diffstat 2 files changed, 55 insertions(+), 47 deletions(-) [+]
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;
 }
 
--- a/win/dw.c	Fri Sep 06 22:49:10 2002 +0000
+++ b/win/dw.c	Tue Sep 17 17:33:06 2002 +0000
@@ -3363,7 +3363,7 @@
 
 	hwndframe = CreateWindow(FRAMECLASSNAME,
 							 "",
-							 WS_CHILD | WS_CLIPCHILDREN,
+							 WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN,
 							 0,0,2000,1000,
 							 DW_HWND_OBJECT,
 							 NULL,
@@ -3396,7 +3396,7 @@
 
 	hwndframe = CreateWindow(FRAMECLASSNAME,
 							 "",
-							 WS_CHILD,
+							 WS_VISIBLE | WS_CHILD,
 							 0,0,2000,1000,
 							 DW_HWND_OBJECT,
 							 NULL,
@@ -3433,7 +3433,7 @@
 
 	hwndframe = CreateWindow("MDICLIENT",
 							 "",
-							 WS_CHILD | WS_CLIPSIBLINGS,
+							 WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS,
 							 0,0,2000,1000,
 							 DW_HWND_OBJECT,
 							 NULL,
@@ -3451,7 +3451,8 @@
 {
 	return CreateWindow(STATICCLASSNAME,
 						"",
-						SS_BITMAP | WS_CHILD | WS_CLIPCHILDREN,
+						SS_BITMAP | WS_VISIBLE |
+						WS_CHILD | WS_CLIPCHILDREN,
 						0,0,2000,1000,
 						DW_HWND_OBJECT,
 						NULL,
@@ -3476,7 +3477,7 @@
 
 	tmp = CreateWindow(WC_TABCONTROL,
 					   "",
-					   WS_CHILD | WS_CLIPCHILDREN,
+					   WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN,
 					   0,0,2000,1000,
 					   DW_HWND_OBJECT,
 					   NULL,
@@ -3648,7 +3649,8 @@
 {
 	HWND tmp = CreateWindow(WC_LISTVIEW,
 							"",
-							WS_CHILD | LVS_REPORT | LVS_SHOWSELALWAYS |
+							WS_VISIBLE | WS_CHILD |
+							LVS_REPORT | LVS_SHOWSELALWAYS |
 							LVS_SHAREIMAGELISTS | WS_BORDER |
 							WS_CLIPCHILDREN,
 							0,0,2000,1000,
@@ -3682,7 +3684,8 @@
 {
 	HWND tmp = CreateWindow(WC_TREEVIEW,
 							"",
-							WS_CHILD | TVS_HASLINES | TVS_SHOWSELALWAYS |
+							WS_VISIBLE | WS_CHILD |
+							TVS_HASLINES | TVS_SHOWSELALWAYS |
 							TVS_HASBUTTONS | TVS_LINESATROOT |
 							WS_BORDER | WS_CLIPCHILDREN,
 							0,0,2000,1000,
@@ -3746,7 +3749,8 @@
 {
 	HWND tmp = CreateWindow(STATICCLASSNAME,
 							text,
-							BS_TEXT | WS_CHILD | WS_CLIPCHILDREN,
+							BS_TEXT | WS_VISIBLE |
+							WS_CHILD | WS_CLIPCHILDREN,
 							0,0,2000,1000,
 							DW_HWND_OBJECT,
 							(HMENU)id,
@@ -3766,7 +3770,8 @@
 {
 	HWND tmp = CreateWindow(STATICCLASSNAME,
 							text,
-							BS_TEXT | WS_CHILD | WS_CLIPCHILDREN,
+							BS_TEXT | WS_VISIBLE |
+							WS_CHILD | WS_CLIPCHILDREN,
 							0,0,2000,1000,
 							DW_HWND_OBJECT,
 							(HMENU)id,
@@ -3788,7 +3793,7 @@
 	HWND tmp = CreateWindowEx(WS_EX_CLIENTEDGE,
 							  EDITCLASSNAME,
 							  "",
-							  WS_BORDER |
+							  WS_VISIBLE | WS_BORDER |
 							  WS_VSCROLL | ES_MULTILINE |
 							  ES_WANTRETURN | WS_CHILD |
 							  WS_CLIPCHILDREN,
@@ -3826,7 +3831,7 @@
 							  text,
 							  ES_WANTRETURN | WS_CHILD |
 							  WS_BORDER | ES_AUTOHSCROLL |
-							  WS_CLIPCHILDREN,
+							  WS_VISIBLE | WS_CLIPCHILDREN,
 							  0,0,2000,1000,
 							  DW_HWND_OBJECT,
 							  (HMENU)id,
@@ -3855,7 +3860,7 @@
 							  EDITCLASSNAME,
 							  text,
 							  ES_WANTRETURN | WS_CHILD |
-							  ES_PASSWORD | WS_BORDER |
+							  ES_PASSWORD | WS_BORDER | WS_VISIBLE |
 							  ES_AUTOHSCROLL | WS_CLIPCHILDREN,
 							  0,0,2000,1000,
 							  DW_HWND_OBJECT,
@@ -3897,7 +3902,7 @@
 	HWND tmp = CreateWindow(COMBOBOXCLASSNAME,
 							text,
 							WS_CHILD | CBS_DROPDOWN | WS_VSCROLL |
-							WS_CLIPCHILDREN,
+							WS_CLIPCHILDREN | WS_VISIBLE,
 							0,0,2000,1000,
 							DW_HWND_OBJECT,
 							(HMENU)id,
@@ -3938,7 +3943,8 @@
 
 	HWND tmp = CreateWindow(BUTTONCLASSNAME,
 							text,
-							WS_CHILD | BS_PUSHBUTTON | WS_CLIPCHILDREN,
+							WS_CHILD | BS_PUSHBUTTON |
+							WS_VISIBLE | WS_CLIPCHILDREN,
 							0,0,2000,1000,
 							DW_HWND_OBJECT,
 							(HMENU)id,
@@ -3969,7 +3975,8 @@
 	tmp = CreateWindow(BUTTONCLASSNAME,
 					   "",
 					   WS_CHILD | BS_PUSHBUTTON |
-					   BS_BITMAP | WS_CLIPCHILDREN,
+					   BS_BITMAP | WS_CLIPCHILDREN |
+					   WS_VISIBLE,
 					   0,0,2000,1000,
 					   DW_HWND_OBJECT,
 					   (HMENU)id,
@@ -4001,7 +4008,7 @@
 	HWND buddy = CreateWindowEx(WS_EX_CLIENTEDGE,
 								EDITCLASSNAME,
 								text,
-								WS_CHILD | WS_BORDER |
+								WS_CHILD | WS_BORDER | WS_VISIBLE |
 								ES_NUMBER | WS_CLIPCHILDREN,
 								0,0,2000,1000,
 								DW_HWND_OBJECT,
@@ -4013,7 +4020,7 @@
 							  NULL,
 							  WS_CHILD | UDS_ALIGNRIGHT | WS_BORDER |
 							  UDS_ARROWKEYS | UDS_SETBUDDYINT |
-							  UDS_WRAP | UDS_NOTHOUSANDS,
+							  UDS_WRAP | UDS_NOTHOUSANDS | WS_VISIBLE,
 							  0,0,2000,1000,
 							  DW_HWND_OBJECT,
 							  (HMENU)id,
@@ -4048,7 +4055,7 @@
 	HWND tmp = CreateWindow(BUTTONCLASSNAME,
 							text,
 							WS_CHILD | BS_AUTORADIOBUTTON |
-							WS_CLIPCHILDREN,
+							WS_CLIPCHILDREN | WS_VISIBLE,
 							0,0,2000,1000,
 							DW_HWND_OBJECT,
 							(HMENU)id,
@@ -4076,7 +4083,7 @@
 {
 	HWND tmp = CreateWindow(TRACKBAR_CLASS,
 							"",
-							WS_CHILD | WS_CLIPCHILDREN |
+							WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE |
 							(vertical ? TBS_VERT : TBS_HORZ),
 							0,0,2000,1000,
 							DW_HWND_OBJECT,
@@ -4104,7 +4111,7 @@
 {
 	return CreateWindow(PROGRESS_CLASS,
 						"",
-						WS_CHILD | WS_CLIPCHILDREN,
+						WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN,
 						0,0,2000,1000,
 						DW_HWND_OBJECT,
 						NULL,
@@ -4124,7 +4131,7 @@
 	HWND tmp = CreateWindow(BUTTONCLASSNAME,
 							text,
 							WS_CHILD | BS_AUTOCHECKBOX |
-							BS_TEXT | WS_CLIPCHILDREN,
+							BS_TEXT | WS_CLIPCHILDREN | WS_VISIBLE,
 							0,0,2000,1000,
 							DW_HWND_OBJECT,
 							NULL,
@@ -4150,7 +4157,8 @@
 {
 	HWND tmp = CreateWindow(LISTBOXCLASSNAME,
 							"",
-							LBS_NOINTEGRALHEIGHT | WS_CHILD | LBS_HASSTRINGS |
+							WS_VISIBLE | LBS_NOINTEGRALHEIGHT |
+							WS_CHILD | LBS_HASSTRINGS |
 							LBS_NOTIFY | WS_BORDER  | WS_CLIPCHILDREN |
 							WS_VSCROLL | (multi ? LBS_MULTIPLESEL : 0) ,
 							0,0,2000,1000,
@@ -4329,7 +4337,6 @@
 		thisbox->count++;
 
 		SetParent(item, box);
-		ShowWindow(item, SW_SHOW);
 		if(strncmp(tmpbuf, UPDOWN_CLASS, strlen(UPDOWN_CLASS))==0)
 		{
 			ColorInfo *cinfo = (ColorInfo *)GetWindowLong(item, GWL_USERDATA);
@@ -6067,7 +6074,7 @@
 	Box *newbox = calloc(sizeof(Box), 1);
 	HWND tmp = CreateWindow(ObjectClassName,
 							"",
-							WS_CHILD | WS_CLIPCHILDREN,
+							WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN,
 							0,0,2000,1000,
 							DW_HWND_OBJECT,
 							NULL,
@@ -6634,7 +6641,7 @@
 	{
 		HWND tmp = CreateWindow(SplitbarClassName,
 								"",
-								WS_CHILD | WS_CLIPCHILDREN,
+								WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN,
 								0,0,2000,1000,
 								DW_HWND_OBJECT,
 								NULL,
@@ -6661,7 +6668,7 @@
 	{
 		HWND tmp = CreateWindow(SplitbarClassName,
 								"",
-								WS_CHILD | WS_CLIPCHILDREN,
+								WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN,
 								0,0,2000,1000,
 								DW_HWND_OBJECT,
 								NULL,
@@ -6733,7 +6740,6 @@
 		thisbox->count++;
 
 		SetParent(item, box);
-		ShowWindow(item, SW_SHOW);
 		if(strncmp(tmpbuf, UPDOWN_CLASS, strlen(UPDOWN_CLASS))==0)
 		{
 			ColorInfo *cinfo = (ColorInfo *)GetWindowLong(item, GWL_USERDATA);