changeset 352:feed7567764f

Rewrote the selection code. It is much more simple now and no longer uses it's internal selection list management.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Wed, 16 Apr 2003 16:58:00 +0000
parents 84a24d739d12
children 08e56a0f9541
files gtk/dw.c
diffstat 1 files changed, 5 insertions(+), 63 deletions(-) [+]
line wrap: on
line diff
--- a/gtk/dw.c	Wed Apr 16 12:00:00 2003 +0000
+++ b/gtk/dw.c	Wed Apr 16 16:58:00 2003 +0000
@@ -581,26 +581,6 @@
 	return retval;
 }
 
-static gint _select_row(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data)
-{
-	GList *tmp = (GList *)gtk_object_get_data(GTK_OBJECT(widget), "selectlist");
-	char *rowdata = gtk_clist_get_row_data(GTK_CLIST(widget), row);
-	int multi = (int)gtk_object_get_data(GTK_OBJECT(widget), "multi");
-
-	if(rowdata)
-	{
-		if(!multi)
-		{
-			g_list_free(tmp);
-			tmp = NULL;
-		}
-
-		tmp = g_list_append(tmp, rowdata);
-		gtk_object_set_data(GTK_OBJECT(widget), "selectlist", tmp);
-	}
-	return FALSE;
-}
-
 static gint _container_select_row(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data)
 {
 	SignalHandler *work = (SignalHandler *)data;
@@ -615,25 +595,6 @@
 	return contextfunc(work->window, 0, rowdata, work->data, 0);;
 }
 
-static gint _unselect_row(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data)
-{
-	GList *tmp;
-	char *rowdata;
-
-	if(_dw_unselecting)
-		return FALSE;
-
-	tmp = (GList *)gtk_object_get_data(GTK_OBJECT(widget), "selectlist");
-	rowdata = gtk_clist_get_row_data(GTK_CLIST(widget), row);
-
-	if(rowdata && tmp)
-	{
-		tmp = g_list_remove(tmp, rowdata);
-		gtk_object_set_data(GTK_OBJECT(widget), "selectlist", tmp);
-	}
-	return FALSE;
-}
-
 static int _round_value(gfloat val)
 {
 	int newval = (int)val;
@@ -4309,9 +4270,6 @@
 	multi = (int)gtk_object_get_data(GTK_OBJECT(handle), "multi");
 	gtk_object_set_data(GTK_OBJECT(handle), "multi", (gpointer)multi);
 
-	gtk_signal_connect(GTK_OBJECT(clist), "select_row", GTK_SIGNAL_FUNC(_select_row),  NULL);
-	gtk_signal_connect(GTK_OBJECT(clist), "unselect_row", GTK_SIGNAL_FUNC(_unselect_row),  NULL);
-
 	gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 0, TRUE);
 	if(multi)
 		gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_EXTENDED);
@@ -4898,26 +4856,12 @@
 	/* These should be separate but right now this will work */
 	if(flags & DW_CRA_SELECTED || flags & DW_CRA_CURSORED)
 	{
-		/* If there is an old query list, free it */
-		list = (GList *)gtk_object_get_data(GTK_OBJECT(clist), "querylist");
-		if(list)
-			g_list_free(list);
-
-		/* Move the current selection list to the query list, and remove the
-		 * current selection list.
-		 */
-		list = (GList *)gtk_object_get_data(GTK_OBJECT(clist), "selectlist");
-		gtk_object_set_data(GTK_OBJECT(clist), "selectlist", NULL);
-		gtk_object_set_data(GTK_OBJECT(clist), "querylist", (gpointer)list);
-		_dw_unselect(clist);
+		list = GTK_CLIST(clist)->selection;
 
 		if(list)
 		{
 			gtk_object_set_data(GTK_OBJECT(clist), "querypos", (gpointer)1);
-			if(list->data)
-				retval =  list->data;
-			else
-				retval = "";
+			retval = (char *)gtk_clist_get_row_data(GTK_CLIST(clist), GPOINTER_TO_UINT(list->data));
 		}
 	}
 	else
@@ -4956,7 +4900,7 @@
 	/* These should be separate but right now this will work */
 	if(flags & DW_CRA_SELECTED || flags & DW_CRA_CURSORED)
 	{
-		list = (GList *)gtk_object_get_data(GTK_OBJECT(clist), "querylist");
+		list = GTK_CLIST(clist)->selection;
 
 		if(list)
 		{
@@ -4969,10 +4913,8 @@
 				counter++;
 			}
 
-			if(list && list->data)
-				retval = list->data;
-			else if(list && !list->data)
-				retval = "";
+			if(list)
+				retval = (char *)gtk_clist_get_row_data(GTK_CLIST(clist), GPOINTER_TO_UINT(list->data));
 		}
 	}
 	else