diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-04-02 08:56:21 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-04-02 09:02:05 -0400 |
commit | 8ec254e2bbe030d9ccca2d6ba25198644335e09f (patch) | |
tree | 37eae47b4add1b8bb114385057bfcf5a1cc71694 | |
parent | 2a9911724f5ad1f3fa7eb8c7f48e7aaac45185f7 (diff) | |
download | gtk+-8ec254e2bbe030d9ccca2d6ba25198644335e09f.tar.gz |
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.
-rw-r--r-- | gtk/gtkimcontextsimple.c | 30 |
1 files 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); } /** |