[gtksourceview/wip/chergert/gsv-gtk4] tests: implement display and activate for test-completion



commit ebe3d9ca0f9bb787e73b1bfd0bfa0450abc97084
Author: Christian Hergert <chergert redhat com>
Date:   Sun Aug 30 14:39:38 2020 -0700

    tests: implement display and activate for test-completion

 tests/test-completion.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 50 insertions(+), 1 deletion(-)
---
diff --git a/tests/test-completion.c b/tests/test-completion.c
index fcf74aafd..7ea2fa674 100644
--- a/tests/test-completion.c
+++ b/tests/test-completion.c
@@ -172,8 +172,12 @@ test_provider_populate_async (GtkSourceCompletionProvider *completion_provider,
                g_list_store_append (results, iter->data);
        }
 
-       g_list_free_full (proposals, g_object_unref);
        g_task_return_pointer (task, results, g_object_unref);
+
+       if (provider->is_random)
+       {
+               g_list_free (proposals);
+       }
 }
 
 static GListModel *
@@ -184,6 +188,48 @@ test_provider_populate_finish (GtkSourceCompletionProvider  *provider,
        return g_task_propagate_pointer (G_TASK (result), error);
 }
 
+static void
+test_provider_display (GtkSourceCompletionProvider *provider,
+                       GtkSourceCompletionContext  *context,
+                       GtkSourceCompletionProposal *proposal,
+                       GtkSourceCompletionCell     *cell)
+{
+       if (TEST_IS_PROPOSAL (proposal))
+       {
+               TestProposal *p = TEST_PROPOSAL (proposal);
+
+               if (gtk_source_completion_cell_get_column (cell) == GTK_SOURCE_COMPLETION_COLUMN_TYPED_TEXT)
+               {
+                       if (p->markup)
+                               gtk_source_completion_cell_set_markup (cell, p->markup);
+                       else if (p->label)
+                               gtk_source_completion_cell_set_text (cell, p->label);
+                       else if (p->text)
+                               gtk_source_completion_cell_set_text (cell, p->text);
+               }
+       }
+}
+
+static void
+test_provider_activate (GtkSourceCompletionProvider *provider,
+                        GtkSourceCompletionContext  *context,
+                        GtkSourceCompletionProposal *proposal)
+{
+       GtkTextBuffer *buffer;
+       GtkTextIter begin, end;
+
+       gtk_source_completion_context_get_bounds (context, &begin, &end);
+       buffer = gtk_text_iter_get_buffer (&begin);
+
+       if (TEST_IS_PROPOSAL (proposal))
+       {
+               gtk_text_buffer_begin_user_action (buffer);
+               gtk_text_buffer_delete (buffer, &begin, &end);
+               gtk_text_buffer_insert (buffer, &begin, TEST_PROPOSAL (proposal)->text, -1);
+               gtk_text_buffer_end_user_action (buffer);
+       }
+}
+
 static void
 test_provider_iface_init (GtkSourceCompletionProviderInterface *iface)
 {
@@ -191,6 +237,8 @@ test_provider_iface_init (GtkSourceCompletionProviderInterface *iface)
        iface->populate_async = test_provider_populate_async;
        iface->populate_finish = test_provider_populate_finish;
        iface->get_priority = test_provider_get_priority;
+       iface->display = test_provider_display;
+       iface->activate = test_provider_activate;
 }
 
 static void
@@ -510,6 +558,7 @@ main (int   argc,
        main_loop = g_main_loop_new (NULL, FALSE);
 
        gtk_init ();
+       gtk_source_init ();
 
        create_window ();
 


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