[gtksourceview/gtksourcecompletion] Update selection label when the providers in the model change
- From: Jesse van den Kieboom <jessevdk src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gtksourceview/gtksourcecompletion] Update selection label when the providers in the model change
- Date: Sat, 19 Sep 2009 13:04:53 +0000 (UTC)
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]