[gtksourceview/gtksourcecompletion] Update selection label when the providers in the model change



commit 47c6d610a8710eab2b9e6716a8e57bbbb494c881
Author: Jesse van den Kieboom <jessevdk gnome org>
Date:   Sat Sep 19 14:47:30 2009 +0200

    Update selection label when the providers in the model change
    
    Original patch by Jesús Barbero Rodríguez <chuchiperriman gmail com>

 gtksourceview/gtksourcecompletion.c      |   14 +++++++++++++-
 gtksourceview/gtksourcecompletionmodel.c |   30 ++++++++++++++++++++++++++++++
 gtksourceview/gtksourcecompletionmodel.h |    2 ++
 3 files changed, 45 insertions(+), 1 deletions(-)
---
diff --git a/gtksourceview/gtksourcecompletion.c b/gtksourceview/gtksourcecompletion.c
index ae3b5b0..38bc03b 100644
--- a/gtksourceview/gtksourcecompletion.c
+++ b/gtksourceview/gtksourcecompletion.c
@@ -218,7 +218,7 @@ activate_current_proposal (GtkSourceCompletion *completion)
 	
 	g_signal_handler_unblock (buffer,
 	                          completion->priv->signals_ids[TEXT_BUFFER_DELETE_RANGE]);
-	g_signal_handler_unblock (buffer,
+	g_signal_handler_unblock (completion->priv->model_proposals,
 	                          completion->priv->signals_ids[TEXT_BUFFER_INSERT_TEXT]);
 
 	g_object_unref (provider);
@@ -1809,6 +1809,13 @@ on_row_deleted_cb (GtkTreeModel        *tree_model,
 	check_first_selected (completion);
 }
 
+static void
+on_providers_changed (GtkSourceCompletionModel *model,
+                      GtkSourceCompletion      *completion)
+{
+	update_selection_label (completion);
+}
+
 static GtkWidget *
 initialize_proposals_ui (GtkSourceCompletion *completion)
 {
@@ -1834,6 +1841,11 @@ initialize_proposals_ui (GtkSourceCompletion *completion)
 	                        "row-deleted",
 	                        G_CALLBACK (on_row_deleted_cb),
 	                        completion);
+
+	g_signal_connect (completion->priv->model_proposals,
+	                  "providers-changed",
+	                  G_CALLBACK (on_providers_changed),
+	                  completion);
 	
 	gtk_tree_view_set_show_expanders (GTK_TREE_VIEW (tree_view), FALSE);
 	
diff --git a/gtksourceview/gtksourcecompletionmodel.c b/gtksourceview/gtksourcecompletionmodel.c
index ce1a8a8..29f37f0 100644
--- a/gtksourceview/gtksourcecompletionmodel.c
+++ b/gtksourceview/gtksourcecompletionmodel.c
@@ -68,6 +68,14 @@ struct _GtkSourceCompletionModelPrivate
 	gboolean marking;
 };
 
+enum
+{
+	PROVIDERS_CHANGED,
+	NUM_SIGNALS
+};
+
+static guint signals[NUM_SIGNALS] = {0,};
+
 static void tree_model_iface_init (gpointer g_iface, gpointer iface_data);
 
 G_DEFINE_TYPE_WITH_CODE (GtkSourceCompletionModel, 
@@ -505,6 +513,17 @@ gtk_source_completion_model_class_init (GtkSourceCompletionModelClass *klass)
 	object_class->finalize = gtk_source_completion_model_finalize;
 	object_class->dispose = gtk_source_completion_model_dispose;
 
+	signals[PROVIDERS_CHANGED] =
+		g_signal_new ("providers-changed",
+		              G_TYPE_FROM_CLASS (klass),
+		              G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+		              G_STRUCT_OFFSET (GtkSourceCompletionModelClass, providers_changed),
+		              NULL, 
+		              NULL,
+		              g_cclosure_marshal_VOID__VOID, 
+		              G_TYPE_NONE,
+		              0);
+
 	g_type_class_add_private (object_class, sizeof(GtkSourceCompletionModelPrivate));
 }
 
@@ -1054,6 +1073,7 @@ gtk_source_completion_model_append (GtkSourceCompletionModel    *model,
 	GList *item;
 	ProviderInfo *info;
 	GtkTreePath *path = NULL;
+	gboolean is_new_provider = FALSE;
 	
 	g_return_if_fail (GTK_IS_SOURCE_COMPLETION_MODEL (model));
 	g_return_if_fail (GTK_IS_SOURCE_COMPLETION_PROVIDER (provider));
@@ -1069,6 +1089,7 @@ gtk_source_completion_model_append (GtkSourceCompletionModel    *model,
 	{
 		/* First batch for 'provider', add provider info */
 		info = add_provider_info (model, provider);
+		is_new_provider = TRUE;
 	}
 	
 	if (info->first_batch)
@@ -1135,6 +1156,11 @@ gtk_source_completion_model_append (GtkSourceCompletionModel    *model,
 	{
 		gtk_tree_path_free (path);
 	}
+	
+	if (is_new_provider)
+	{
+		g_signal_emit (model, signals[PROVIDERS_CHANGED], 0);
+	}
 }
 
 void
@@ -1149,6 +1175,8 @@ gtk_source_completion_model_end (GtkSourceCompletionModel    *model,
 	{
 		model->priv->providers = g_list_remove (model->priv->providers,
 		                                        provider);
+
+		g_signal_emit (model, signals[PROVIDERS_CHANGED], 0);
 	}
 	else
 	{
@@ -1205,6 +1233,8 @@ gtk_source_completion_model_clear (GtkSourceCompletionModel *model)
 
 	g_list_free (model->priv->visible_providers);
 	model->priv->visible_providers = NULL;
+	
+	g_signal_emit (model, signals[PROVIDERS_CHANGED], 0);
 }
 
 static void
diff --git a/gtksourceview/gtksourcecompletionmodel.h b/gtksourceview/gtksourcecompletionmodel.h
index 546fb51..da66fa7 100644
--- a/gtksourceview/gtksourcecompletionmodel.h
+++ b/gtksourceview/gtksourcecompletionmodel.h
@@ -49,6 +49,8 @@ struct _GtkSourceCompletionModel {
 
 struct _GtkSourceCompletionModelClass {
 	GObjectClass parent_class;
+	
+	void (*providers_changed) (GtkSourceCompletionModel *model);
 };
 
 enum



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