[gtksourceview/gtksourcecompletion] Make things work a little bit more.



commit 2c458a498c9502dd6eec4f5ea52928f476bafc0c
Author: Ignacio Casal Quinteiro <icq gnome org>
Date:   Sun Jun 7 15:50:30 2009 +0200

    Make things work a little bit more.

 gtksourceview/gtksourcecompletion.c      |   13 +-
 gtksourceview/gtksourcecompletionmodel.c |  298 ++++--------------------------
 2 files changed, 44 insertions(+), 267 deletions(-)
---
diff --git a/gtksourceview/gtksourcecompletion.c b/gtksourceview/gtksourcecompletion.c
index 192659f..7e70c06 100644
--- a/gtksourceview/gtksourcecompletion.c
+++ b/gtksourceview/gtksourcecompletion.c
@@ -1105,9 +1105,8 @@ buffer_insert_text_cb (GtkTextBuffer       *buffer,
 	}
 	else
 	{
-		if ((completion->priv->is_interactive && 
-		     gtk_source_completion_utils_is_separator (g_utf8_get_char (text))) ||
-		    gtk_text_iter_get_line (location) != completion->priv->typing_line)
+		if ((completion->priv->is_interactive &&
+		    gtk_text_iter_get_line (location) != completion->priv->typing_line))
 		{
 			gtk_source_completion_hide (completion);
 		}
@@ -1662,7 +1661,7 @@ initialize_proposals_ui (GtkSourceCompletion *completion)
 	GtkWidget *tree_view;
 	
 	completion->priv->model_proposals = gtk_source_completion_model_new ();
-	g_warning ("1");
+	
 	g_signal_connect (completion->priv->model_proposals,
 			  "items-added",
 			  G_CALLBACK (on_items_added_cb),
@@ -1732,7 +1731,7 @@ initialize_proposals_ui (GtkSourceCompletion *completion)
 	
 	gtk_container_add (GTK_CONTAINER (scrolled_window),
 			   tree_view);
-	g_warning ("2");
+	
 	return scrolled_window;
 }
 
@@ -1895,7 +1894,7 @@ add_proposals (GtkSourceCompletion         *completion,
 	GList *item;
 	GtkSourceCompletionProposal *proposal;
 	GtkTextIter iter;
-g_warning ("3");
+
 	get_iter_at_insert (completion, &iter);
 	
 	proposals = gtk_source_completion_provider_get_proposals (provider, &iter);
@@ -1915,7 +1914,7 @@ g_warning ("3");
 	}
 
 	gtk_source_completion_model_run_add_proposals (completion->priv->model_proposals);
-	g_warning ("4");
+
 	g_list_free (proposals);
 }
 
diff --git a/gtksourceview/gtksourcecompletionmodel.c b/gtksourceview/gtksourcecompletionmodel.c
index f53447c..31f9452 100644
--- a/gtksourceview/gtksourcecompletionmodel.c
+++ b/gtksourceview/gtksourcecompletionmodel.c
@@ -40,7 +40,6 @@ typedef struct
 {
 	GList *item;
 	guint num;
-	guint visible_items;
 } HeaderInfo;
 
 struct _GtkSourceCompletionModelPrivate
@@ -88,22 +87,10 @@ path_from_list (GtkSourceCompletionModel *model,
                 GList                    *item)
 {
 	gint index = 0;
-	GList *ptr = model->priv->store;
-	ProposalNode *node;
 	
-	while (ptr && ptr != item)
-	{
-		node = (ProposalNode *)ptr->data;
-		
-		/*if (!node->filtered)
-		{*/
-			++index;
-		//}
-		
-		ptr = g_list_next (ptr);
-	}
+	index = g_list_position (model->priv->store, item);
 	
-	if (ptr != item)
+	if (index == -1)
 	{
 		return NULL;
 	}
@@ -145,7 +132,6 @@ get_iter_from_index (GtkSourceCompletionModel *model,
                      gint                      index)
 {
 	GList *item;
-	ProposalNode *node;
 
 	if (index < 0 || index >= model->priv->num)
 	{
@@ -247,39 +233,10 @@ tree_model_get_value (GtkTreeModel *tree_model,
 			break;
 	}
 }
-/*
-static gboolean
-find_first_not_filtered (GList       *item,
-                         GtkTreeIter *iter)
-{
-	ProposalNode *node;
-
-	while (item)
-	{
-		node = (ProposalNode *)item->data;
-		
-		if (!node->filtered)
-		{
-			break;
-		}
-		
-		item = g_list_next (item);
-	}
-	
-	if (item != NULL)
-	{
-		iter->user_data = item;
-		return TRUE;
-	}
-	else
-	{
-		return FALSE;
-	}
-}*/
 
 static gboolean
 get_next_element (GList *item,
-		   GtkTreeIter *iter)
+		  GtkTreeIter *iter)
 {
 	item = g_list_next (item);
 	
@@ -298,8 +255,6 @@ static gboolean
 tree_model_iter_next (GtkTreeModel *tree_model,
 		      GtkTreeIter  *iter)
 {
-	GList *item;
-	
 	g_return_val_if_fail (GTK_IS_SOURCE_COMPLETION_MODEL (tree_model), FALSE);
 	g_return_val_if_fail (iter != NULL, FALSE);
 	
@@ -362,7 +317,7 @@ tree_model_iter_nth_child (GtkTreeModel *tree_model,
 	else
 	{
 		return get_iter_from_index (GTK_SOURCE_COMPLETION_MODEL (tree_model), 
-		                            iter, 
+		                            iter,
 		                            n);
 	}
 }
@@ -540,16 +495,12 @@ num_inc (GtkSourceCompletionModel           *model,
 	
 	info = g_hash_table_lookup (model->priv->num_per_provider, provider);
 	
-	/*if (inc_global)
-	{*/
-		++model->priv->num;
-		
-		if (info != NULL)
-		{
-			++info->visible_items;
-			++(info->num);
-		}
-	//}
+	++model->priv->num;
+	
+	if (info != NULL)
+	{
+		++(info->num);
+	}
 }
 
 static void
@@ -562,14 +513,9 @@ num_dec (GtkSourceCompletionModel           *model,
 	
 	--model->priv->num;
 		
-	if (info != NULL)
+	if (info != NULL && info->num > 0)
 	{
-		--info->visible_items;
-		
-		if (info->num > 0)
-		{
-			--(info->num);
-		}
+		--(info->num);
 	}
 }
 
@@ -598,20 +544,12 @@ update_show_headers (GtkSourceCompletionModel *model,
 	
 	while (g_hash_table_iter_next (&hiter, (gpointer *)&provider, (gpointer *)&info))
 	{
-		if (info->visible_items > 0)
+		if (info->num > 0)
 		{
 			node = (ProposalNode *)info->item->data;
 			++num;
 			
-			/*if (show && node->filtered)
-			{
-				items = g_list_append (items, info);
-			}
-			
-			if (!show && !node->filtered)
-			{*/
-				items = g_list_append (items, info);
-			//}
+			items = g_list_append (items, info);
 		}
 	}
 
@@ -648,41 +586,7 @@ update_show_headers (GtkSourceCompletionModel *model,
 
 	g_list_free (items);
 }
-/*
-static void
-refilter_headers (GtkSourceCompletionModel *model)
-{
-	GtkSourceCompletionProvider *provider;
-	HeaderInfo *info;
-	GHashTableIter hiter;
-	ProposalNode *node;
-	GtkTreePath *path;
 
-	g_hash_table_iter_init (&hiter, model->priv->num_per_provider);
-	
-	while (g_hash_table_iter_next (&hiter, (gpointer *)&provider, (gpointer *)&info))
-	{
-		node = (ProposalNode *)info->item->data;
-		
-		if (!node->filtered)
-		{
-			node->filtered = GTK_SOURCE_COMPLETION_MODEL_FILTERED;
-			num_dec (model, provider, FALSE, TRUE);
-			
-			path = path_from_list (model, info->item);
-			gtk_tree_model_row_deleted (GTK_TREE_MODEL (model),
-			                            path);
-			gtk_tree_path_free (path);
-		}
-	}
-
-	if (model->priv->show_headers)
-	{
-		update_show_headers (model, TRUE);
-		return;
-	}
-}
-*/
 /* Public */
 GtkSourceCompletionModel*
 gtk_source_completion_model_new (void)
@@ -718,16 +622,13 @@ on_proposal_changed (GtkSourceCompletionProposal *proposal,
 	ProposalNode *node = (ProposalNode *)item->data;
 	GtkTreePath *path;
 
-	/*if (!node->filtered)
-	{*/
-		iter.user_data = node;
-		path = path_from_list (node->model, item);
+	iter.user_data = node;
+	path = path_from_list (node->model, item);
 
-		gtk_tree_model_row_changed (GTK_TREE_MODEL (node->model),
-		                            path,
-		                            &iter);
-		gtk_tree_path_free (path);
-	//}
+	gtk_tree_model_row_changed (GTK_TREE_MODEL (node->model),
+	                            path,
+	                            &iter);
+	gtk_tree_path_free (path);
 }
 
 static gboolean
@@ -756,7 +657,7 @@ idle_append (gpointer data)
 		}
 		
 		/* Check if it is a header */
-		/*if (g_hash_table_lookup (model->priv->num_per_provider, node->provider) == NULL)
+		if (g_hash_table_lookup (model->priv->num_per_provider, node->provider) == NULL)
 		{
 			header = g_slice_new (ProposalNode);
 			header->provider = g_object_ref (node->provider);
@@ -767,32 +668,27 @@ idle_append (gpointer data)
 			info = g_slice_new (HeaderInfo);
 			info->item = model->priv->last;
 			info->num = 0;
-			info->visible_items = 0;
 			
 			g_hash_table_insert (model->priv->num_per_provider, node->provider, info);
-		}*/
-		
-		//node_update_filter_state (model, node);
+		}
 		
 		append_list (model, node);
 		
 		item = model->priv->last;
 		iter.user_data = item;
 
-		num_inc (model, 
-			 node->provider);
+		num_inc (model, node->provider);
 
-		/*if (!node->filtered)
-		{*/
-			path = path_from_list (model, item);
-			gtk_tree_model_row_inserted (GTK_TREE_MODEL (model), path, &iter);
-			gtk_tree_path_free (path);
-			
-			if (header != NULL)
-			{
-				//update_show_headers (model, TRUE);
-			}
-		//}
+		path = path_from_list (model, item);
+		g_warning ("path: %s", gtk_tree_path_to_string (path));
+		gtk_tree_model_row_inserted (GTK_TREE_MODEL (model), path, &iter);
+		gtk_tree_path_free (path);
+		return FALSE;
+		if (header != NULL)
+		{
+			g_warning ("header");
+			update_show_headers (model, TRUE);
+		}
 		
 		node->changed_id = g_signal_connect (node->proposal, 
 	                                             "changed", 
@@ -854,7 +750,6 @@ gtk_source_completion_model_clear (GtkSourceCompletionModel *model)
 	while (model->priv->store)
 	{
 		node = (ProposalNode *)model->priv->store->data;
-		//filtered = node->filtered;
 
 		free_node (node);
 		
@@ -865,13 +760,9 @@ gtk_source_completion_model_clear (GtkSourceCompletionModel *model)
 			model->priv->last = NULL;
 		}
 		
-		num_dec (model, 
-		         node->provider);
+		num_dec (model, node->provider);
 		
-		/*if (!filtered)
-		{*/
-			gtk_tree_model_row_deleted (GTK_TREE_MODEL (model), path);
-		//}
+		gtk_tree_model_row_deleted (GTK_TREE_MODEL (model), path);
 	}
 	
 	g_list_free (list);
@@ -879,112 +770,7 @@ gtk_source_completion_model_clear (GtkSourceCompletionModel *model)
 	
 	g_hash_table_remove_all (model->priv->num_per_provider);
 }
-#if 0
-static gboolean
-idle_refilter (GtkSourceCompletionModel *model)
-{
-	guint i = 0;
-	GtkTreePath *path;
-	GtkTreeIter iter;
-	ProposalNode *node;
-	GtkSourceCompletionModelFilterFlag filtered;
-
-	if (model->priv->next_filter_path)
-	{
-		path = gtk_tree_row_reference_get_path (model->priv->next_filter_path);
-		gtk_tree_row_reference_free (model->priv->next_filter_path);
-		model->priv->next_filter_path = NULL;
-	}
-	else
-	{
-		path = gtk_tree_path_new_first ();
-	}
-	
-	while (i < FILTER_PER_CALLBACK && model->priv->next_filter_item != NULL)
-	{
-		iter.user_data = model->priv->next_filter_item;
-
-		node = (ProposalNode *)model->priv->next_filter_item->data;
-		filtered = node_update_filter_state (model, node);
-		
-		if ((filtered != 0) == (node->filtered != 0))
-		{
-			/* Keep the same, so increase path */
-			if (!filtered)
-			{
-				gtk_tree_path_next (path);
-			}
-		}
-		else if (filtered)
-		{
-			/* Was filtered, but not any more, so insert it */
-			num_inc (model, 
-			         node->provider,
-			         !(filtered & GTK_SOURCE_COMPLETION_MODEL_COUNT),
-			         TRUE);
-			         
-			gtk_tree_model_row_inserted (GTK_TREE_MODEL (model),
-			                             path,
-			                             &iter);
-			gtk_tree_path_next (path);
-		}
-		else
-		{
-			/* Was not filtered, but is now, so remove it */
-			num_dec (model, 
-			         node->provider,
-			         !(node->filtered & GTK_SOURCE_COMPLETION_MODEL_COUNT),
-			         TRUE);
-
-			gtk_tree_model_row_deleted (GTK_TREE_MODEL (model),
-			                            path);
-		}
-		
-		model->priv->next_filter_item = g_list_next (model->priv->next_filter_item);
-		++i;
-	}
-
-	refilter_headers (model);
-
-	if (model->priv->next_filter_item == NULL)
-	{
-		model->priv->idle_filter_id = 0;
-		gtk_tree_path_free (path);
-		
-		g_signal_emit (model, signals[FILTER_DONE], 0);
-
-		return FALSE;
-	}
-	
-	if (gtk_tree_path_prev (path))
-	{
-		model->priv->next_filter_path = gtk_tree_row_reference_new (GTK_TREE_MODEL (model),
-		                                                            path);
-	}
-	
-	gtk_tree_path_free (path);
-
-	return TRUE;
-}
 
-
-void
-gtk_source_completion_model_refilter (GtkSourceCompletionModel *model)
-{
-	g_return_if_fail (GTK_IS_SOURCE_COMPLETION_MODEL (model));
-	
-	/* Cancel any running filter */
-	cancel_refilter (model);
-	
-	model->priv->next_filter_item = model->priv->store;
-	
-	if (idle_refilter (model))
-	{
-		model->priv->idle_filter_id = g_idle_add ((GSourceFunc)idle_refilter, 
-		                                          model);
-	}
-}
-#endif
 gboolean
 gtk_source_completion_model_is_empty (GtkSourceCompletionModel *model,
                                       gboolean                  invisible)
@@ -1032,7 +818,7 @@ gtk_source_completion_model_set_show_headers (GtkSourceCompletionModel *model,
 	if (model->priv->show_headers != show_headers)
 	{
 		model->priv->show_headers = show_headers;
-		//refilter_headers (model);
+		update_show_headers (model, show_headers);
 	}
 }
 
@@ -1059,11 +845,7 @@ gtk_source_completion_model_iter_previous (GtkSourceCompletionModel *model,
 	
 	item = iter->user_data;
 	
-	/*do
-	{*/
-		item = g_list_previous (item);
-	//} while (item && ((ProposalNode *)item->data)->filtered);
-
+	item = g_list_previous (item);
 	
 	if (item != NULL)
 	{
@@ -1088,11 +870,7 @@ gtk_source_completion_model_iter_last (GtkSourceCompletionModel *model,
 	item = model->priv->last;
 	iter->user_data = item;
 
-	/*if (!((ProposalNode *)item->data)->filtered)
-	{
-		return TRUE;
-	}
-	else*/ if (item != NULL)
+	if (item != NULL)
 	{
 		return gtk_source_completion_model_iter_previous (model, iter);
 	}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]