[gnome-builder/wip/gtk4-port: 453/1774] plugins/clang: start porting completion to GtkSourceView 5
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/gtk4-port: 453/1774] plugins/clang: start porting completion to GtkSourceView 5
- Date: Mon, 11 Jul 2022 22:31:12 +0000 (UTC)
commit f06f937b306156402b2ef51e419ec274b4be5bb4
Author: Christian Hergert <chergert redhat com>
Date: Wed Apr 6 20:01:03 2022 -0700
plugins/clang: start porting completion to GtkSourceView 5
src/plugins/clang/clang-plugin.c | 4 +-
src/plugins/clang/ide-clang-completion-item.c | 57 +++++
src/plugins/clang/ide-clang-completion-item.h | 13 +-
src/plugins/clang/ide-clang-completion-provider.c | 247 ++++++++++++----------
src/plugins/clang/ide-clang-proposals.c | 7 +-
5 files changed, 206 insertions(+), 122 deletions(-)
---
diff --git a/src/plugins/clang/clang-plugin.c b/src/plugins/clang/clang-plugin.c
index c8cac1bba..da43703fd 100644
--- a/src/plugins/clang/clang-plugin.c
+++ b/src/plugins/clang/clang-plugin.c
@@ -23,9 +23,11 @@
#include "config.h"
#include <libpeas/peas.h>
+
#include <libide-code.h>
#include <libide-foundry.h>
#include <libide-gui.h>
+#include <libide-sourceview.h>
#include "ide-clang-client.h"
#include "ide-clang-code-indexer.h"
@@ -55,7 +57,7 @@ _ide_clang_register_types (PeasObjectModule *module)
IDE_TYPE_DIAGNOSTIC_PROVIDER,
IDE_TYPE_CLANG_DIAGNOSTIC_PROVIDER);
peas_object_module_register_extension_type (module,
- IDE_TYPE_COMPLETION_PROVIDER,
+ GTK_SOURCE_TYPE_COMPLETION_PROVIDER,
IDE_TYPE_CLANG_COMPLETION_PROVIDER);
peas_object_module_register_extension_type (module,
IDE_TYPE_PREFERENCES_ADDIN,
diff --git a/src/plugins/clang/ide-clang-completion-item.c b/src/plugins/clang/ide-clang-completion-item.c
index a8dd26bd6..32d0e48ac 100644
--- a/src/plugins/clang/ide-clang-completion-item.c
+++ b/src/plugins/clang/ide-clang-completion-item.c
@@ -482,3 +482,60 @@ ide_clang_completion_item_new (GVariant *variant,
return ret;
}
+
+void
+ide_clang_completion_item_display (IdeClangCompletionItem *self,
+ GtkSourceCompletionCell *cell,
+ const char *typed_text)
+{
+ GtkSourceCompletionColumn column;
+
+ g_return_if_fail (IDE_IS_CLANG_COMPLETION_ITEM (self));
+ g_return_if_fail (GTK_SOURCE_IS_COMPLETION_CELL (cell));
+
+ column = gtk_source_completion_cell_get_column (cell);
+
+ switch (column)
+ {
+ case GTK_SOURCE_COMPLETION_COLUMN_ICON:
+ gtk_source_completion_cell_set_icon_name (cell, self->icon_name);
+ break;
+
+ case GTK_SOURCE_COMPLETION_COLUMN_TYPED_TEXT:
+ {
+ PangoAttrList *attrs;
+
+ attrs = gtk_source_completion_fuzzy_highlight (self->typed_text, typed_text);
+ gtk_source_completion_cell_set_text_with_attributes (cell, self->typed_text, attrs);
+ pango_attr_list_unref (attrs);
+
+ break;
+ }
+
+ case GTK_SOURCE_COMPLETION_COLUMN_COMMENT:
+ {
+ g_autoptr(GVariant) result = ide_clang_completion_item_get_result (self);
+ const char *comment;
+
+ if (g_variant_lookup (result, "command", "&s", &comment))
+ gtk_source_completion_cell_set_text (cell, comment);
+
+ break;
+ }
+
+ case GTK_SOURCE_COMPLETION_COLUMN_DETAILS:
+ gtk_source_completion_cell_set_text (cell, NULL);
+ break;
+
+ case GTK_SOURCE_COMPLETION_COLUMN_BEFORE:
+ gtk_source_completion_cell_set_text (cell, self->return_type);
+ break;
+
+ case GTK_SOURCE_COMPLETION_COLUMN_AFTER:
+ gtk_source_completion_cell_set_text (cell, NULL);
+ break;
+
+ default:
+ break;
+ }
+}
diff --git a/src/plugins/clang/ide-clang-completion-item.h b/src/plugins/clang/ide-clang-completion-item.h
index 98ff80538..6cc239e1c 100644
--- a/src/plugins/clang/ide-clang-completion-item.h
+++ b/src/plugins/clang/ide-clang-completion-item.h
@@ -59,10 +59,13 @@ ide_clang_completion_item_get_result (const IdeClangCompletionItem *self)
return g_steal_pointer (&child);
}
-IdeClangCompletionItem *ide_clang_completion_item_new (GVariant *results,
- guint index,
- const gchar *keyword);
-GtkSourceSnippet *ide_clang_completion_item_get_snippet (IdeClangCompletionItem *self,
- IdeFileSettings *file_settings);
+IdeClangCompletionItem *ide_clang_completion_item_new (GVariant *results,
+ guint index,
+ const gchar *keyword);
+GtkSourceSnippet *ide_clang_completion_item_get_snippet (IdeClangCompletionItem *self,
+ IdeFileSettings *file_settings);
+void ide_clang_completion_item_display (IdeClangCompletionItem *self,
+ GtkSourceCompletionCell *cell,
+ const char *typed_text);
G_END_DECLS
diff --git a/src/plugins/clang/ide-clang-completion-provider.c
b/src/plugins/clang/ide-clang-completion-provider.c
index dfff821ed..12028cd9e 100644
--- a/src/plugins/clang/ide-clang-completion-provider.c
+++ b/src/plugins/clang/ide-clang-completion-provider.c
@@ -20,6 +20,8 @@
#define G_LOG_DOMAIN "ide-clang-completion-provider"
+#include <libide-sourceview.h>
+
#include "ide-clang-client.h"
#include "ide-clang-completion-item.h"
#include "ide-clang-completion-provider.h"
@@ -28,18 +30,27 @@
struct _IdeClangCompletionProvider
{
IdeObject parent_instance;
+
IdeClangClient *client;
IdeClangProposals *proposals;
+
+ char *word;
+ char *refilter_word;
+
+ guint activation_keyval;
+ GdkModifierType activation_state;
+
+ guint loaded : 1;
};
static gboolean
-is_field_access (IdeCompletionContext *context)
+is_field_access (GtkSourceCompletionContext *context)
{
GtkTextIter begin, end;
- g_assert (IDE_IS_COMPLETION_CONTEXT (context));
+ g_assert (GTK_SOURCE_IS_COMPLETION_CONTEXT (context));
- ide_completion_context_get_bounds (context, &begin, &end);
+ gtk_source_completion_context_get_bounds (context, &begin, &end);
if (gtk_text_iter_backward_char (&begin))
{
@@ -60,8 +71,8 @@ is_field_access (IdeCompletionContext *context)
}
static gint
-ide_clang_completion_provider_get_priority (IdeCompletionProvider *provider,
- IdeCompletionContext *context)
+ide_clang_completion_provider_get_priority (GtkSourceCompletionProvider *provider,
+ GtkSourceCompletionContext *context)
{
/* Place results before snippets */
if (is_field_access (context))
@@ -71,7 +82,7 @@ ide_clang_completion_provider_get_priority (IdeCompletionProvider *provider,
}
static gboolean
-ide_clang_completion_provider_is_trigger (IdeCompletionProvider *provider,
+ide_clang_completion_provider_is_trigger (GtkSourceCompletionProvider *provider,
const GtkTextIter *iter,
gunichar ch)
{
@@ -104,50 +115,73 @@ ide_clang_completion_provider_is_trigger (IdeCompletionProvider *provider,
}
static gboolean
-ide_clang_completion_provider_key_activates (IdeCompletionProvider *provider,
- IdeCompletionProposal *proposal,
- const GdkEventKey *key)
+ide_clang_completion_provider_key_activates (GtkSourceCompletionProvider *provider,
+ GtkSourceCompletionContext *context,
+ GtkSourceCompletionProposal *proposal,
+ guint keyval,
+ GdkModifierType state)
{
+ IdeClangCompletionProvider *self = (IdeClangCompletionProvider *)provider;
IdeClangCompletionItem *item = IDE_CLANG_COMPLETION_ITEM (proposal);
+ g_assert (IDE_IS_CLANG_COMPLETION_PROVIDER (self));
+ g_assert (IDE_IS_CLANG_COMPLETION_ITEM (item));
+
+ if ((state & (GDK_SHIFT_MASK|GDK_CONTROL_MASK)) == 0)
+ {
+ if (keyval == GDK_KEY_Return || keyval == GDK_KEY_KP_Enter)
+ goto store_and_activate;
+ }
+
/* Try to dereference field/variable */
if (item->kind == IDE_SYMBOL_KIND_FIELD || item->kind == IDE_SYMBOL_KIND_VARIABLE)
- return key->keyval == GDK_KEY_period;
+ {
+ if (keyval == GDK_KEY_period || keyval == GDK_KEY_minus)
+ goto store_and_activate;
+ }
-#if 0
/* We add suffix ; if pressed */
- if (key->keyval == GDK_KEY_semicolon)
- return TRUE;
+ if (keyval == GDK_KEY_semicolon)
+ goto store_and_activate;
+#if 0
/* Open parens for function */
if (item->kind == IDE_SYMBOL_FUNCTION)
- return key->keyval == GDK_KEY_parenleft;
+ return keyval == GDK_KEY_parenleft;
#endif
+ self->activation_keyval = 0;
+ self->activation_state = 0;
+
return FALSE;
+store_and_activate:
+ self->activation_keyval = keyval;
+ self->activation_state = state;
+
+ return TRUE;
}
static void
-ide_clang_completion_provider_activate_proposal (IdeCompletionProvider *provider,
- IdeCompletionContext *context,
- IdeCompletionProposal *proposal,
- const GdkEventKey *key)
+ide_clang_completion_provider_activate (GtkSourceCompletionProvider *provider,
+ GtkSourceCompletionContext *context,
+ GtkSourceCompletionProposal *proposal)
{
+ IdeClangCompletionProvider *self = (IdeClangCompletionProvider *)provider;
IdeClangCompletionItem *item = (IdeClangCompletionItem *)proposal;
g_autofree gchar *word = NULL;
- g_autoptr(IdeSnippet) snippet = NULL;
+ g_autoptr(GtkSourceSnippet) snippet = NULL;
IdeFileSettings *file_settings;
- GtkTextBuffer *buffer;
- GtkTextView *view;
+ GtkSourceBuffer *buffer;
+ GtkSourceView *view;
GtkTextIter begin, end;
- g_assert (IDE_IS_CLANG_COMPLETION_PROVIDER (provider));
- g_assert (IDE_IS_COMPLETION_CONTEXT (context));
+ g_assert (IDE_IS_CLANG_COMPLETION_PROVIDER (self));
+ g_assert (GTK_SOURCE_IS_COMPLETION_CONTEXT (context));
g_assert (IDE_IS_CLANG_COMPLETION_ITEM (item));
- buffer = ide_completion_context_get_buffer (context);
- view = ide_completion_context_get_view (context);
+ buffer = gtk_source_completion_context_get_buffer (context);
+ view = gtk_source_completion_context_get_view (context);
g_assert (IDE_IS_BUFFER (buffer));
g_assert (IDE_IS_SOURCE_VIEW (view));
@@ -158,38 +192,39 @@ ide_clang_completion_provider_activate_proposal (IdeCompletionProvider *provider
* If the typed text matches the typed text of the item, and the user
* it enter, then just skip the result and instead insert a newline.
*/
- if (key->keyval == GDK_KEY_Return || key->keyval == GDK_KEY_KP_Enter)
+ if (self->activation_keyval == GDK_KEY_Return ||
+ self->activation_keyval == GDK_KEY_KP_Enter)
{
- if ((word = ide_completion_context_get_word (context)))
+ if ((word = gtk_source_completion_context_get_word (context)))
{
if (ide_str_equal0 (word, item->typed_text))
{
- ide_completion_context_get_bounds (context, &begin, &end);
- gtk_text_buffer_insert (buffer, &end, "\n", -1);
+ gtk_source_completion_context_get_bounds (context, &begin, &end);
+ gtk_text_buffer_insert (GTK_TEXT_BUFFER (buffer), &end, "\n", -1);
return;
}
}
}
- gtk_text_buffer_begin_user_action (buffer);
+ gtk_text_buffer_begin_user_action (GTK_TEXT_BUFFER (buffer));
- if (ide_completion_context_get_bounds (context, &begin, &end))
- gtk_text_buffer_delete (buffer, &begin, &end);
+ if (gtk_source_completion_context_get_bounds (context, &begin, &end))
+ gtk_text_buffer_delete (GTK_TEXT_BUFFER (buffer), &begin, &end);
snippet = ide_clang_completion_item_get_snippet (item, file_settings);
/* Check the last snippet chunk and see if it matches our current
* position so we can omit it.
*/
- if (ide_snippet_get_n_chunks (snippet) > 0)
+ if (gtk_source_snippet_get_n_chunks (snippet) > 0)
{
- IdeSnippetChunk *chunk;
+ GtkSourceSnippetChunk *chunk;
const gchar *text;
GtkTextIter limit;
- chunk = ide_snippet_get_nth_chunk (snippet, ide_snippet_get_n_chunks (snippet) - 1);
- text = ide_snippet_chunk_get_text (chunk);
+ chunk = gtk_source_snippet_get_nth_chunk (snippet, gtk_source_snippet_get_n_chunks (snippet) - 1);
+ text = gtk_source_snippet_chunk_get_text (chunk);
limit = end;
if (text != NULL)
@@ -203,7 +238,7 @@ ide_clang_completion_provider_activate_proposal (IdeCompletionProvider *provider
gtk_text_iter_forward_to_line_end (&limit);
}
- ide_completion_remove_common_suffix (ide_completion_context_get_completion (context), &end, text);
+ ide_text_util_remove_common_prefix (&end, text);
begin = end;
}
}
@@ -214,72 +249,73 @@ ide_clang_completion_provider_activate_proposal (IdeCompletionProvider *provider
*/
if (item->kind == IDE_SYMBOL_KIND_FIELD || item->kind == IDE_SYMBOL_KIND_VARIABLE)
{
- if (key->keyval == GDK_KEY_period || key->keyval == GDK_KEY_minus)
+ if (self->activation_keyval == GDK_KEY_period ||
+ self->activation_keyval == GDK_KEY_minus)
{
- g_autoptr(IdeSnippetChunk) chunk = ide_snippet_chunk_new ();
+ g_autoptr(GtkSourceSnippetChunk) chunk = gtk_source_snippet_chunk_new ();
if (strchr (item->return_type, '*'))
- ide_snippet_chunk_set_spec (chunk, "->");
+ gtk_source_snippet_chunk_set_spec (chunk, "->");
else
- ide_snippet_chunk_set_spec (chunk, ".");
- ide_snippet_add_chunk (snippet, chunk);
+ gtk_source_snippet_chunk_set_spec (chunk, ".");
+ gtk_source_snippet_add_chunk (snippet, chunk);
}
}
- if (key->keyval == GDK_KEY_semicolon)
+ if (self->activation_keyval == GDK_KEY_semicolon)
{
- g_autoptr(IdeSnippetChunk) chunk = ide_snippet_chunk_new ();
- ide_snippet_chunk_set_spec (chunk, ";");
- ide_snippet_add_chunk (snippet, chunk);
+ g_autoptr(GtkSourceSnippetChunk) chunk = gtk_source_snippet_chunk_new ();
+ gtk_source_snippet_chunk_set_spec (chunk, ";");
+ gtk_source_snippet_add_chunk (snippet, chunk);
}
- ide_source_view_push_snippet (IDE_SOURCE_VIEW (view), snippet, &begin);
+ gtk_source_view_push_snippet (view, snippet, &begin);
- gtk_text_buffer_end_user_action (buffer);
+ gtk_text_buffer_end_user_action (GTK_TEXT_BUFFER (buffer));
}
-static gboolean
-ide_clang_completion_provider_refilter (IdeCompletionProvider *provider,
- IdeCompletionContext *context,
+static void
+ide_clang_completion_provider_refilter (GtkSourceCompletionProvider *provider,
+ GtkSourceCompletionContext *context,
GListModel *proposals)
{
IdeClangCompletionProvider *self = (IdeClangCompletionProvider *)provider;
g_assert (IDE_IS_CLANG_COMPLETION_PROVIDER (self));
- g_assert (IDE_IS_COMPLETION_CONTEXT (context));
+ g_assert (GTK_SOURCE_IS_COMPLETION_CONTEXT (context));
g_assert (G_IS_LIST_MODEL (proposals));
if (self->proposals != NULL)
{
- g_autofree gchar *word = NULL;
GtkTextIter begin, end;
- ide_completion_context_get_bounds (context, &begin, &end);
- word = gtk_text_iter_get_slice (&begin, &end);
- ide_clang_proposals_refilter (self->proposals, word);
+ g_clear_pointer (&self->refilter_word, g_free);
- return TRUE;
+ gtk_source_completion_context_get_bounds (context, &begin, &end);
+ self->refilter_word = gtk_text_iter_get_slice (&begin, &end);
+ ide_clang_proposals_refilter (self->proposals, self->refilter_word);
}
-
- return FALSE;
}
static gchar *
-ide_clang_completion_provider_get_title (IdeCompletionProvider *provider)
+ide_clang_completion_provider_get_title (GtkSourceCompletionProvider *provider)
{
return g_strdup ("Clang");
}
static void
-ide_clang_completion_provider_load (IdeCompletionProvider *provider,
- IdeContext *context)
+ide_clang_completion_provider_load (IdeClangCompletionProvider *self)
{
- IdeClangCompletionProvider *self = (IdeClangCompletionProvider *)provider;
g_autoptr(IdeClangClient) client = NULL;
+ g_autoptr(IdeContext) context = NULL;
g_assert (IDE_IS_CLANG_COMPLETION_PROVIDER (self));
- g_assert (IDE_IS_CONTEXT (context));
+ g_assert (self->loaded == FALSE);
+
+ self->loaded = TRUE;
+ context = ide_object_ref_context (IDE_OBJECT (self));
client = ide_object_ensure_child_typed (IDE_OBJECT (context), IDE_TYPE_CLANG_CLIENT);
+
g_set_object (&self->client, client);
}
@@ -303,25 +339,30 @@ ide_clang_completion_provider_populate_cb (GObject *object,
}
static void
-ide_clang_completion_provider_populate_async (IdeCompletionProvider *provider,
- IdeCompletionContext *context,
+ide_clang_completion_provider_populate_async (GtkSourceCompletionProvider *provider,
+ GtkSourceCompletionContext *context,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data)
{
IdeClangCompletionProvider *self = (IdeClangCompletionProvider *)provider;
g_autoptr(IdeTask) task = NULL;
- g_autofree gchar *word = NULL;
GtkTextIter begin, end;
g_assert (IDE_IS_CLANG_COMPLETION_PROVIDER (self));
g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
+ if (!self->loaded)
+ ide_clang_completion_provider_load (self);
+
task = ide_task_new (self, cancellable, callback, user_data);
ide_task_set_source_tag (task, ide_clang_completion_provider_populate_async);
- if (ide_completion_context_get_bounds (context, &begin, &end))
- word = gtk_text_iter_get_slice (&begin, &end);
+ g_clear_pointer (&self->refilter_word, g_free);
+ g_clear_pointer (&self->word, g_free);
+
+ if (gtk_source_completion_context_get_bounds (context, &begin, &end))
+ self->word = gtk_text_iter_get_slice (&begin, &end);
if (self->proposals == NULL)
self->proposals = ide_clang_proposals_new (self->client);
@@ -331,20 +372,20 @@ ide_clang_completion_provider_populate_async (IdeCompletionProvider *provider,
* latency a bit.
*/
if (!is_field_access (context))
- ide_completion_context_set_proposals_for_provider (context,
+ gtk_source_completion_context_set_proposals_for_provider (context,
provider,
G_LIST_MODEL (self->proposals));
ide_clang_proposals_populate_async (self->proposals,
&begin,
- word,
+ self->word,
cancellable,
ide_clang_completion_provider_populate_cb,
g_steal_pointer (&task));
}
static GListModel *
-ide_clang_completion_provider_populate_finish (IdeCompletionProvider *provider,
+ide_clang_completion_provider_populate_finish (GtkSourceCompletionProvider *provider,
GAsyncResult *result,
GError **error)
{
@@ -355,67 +396,44 @@ ide_clang_completion_provider_populate_finish (IdeCompletionProvider *provider,
}
static void
-ide_clang_completion_provider_display_proposal (IdeCompletionProvider *provider,
- IdeCompletionListBoxRow *row,
- IdeCompletionContext *context,
- const gchar *typed_text,
- IdeCompletionProposal *proposal)
+ide_clang_completion_provider_display (GtkSourceCompletionProvider *provider,
+ GtkSourceCompletionContext *context,
+ GtkSourceCompletionProposal *proposal,
+ GtkSourceCompletionCell *cell)
{
+ IdeClangCompletionProvider *self = (IdeClangCompletionProvider *)provider;
IdeClangCompletionItem *item = IDE_CLANG_COMPLETION_ITEM (proposal);
- g_autofree gchar *escaped = NULL;
- g_autofree gchar *markup = NULL;
- g_autofree gchar *highlight = NULL;
- g_autofree gchar *params_escaped = NULL;
+ const char *typed_text;
- g_assert (IDE_IS_CLANG_COMPLETION_PROVIDER (provider));
- g_assert (IDE_IS_COMPLETION_LIST_BOX_ROW (row));
- g_assert (IDE_IS_COMPLETION_CONTEXT (context));
+ g_assert (IDE_IS_CLANG_COMPLETION_PROVIDER (self));
+ g_assert (GTK_SOURCE_IS_COMPLETION_CONTEXT (context));
g_assert (IDE_IS_CLANG_COMPLETION_ITEM (item));
+ g_assert (GTK_SOURCE_IS_COMPLETION_CELL (cell));
- escaped = g_markup_escape_text (item->typed_text, -1);
- if (item->params != NULL)
- params_escaped = g_markup_escape_text (item->params, -1);
- highlight = ide_completion_fuzzy_highlight (escaped, typed_text);
- ide_completion_list_box_row_set_icon_name (row, item->icon_name);
- ide_completion_list_box_row_set_left (row, item->return_type);
- markup = g_strdup_printf ("%s%s<span fgalpha='32767'>%s</span>",
- highlight,
- item->params ? " " : "",
- params_escaped ?: "");
- ide_completion_list_box_row_set_center_markup (row, markup);
-}
-
-static gchar *
-ide_clang_completion_provider_get_comment (IdeCompletionProvider *provider,
- IdeCompletionProposal *proposal)
-{
- IdeClangCompletionItem *item = IDE_CLANG_COMPLETION_ITEM (proposal);
- g_autoptr(GVariant) result = ide_clang_completion_item_get_result (item);
- gchar *str = NULL;
-
- g_variant_lookup (result, "comment", "s", &str);
+ if (self->refilter_word)
+ typed_text = self->refilter_word;
+ else
+ typed_text = self->word;
- return str;
+ ide_clang_completion_item_display (item, cell, typed_text);
}
static void
-provider_iface_init (IdeCompletionProviderInterface *iface)
+provider_iface_init (GtkSourceCompletionProviderInterface *iface)
{
- iface->load = ide_clang_completion_provider_load;
iface->get_priority = ide_clang_completion_provider_get_priority;
iface->is_trigger = ide_clang_completion_provider_is_trigger;
iface->key_activates = ide_clang_completion_provider_key_activates;
- iface->activate_proposal = ide_clang_completion_provider_activate_proposal;
+ iface->activate = ide_clang_completion_provider_activate;
iface->refilter = ide_clang_completion_provider_refilter;
iface->get_title = ide_clang_completion_provider_get_title;
iface->populate_async = ide_clang_completion_provider_populate_async;
iface->populate_finish = ide_clang_completion_provider_populate_finish;
- iface->display_proposal = ide_clang_completion_provider_display_proposal;
- iface->get_comment = ide_clang_completion_provider_get_comment;
+ iface->display = ide_clang_completion_provider_display;
}
G_DEFINE_FINAL_TYPE_WITH_CODE (IdeClangCompletionProvider, ide_clang_completion_provider, IDE_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (IDE_TYPE_COMPLETION_PROVIDER, provider_iface_init))
+ G_IMPLEMENT_INTERFACE (GTK_SOURCE_TYPE_COMPLETION_PROVIDER,
provider_iface_init))
static void
ide_clang_completion_provider_dispose (GObject *object)
@@ -428,6 +446,9 @@ ide_clang_completion_provider_dispose (GObject *object)
g_clear_object (&self->client);
g_clear_object (&self->proposals);
+ g_clear_pointer (&self->word, g_free);
+ g_clear_pointer (&self->refilter_word, g_free);
+
G_OBJECT_CLASS (ide_clang_completion_provider_parent_class)->dispose (object);
}
diff --git a/src/plugins/clang/ide-clang-proposals.c b/src/plugins/clang/ide-clang-proposals.c
index a0a924b9d..debc3abaa 100644
--- a/src/plugins/clang/ide-clang-proposals.c
+++ b/src/plugins/clang/ide-clang-proposals.c
@@ -22,10 +22,11 @@
#include "config.h"
+#include <clang-c/Index.h>
+
#include <libide-code.h>
#include <libide-foundry.h>
#include <libide-sourceview.h>
-#include <clang-c/Index.h>
#include "ide-buffer-private.h"
@@ -344,7 +345,7 @@ ide_clang_proposals_do_refilter (IdeClangProposals *self,
keyword = NULL;
}
- if (keyword == NULL || !ide_completion_fuzzy_match (keyword, folded, &priority))
+ if (keyword == NULL || !gtk_source_completion_fuzzy_match (keyword, folded, &priority))
g_array_remove_index_fast (self->match_indexes, i - 1);
else
item->priority = priority;
@@ -393,7 +394,7 @@ ide_clang_proposals_do_refilter (IdeClangProposals *self,
Item item = { index, 0, 0, typed_text };
guint priority;
- if (ide_completion_fuzzy_match (typed_text, folded, &priority))
+ if (gtk_source_completion_fuzzy_match (typed_text, folded, &priority))
{
enum CXCursorKind kind = 0;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]