[gtksourceview/wip/chergert/gsv-gtk4] snippets: implement refilter for completion results
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview/wip/chergert/gsv-gtk4] snippets: implement refilter for completion results
- Date: Sun, 13 Sep 2020 03:54:01 +0000 (UTC)
commit deabd14e887ecf1cec99ef1c9b2714f795c35dbf
Author: Christian Hergert <chergert redhat com>
Date: Sat Sep 12 20:53:54 2020 -0700
snippets: implement refilter for completion results
.../snippets/gtksourcecompletionsnippets.c | 44 +++++++++++++++++++++-
.../snippets/gtksourcecompletionsnippetsproposal.c | 15 ++++++++
2 files changed, 57 insertions(+), 2 deletions(-)
---
diff --git a/gtksourceview/completion-providers/snippets/gtksourcecompletionsnippets.c
b/gtksourceview/completion-providers/snippets/gtksourcecompletionsnippets.c
index abaf7227..a1356f82 100644
--- a/gtksourceview/completion-providers/snippets/gtksourcecompletionsnippets.c
+++ b/gtksourceview/completion-providers/snippets/gtksourcecompletionsnippets.c
@@ -32,8 +32,6 @@
#include <gtksourceview/gtksourcesnippetmanager.h>
#include <gtksourceview/gtksourceview.h>
-#include <gtksourceview/completion-providers/words/gtksourcecompletionwordsutils-private.h>
-
#include "gtksourcecompletionsnippets.h"
#include "gtksourcecompletionsnippetsproposal-private.h"
@@ -297,6 +295,47 @@ gtk_source_completion_snippets_display (GtkSourceCompletionProvider *provider,
}
}
+static void
+gtk_source_completion_snippets_refilter (GtkSourceCompletionProvider *provider,
+ GtkSourceCompletionContext *context,
+ GListModel *model)
+{
+ GtkFilterListModel *filter_model;
+ GtkExpression *expression;
+ GtkStringFilter *filter;
+ gchar *word;
+
+ g_assert (GTK_SOURCE_IS_COMPLETION_PROVIDER (provider));
+ g_assert (GTK_SOURCE_IS_COMPLETION_CONTEXT (context));
+ g_assert (G_IS_LIST_MODEL (model));
+
+ word = gtk_source_completion_context_get_word (context);
+
+ if (GTK_IS_FILTER_LIST_MODEL (model))
+ {
+ model = gtk_filter_list_model_get_model (GTK_FILTER_LIST_MODEL (model));
+ }
+
+ if (!word || !word[0])
+ {
+ gtk_source_completion_context_set_proposals_for_provider (context, provider, model);
+ g_free (word);
+ return;
+ }
+
+ expression = gtk_property_expression_new (GTK_SOURCE_TYPE_COMPLETION_SNIPPETS_PROPOSAL, NULL,
"trigger");
+ filter = gtk_string_filter_new (g_steal_pointer (&expression));
+ gtk_string_filter_set_search (GTK_STRING_FILTER (filter), word);
+ filter_model = gtk_filter_list_model_new (g_object_ref (model),
+ GTK_FILTER (g_steal_pointer (&filter)));
+ gtk_filter_list_model_set_incremental (filter_model, TRUE);
+ gtk_source_completion_context_set_proposals_for_provider (context, provider, G_LIST_MODEL
(filter_model));
+
+ g_clear_object (&filter_model);
+ g_free (word);
+}
+
+
static void
completion_provider_iface_init (GtkSourceCompletionProviderInterface *iface)
{
@@ -305,6 +344,7 @@ completion_provider_iface_init (GtkSourceCompletionProviderInterface *iface)
iface->populate = gtk_source_completion_snippets_populate;
iface->activate = gtk_source_completion_snippets_activate;
iface->display = gtk_source_completion_snippets_display;
+ iface->refilter = gtk_source_completion_snippets_refilter;
}
static void
diff --git a/gtksourceview/completion-providers/snippets/gtksourcecompletionsnippetsproposal.c
b/gtksourceview/completion-providers/snippets/gtksourcecompletionsnippetsproposal.c
index a8469f8a..1bf69bbd 100644
--- a/gtksourceview/completion-providers/snippets/gtksourcecompletionsnippetsproposal.c
+++ b/gtksourceview/completion-providers/snippets/gtksourcecompletionsnippetsproposal.c
@@ -37,6 +37,7 @@ G_DEFINE_TYPE_WITH_CODE (GtkSourceCompletionSnippetsProposal,
enum {
PROP_0,
PROP_SNIPPET,
+ PROP_TRIGGER,
N_PROPS
};
@@ -66,6 +67,13 @@ gtk_source_completion_snippets_proposal_get_property (GObject *object,
g_value_set_object (value, self->snippet);
break;
+ case PROP_TRIGGER:
+ if (self->snippet != NULL)
+ {
+ g_value_set_string (value, gtk_source_snippet_get_trigger (self->snippet));
+ }
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -110,6 +118,13 @@ gtk_source_completion_snippets_proposal_class_init (GtkSourceCompletionSnippetsP
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
+ properties [PROP_TRIGGER] =
+ g_param_spec_string ("trigger",
+ "Trigger",
+ "The trigger for the snippet",
+ NULL,
+ (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
g_object_class_install_properties (object_class, N_PROPS, properties);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]