summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2020-04-02 13:29:32 +0000
committerMatthias Clasen <mclasen@redhat.com>2020-04-02 13:29:32 +0000
commitb6f6df9662678859ab03bd1d49fa434074e4d2ab (patch)
tree78570f9cb78ea8c5c0dd282b55e5019079878d3a
parentf169d23cdb0d8d851def16df0dc9583c5a0b69d5 (diff)
parentaaa4e40a1f72520d1691d41abdfd85d72bd51d28 (diff)
downloadgtk+-b6f6df9662678859ab03bd1d49fa434074e4d2ab.tar.gz
Merge branch 'im-context-wayland-fixes' into 'master'
Im context wayland fixes See merge request GNOME/gtk!1605
-rw-r--r--gtk/gtkimcontextsimple.c62
1 files changed, 26 insertions, 36 deletions
diff --git a/gtk/gtkimcontextsimple.c b/gtk/gtkimcontextsimple.c
index a96b3f0646..6c9c965f7d 100644
--- a/gtk/gtkimcontextsimple.c
+++ b/gtk/gtkimcontextsimple.c
@@ -44,6 +44,7 @@
#include "gtkimcontextsimpleprivate.h"
#include "gtkimcontextsimpleseqs.h"
+#include "gdk/gdkprofilerprivate.h"
/**
* SECTION:gtkimcontextsimple
@@ -120,8 +121,10 @@ static void gtk_im_context_simple_get_preedit_string (GtkIMContext
gchar **str,
PangoAttrList **attrs,
gint *cursor_pos);
-static void gtk_im_context_simple_set_client_widget (GtkIMContext *context,
- GtkWidget *widget);
+
+static void init_compose_table_async (GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
G_DEFINE_TYPE_WITH_CODE (GtkIMContextSimple, gtk_im_context_simple, GTK_TYPE_IM_CONTEXT,
G_ADD_PRIVATE (GtkIMContextSimple)
@@ -140,8 +143,9 @@ gtk_im_context_simple_class_init (GtkIMContextSimpleClass *class)
im_context_class->filter_keypress = gtk_im_context_simple_filter_keypress;
im_context_class->reset = gtk_im_context_simple_reset;
im_context_class->get_preedit_string = gtk_im_context_simple_get_preedit_string;
- im_context_class->set_client_widget = gtk_im_context_simple_set_client_widget;
gobject_class->finalize = gtk_im_context_simple_finalize;
+
+ init_compose_table_async (NULL, NULL, NULL);
}
static gchar*
@@ -159,7 +163,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;
@@ -173,7 +177,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;
}
@@ -187,7 +194,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;
}
@@ -233,7 +242,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;
}
@@ -244,23 +257,24 @@ init_compose_table_thread_cb (GTask *task,
gpointer task_data,
GCancellable *cancellable)
{
+ guint64 before = g_get_monotonic_time ();
+
if (g_task_return_error_if_cancelled (task))
return;
- g_return_if_fail (GTK_IS_IM_CONTEXT_SIMPLE (task_data));
+ gtk_im_context_simple_init_compose_table ();
- gtk_im_context_simple_init_compose_table (GTK_IM_CONTEXT_SIMPLE (task_data));
+ 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);
}
@@ -1427,30 +1441,6 @@ gtk_im_context_simple_get_preedit_string (GtkIMContext *context,
*cursor_pos = len;
}
-static void
-gtk_im_context_simple_set_client_widget (GtkIMContext *context,
- GtkWidget *widget)
-{
- GtkIMContextSimple *im_context_simple = GTK_IM_CONTEXT_SIMPLE (context);
- gboolean run_compose_table = FALSE;
-
- if (!widget)
- return;
-
- /* Load compose table for X11 or Wayland. */
-#ifdef GDK_WINDOWING_X11
- if (GDK_IS_X11_DISPLAY (gtk_widget_get_display (widget)))
- run_compose_table = TRUE;
-#endif
-#ifdef GDK_WINDOWING_WAYLAND
- if (GDK_IS_WAYLAND_DISPLAY (gtk_widget_get_display (widget)))
- run_compose_table = TRUE;
-#endif
-
- if (run_compose_table)
- init_compose_table_async (im_context_simple, NULL, NULL, NULL);
-}
-
/**
* gtk_im_context_simple_add_table: (skip)
* @context_simple: A #GtkIMContextSimple