static gboolean add_in_idle (GscProviderDevhelp *devhelp) { guint idx = 0; GList *ret = NULL; gboolean finished; /* Don't complete empty string (when word == NULL) */ if (devhelp->priv->word == NULL) { gtk_source_completion_context_add_proposals (devhelp->priv->context, GTK_SOURCE_COMPLETION_PROVIDER (devhelp), NULL, TRUE); population_finished (devhelp); return FALSE; } if (devhelp->priv->populate_iter == NULL) { devhelp->priv->populate_iter = find_first_proposal (devhelp); } while (idx < PROCESS_BATCH && devhelp->priv->populate_iter) { GtkSourceCompletionProposal *proposal; proposal = GTK_SOURCE_COMPLETION_PROPOSAL (g_sequence_get (devhelp->priv->populate_iter)); ret = g_list_prepend (ret, proposal); devhelp->priv->populate_iter = find_next_proposal (devhelp, devhelp->priv->populate_iter); ++idx; } ret = g_list_reverse (ret); finished = devhelp->priv->populate_iter == NULL; gtk_source_completion_context_add_proposals (devhelp->priv->context, GTK_SOURCE_COMPLETION_PROVIDER (devhelp), ret, finished); if (finished) { population_finished (devhelp); } return !finished; }
static void gedit_word_completion_view_activate (GeditViewActivatable *activatable) { GeditWordCompletionPluginPrivate *priv; GtkSourceCompletion *completion; GtkSourceCompletionProvider *provider; GtkTextBuffer *buf; gedit_debug (DEBUG_PLUGINS); priv = GEDIT_WORD_COMPLETION_PLUGIN (activatable)->priv; priv->window = gtk_widget_get_toplevel (GTK_WIDGET (priv->view)); /* We are disposing the window */ g_object_ref (priv->window); completion = gtk_source_view_get_completion (GTK_SOURCE_VIEW (priv->view)); buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->view)); provider = g_object_get_data (G_OBJECT (priv->window), WINDOW_PROVIDER); if (provider == NULL) { /* Standalone provider */ provider = GTK_SOURCE_COMPLETION_PROVIDER (create_provider ()); } priv->provider = g_object_ref (provider); gtk_source_completion_add_provider (completion, provider, NULL); gtk_source_completion_words_register (GTK_SOURCE_COMPLETION_WORDS (provider), buf); }
GtkSourceCompletionProvider* sourceview_provider_new (Sourceview* sv, IAnjutaProvider* iprov) { GObject* obj = g_object_new (SOURCEVIEW_TYPE_PROVIDER, NULL); SourceviewProvider* prov = SOURCEVIEW_PROVIDER(obj); prov->sv = sv; prov->iprov = iprov; return GTK_SOURCE_COMPLETION_PROVIDER(obj); }
static void on_notify_autocompletion (GSettings* settings, const gchar* key, gpointer user_data) { Sourceview *sv; sv = ANJUTA_SOURCEVIEW(user_data); GtkSourceCompletion* completion = gtk_source_view_get_completion(GTK_SOURCE_VIEW(sv->priv->view)); if (g_settings_get_boolean (settings, key)) { DEBUG_PRINT ("Register word completion provider"); GtkSourceCompletionWords *prov_words; prov_words = gtk_source_completion_words_new (NULL, NULL); gtk_source_completion_words_register (prov_words, gtk_text_view_get_buffer (GTK_TEXT_VIEW (sv->priv->view))); gtk_source_completion_add_provider (completion, GTK_SOURCE_COMPLETION_PROVIDER (prov_words), NULL); } else { GList* node; for (node = gtk_source_completion_get_providers(completion); node != NULL; node = g_list_next (node)) { if (GTK_IS_SOURCE_COMPLETION_WORDS(node->data)) { DEBUG_PRINT ("Unregister word completion provider"); gtk_source_completion_words_unregister (GTK_SOURCE_COMPLETION_WORDS(node->data), gtk_text_view_get_buffer (GTK_TEXT_VIEW (sv->priv->view))); gtk_source_completion_remove_provider(completion, GTK_SOURCE_COMPLETION_PROVIDER(node->data), NULL); break; } } } }
static void remove_view (WindowData *data, GtkSourceView *view) { GtkSourceCompletion *completion; GtkTextBuffer *buf; completion = gtk_source_view_get_completion (view); buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); gtk_source_completion_remove_provider (completion, GTK_SOURCE_COMPLETION_PROVIDER (data->provider), NULL); gtk_source_completion_words_unregister (data->provider, buf); }
SourceView::SourceView(): Gtk::ScrolledWindow(), source_view(GTK_SOURCE_VIEW(gtk_source_view_new())) { add(*Glib::wrap(GTK_WIDGET(source_view))); completion = gtk_source_view_get_completion(source_view); completion_words = gtk_source_completion_words_new("Suggestions", nullptr); gtk_source_completion_words_register(completion_words, gtk_text_view_get_buffer(GTK_TEXT_VIEW(source_view))); gtk_source_completion_add_provider(completion, GTK_SOURCE_COMPLETION_PROVIDER(completion_words), nullptr); gtk_source_buffer_set_highlight_matching_brackets(GetSourceBuffer(), TRUE); gtk_source_view_set_show_line_marks(source_view, TRUE); ShowLineNumbers(true); show_all(); }
static void ide_langserv_completion_provider_complete_cb (GObject *object, GAsyncResult *result, gpointer user_data) { IdeLangservClient *client = (IdeLangservClient *)object; g_autoptr(CompletionState) state = user_data; g_autoptr(GVariant) return_value = NULL; g_autoptr(GError) error = NULL; GVariant *node; GList *list = NULL; GVariantIter iter; IDE_ENTRY; g_assert (IDE_IS_LANGSERV_CLIENT (client)); g_assert (G_IS_ASYNC_RESULT (result)); g_assert (state != NULL); g_assert (IDE_IS_LANGSERV_COMPLETION_PROVIDER (state->self)); g_assert (GTK_SOURCE_IS_COMPLETION_CONTEXT (state->context)); if (!ide_langserv_client_call_finish (client, result, &return_value, &error)) { if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) g_message ("%s", error->message); IDE_GOTO (failure); } /* * TODO: We will want to make a much more optimized version of this using * the other completion result work we've done. */ g_variant_iter_init (&iter, return_value); while (g_variant_iter_loop (&iter, "v", &node)) { g_autoptr(GtkSourceCompletionItem) item = NULL; g_autofree gchar *full_label = NULL; const gchar *label; const gchar *detail; const gchar *icon_name = NULL; gboolean success; gint64 kind = 0; success = JSONRPC_MESSAGE_PARSE (node, "label", JSONRPC_MESSAGE_GET_STRING (&label), "detail", JSONRPC_MESSAGE_GET_STRING (&detail) ); if (!success) { IDE_TRACE_MSG ("Failed to extract completion item from node"); continue; } /* Optional kind field */ JSONRPC_MESSAGE_PARSE (node, "kind", JSONRPC_MESSAGE_GET_INT64 (&kind)); kind = ide_langserv_decode_completion_kind (kind); if (kind != IDE_SYMBOL_NONE) icon_name = ide_symbol_kind_get_icon_name (kind); if (label != NULL && detail != NULL) full_label = g_strdup_printf ("%s : %s", label, detail); else full_label = g_strdup (label); //item = gtk_source_completion_item_new (full_label, label, NULL, NULL); item = g_object_new (GTK_SOURCE_TYPE_COMPLETION_ITEM, "icon-name", icon_name, "label", full_label, "text", label, NULL); list = g_list_prepend (list, g_steal_pointer (&item)); } failure: gtk_source_completion_context_add_proposals (state->context, GTK_SOURCE_COMPLETION_PROVIDER (state->self), list, TRUE); g_list_free_full (list, g_object_unref); IDE_EXIT; }