[gtk/im-context-wayland-fixes: 3/4] imcontextsimple: Simpify Compose file loading



commit 8ec254e2bbe030d9ccca2d6ba25198644335e09f
Author: Matthias Clasen <mclasen redhat com>
Date:   Thu Apr 2 08:56:21 2020 -0400

    imcontextsimple: Simpify Compose file loading
    
    We are not loading the Compose file for individual contexts,
    it just gets added to a global list. So don't pass an im context
    along. This will let us move the loading out of the initialization
    of individual contexts, and only do it once.

 gtk/gtkimcontextsimple.c | 30 ++++++++++++++++--------------
 1 file changed, 16 insertions(+), 14 deletions(-)
---
diff --git a/gtk/gtkimcontextsimple.c b/gtk/gtkimcontextsimple.c
index 1b809a12e5..35ecce3d2e 100644
--- a/gtk/gtkimcontextsimple.c
+++ b/gtk/gtkimcontextsimple.c
@@ -160,7 +160,7 @@ get_x11_compose_file_dir (void)
 }
 
 static void
-gtk_im_context_simple_init_compose_table (GtkIMContextSimple *im_context_simple)
+gtk_im_context_simple_init_compose_table (void)
 {
   gchar *path = NULL;
   const gchar *home;
@@ -174,7 +174,10 @@ gtk_im_context_simple_init_compose_table (GtkIMContextSimple *im_context_simple)
   path = g_build_filename (g_get_user_config_dir (), "gtk-4.0", "Compose", NULL);
   if (g_file_test (path, G_FILE_TEST_EXISTS))
     {
-      gtk_im_context_simple_add_compose_file (im_context_simple, path);
+      G_LOCK (global_tables);
+      global_tables = gtk_compose_table_list_add_file (global_tables, path);
+      G_UNLOCK (global_tables);
+
       g_free (path);
       return;
     }
@@ -188,7 +191,9 @@ gtk_im_context_simple_init_compose_table (GtkIMContextSimple *im_context_simple)
   path = g_build_filename (home, ".XCompose", NULL);
   if (g_file_test (path, G_FILE_TEST_EXISTS))
     {
-      gtk_im_context_simple_add_compose_file (im_context_simple, path);
+      G_LOCK (global_tables);
+      global_tables = gtk_compose_table_list_add_file (global_tables, path);
+      G_UNLOCK (global_tables);
       g_free (path);
       return;
     }
@@ -234,7 +239,11 @@ gtk_im_context_simple_init_compose_table (GtkIMContextSimple *im_context_simple)
   g_strfreev (langs);
 
   if (path != NULL)
-    gtk_im_context_simple_add_compose_file (im_context_simple, path);
+    {
+      G_LOCK (global_tables);
+      global_tables = gtk_compose_table_list_add_file (global_tables, path);
+      G_UNLOCK (global_tables);
+    }
   g_free (path);
   path = NULL;
 }
@@ -252,21 +261,19 @@ init_compose_table_thread_cb (GTask            *task,
 
   g_return_if_fail (GTK_IS_IM_CONTEXT_SIMPLE (task_data));
 
-  gtk_im_context_simple_init_compose_table (GTK_IM_CONTEXT_SIMPLE (task_data));
+  gtk_im_context_simple_init_compose_table ();
 
   if (GDK_PROFILER_IS_RUNNING)
     gdk_profiler_end_mark (before, "im compose table load (thread)", NULL);
 }
 
 static void
-init_compose_table_async (GtkIMContextSimple   *im_context_simple,
-                          GCancellable         *cancellable,
+init_compose_table_async (GCancellable         *cancellable,
                           GAsyncReadyCallback   callback,
                           gpointer              user_data)
 {
   GTask *task = g_task_new (NULL, cancellable, callback, user_data);
   g_task_set_source_tag (task, init_compose_table_async);
-  g_task_set_task_data (task, g_object_ref (im_context_simple), g_object_unref);
   g_task_run_in_thread (task, init_compose_table_thread_cb);
   g_object_unref (task);
 }
@@ -1437,12 +1444,7 @@ static void
 gtk_im_context_simple_set_client_widget  (GtkIMContext *context,
                                           GtkWidget    *widget)
 {
-  GtkIMContextSimple *im_context_simple = GTK_IM_CONTEXT_SIMPLE (context);
-
-  if (!widget)
-    return;
-
-  init_compose_table_async (im_context_simple, NULL, NULL, NULL);
+  init_compose_table_async (NULL, NULL, NULL);
 }
 
 /**


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